写点什么

军体拳代码

作者:秋名山码民
  • 2022 年 6 月 20 日
  • 本文字数:1396 字

    阅读完需:约 5 分钟

吹水

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

想思路

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


  • 视频变图片,专业术语:视频抽帧

  • 图片变字符,专业术语:把抽帧得到的图片集转换为字符画集

  • 字符变舞蹈,专业术语:循环打印,变成动画效果

代码实现

视频抽帧

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


转化字符

将 gif 转化为字符



用 python 导入库


import osimport reimport shutilimport cv2from PIL import Imageimport moviepy.editor as mpy
复制代码


读取字符


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 中的一个库


pip install opencv-python
复制代码


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.19 加入

2019NOIP退役成员,华为云享专家,阿里云专家博主,csdn博主,努力进行算法分享,有问题欢迎私聊

评论

发布
暂无评论
军体拳代码_6月月更_秋名山码民_InfoQ写作社区