前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >码神军训(四,五)——代码跳舞军体拳

码神军训(四,五)——代码跳舞军体拳

作者头像
秋名山码神
发布2022-12-13 14:19:42
3280
发布2022-12-13 14:19:42
举报
文章被收录于专栏:码神随笔

吹水

今天,码神依旧凉爽,军体拳,摸鱼一天,所以早上就在操场趴着,**不过,我学会了, **信不信?看到抖音小姐姐的舞蹈,用代码做出来,还挺好看,我也想试一下,不会,学莫,反正假酒已经醒了。

想思路

总不能一个一个做吧,这可是一个视频,一个一个做我做到明年都弄不完,大致思路如下:

  • 视频变图片,专业术语:视频抽帧
  • 图片变字符,专业术语:把抽帧得到的图片集转换为字符画集
  • 字符变舞蹈,专业术语:循环打印,变成动画效果

代码实现

视频抽帧

将一段视频截取下来,使用GIF截取工具

请添加图片描述
请添加图片描述

转化字符

将gif转化为字符

请添加图片描述
请添加图片描述

用python导入库

代码语言:javascript
复制
import os
import re
import shutil
import cv2
from PIL import Image
import moviepy.editor as mpy

读取字符

代码语言:javascript
复制
def rename_gif():
    file_list = os.listdir("./temp")  # 读取当前文件夹所有文件
    # print(file_list)
    print("检测到文件夹下图片:")
    n = len(file_list)
    num_list = []
    num1 = num2 = 0
    for i in range(n):
        s = str(file_list[i])
        if s[-4:] == ".gif":  # 检查后缀
            res = re.findall(r"\d+", s)
            if res[0] == '1':
                num1 += 1
            if res[0] == '2':
                num2 += 1
            src = os.path.join(os.path.abspath('./temp/'), s)  # 原先的图片名字
            dst = os.path.join(os.path.abspath('./temp/'), res[0] + '-' + res[1]+'.gif')  # 根据自己的需要重新命名
            os.rename(src, dst)  # 重命名,覆盖原先的名字
    num_list.append(num1)
    num_list.append(num2)
    file_list = os.listdir("./temp")  # 读取当前文件夹所有文件
    for i in range(n):
        s = str(file_list[i])
        if s[-4:] == ".gif":  # 检查后缀
            res = re.findall(r"\d+", s)
            src = os.path.join(os.path.abspath('./temp/'), s)  # 原先的图片名字
            a = int(res[0])-1
            index = a*num_list[a-1]
            dst = os.path.join(os.path.abspath('./temp/'), str(index + int(res[1])) + '.gif')  # 根据自己的需要重新命名
            os.rename(src, dst)  # 重命名,覆盖原先的名字

循环输出

用到python中的一个库

代码语言:javascript
复制
pip install opencv-python
代码语言:javascript
复制
def charts2video(img_path, video_path):
    """将给定目录下的图片转成视频
    Args:
        img_path: 图片路径
        video_path: 输出视频的路径和名称
    Returns: 图片转成的视频
    """
    images = os.listdir(img_path)
    images.sort(key=lambda x: int(x[:-4]))  # 以名称字符串的数字从小到大排序  
    fps = 12  # 帧数
    fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
    im = Image.open(img_path + images[0])
    video_writer = cv2.VideoWriter(video_path, fourcc, fps, im.size)
    for img_i in images:
        frame = cv2.imread(img_path + img_i)
        print('开始将 ' + img_i + ' 加入视频\n')
        video_writer.write(frame)  # 注意:图片尺寸必须和视频尺寸一样,不然不会被加入视频中!!!
    video_writer.release()

最后的代码舞视频我已经上传到B站了,大家可以一起来欣赏下喔。 还有就是我已经学会军体拳了,不用一直摸鱼了 https://www.bilibili.com/video/BV1RP4y18741/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 吹水
  • 想思路
  • 代码实现
    • 视频抽帧
      • 转化字符
        • 循环输出
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档