python制作代码舞视频来啦~

简介: python制作代码舞视频来啦~

上一篇文章我们介绍了如何制作字符画视频,今天就来给大家介绍一下代码舞的视频制作

最后效果展示

首先是原版


接着是黑白版的


最后是彩色版的


是不是看着很nice呢,哈哈哈哈

项目实现

第一步

首先我们要准备一个视频,然后我们需要把视频转化为gif图片

视频转化为gif的方式途径有很多,我这里是在这个网站里面转化的


第二步

在这里我们需要借助到一个工具


第一个框框是图片的位置,第二个框框是文件输出的位置,一般不需要改,上传图片后,我们点击Settings选项


Output type有三个选项,第一个是生成一个html文件,第二个是生成黑白的代码gif图片,第三个是生成彩色的gif图片,也就是文章开头的样子,同时在它的输出路径下有一个temp文件。里面存放的就是gif图片每一帧的图片


第三步

这里我们就需要用python代码将temp文件夹里面的每一帧图片合成mp4视频

首先导入本次项目需要的包

import os
import re
import cv2
from PIL import Image

然后我们要将temp文件夹里面的gif图片改成数字名字,顺便把bmp类型的图片删除

def rename_gif(gif_path): # temp_path 是你存放gif和bmp文件的路径文件夹,也就是temp文件夹的路径
    file_list = os.listdir(gif_path)  # 读取当前文件夹所有文件
    n = len(file_list)
    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(gif_path), s)  # 原先的图片名字
            dst = os.path.join(os.path.abspath(gif_path), res[0] +'.gif')  # 根据自己的需要重新命名
            os.rename(src, dst)  # 重命名,覆盖原先的名字
        else:
            os.remove(gif_path + s) # 删除.bmp文件

然后我们需要将gif图片转化为jpg类型便于后面合成mp4文件

def iter_frames(im):
    try:
        i= 0
        while 1:
            im.seek(i)
            imframe = im.copy()
            if i == 0:
                palette = imframe.getpalette()
            else:
                imframe.putpalette(palette)
            yield imframe
            i += 1
    except EOFError:
        pass
def gif2img(gif_path):
    gifs = os.listdir(gif_path)
    gifs.sort(key=lambda x: int(x[:-4]))  # 以名称字符串的数字从小到大排序
    for gif in gifs:
        im = Image.open(gif_path+gif)  # 打开gif格式的图片
        im = im.convert('RGB')
        if not os.path.exists('./img'):
            os.makedirs('./img')
        for i, frame in enumerate(iter_frames(im)):
            frame.save('./img/' + gif[0:-4] + '.jpg', **frame.info)  # 保存成jpg格式

最后就是合成我们的视频

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()

当然最后还有我们的主函数

if __name__ == '__main__':
    gif_path = './temp/' # gif文件的路径
    video_path = '合成后的视频.mp4' # 要保存的视频路径
    # 修改.gif文件的名字
    rename_gif(gif_path)
    # 将.gif文件转换为.jpg文件
    gif2img(gif_path)
    # 将.jpg文件转换为.mp4文件
    charts2video('./cache_char/',video_path)

最后就合成我们需要的代码舞视频啦,如果你想再给代码舞视频加上背景音乐,你需要用视频剪辑软件进行合成,从原始视频里面提取背景mp3文件的话,可以用网上在线转换器,我这里用的是


最后所有源码奉上

import os
import re
import cv2
from PIL import Image
def rename_gif(gif_path): # temp_path 是你存放gif和bmp文件的路径文件夹,也就是temp文件夹的路径
    file_list = os.listdir(gif_path)  # 读取当前文件夹所有文件
    n = len(file_list)
    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(gif_path), s)  # 原先的图片名字
            dst = os.path.join(os.path.abspath(gif_path), res[0] +'.gif')  # 根据自己的需要重新命名
            os.rename(src, dst)  # 重命名,覆盖原先的名字
        else:
            os.remove(gif_path + s) # 删除.bmp文件
def iter_frames(im):
    try:
        i= 0
        while 1:
            im.seek(i)
            imframe = im.copy()
            if i == 0:
                palette = imframe.getpalette()
            else:
                imframe.putpalette(palette)
            yield imframe
            i += 1
    except EOFError:
        pass
def gif2img(gif_path):
    gifs = os.listdir(gif_path)
    gifs.sort(key=lambda x: int(x[:-4]))  # 以名称字符串的数字从小到大排序
    for gif in gifs:
        im = Image.open(gif_path+gif)  # 打开gif格式的图片
        im = im.convert('RGB')
        if not os.path.exists('./img'):
            os.makedirs('./img')
        for i, frame in enumerate(iter_frames(im)):
            frame.save('./img/' + gif[0:-4] + '.jpg', **frame.info)  # 保存成jpg格式
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()
if __name__ == '__main__':
    gif_path = './temp/' # gif文件的路径
    video_path = '合成后的视频.mp4' # 要保存的视频路径
    # 修改.gif文件的名字
    rename_gif(gif_path)
    # 将.gif文件转换为.jpg文件
    gif2img(gif_path)
    # 将.jpg文件转换为.mp4文件
    charts2video('./cache_char/',video_path)

以上就是代码舞的视频制作,希望能得到你的喜欢


目录
打赏
0
0
0
0
38
分享
相关文章
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
56 6
Python中的装饰器:功能增强与代码复用的利器
在Python编程中,装饰器是一种强大而灵活的工具,它允许开发者以简洁优雅的方式增强函数或方法的功能。本文将深入探讨装饰器的定义、工作原理、应用场景以及如何自定义装饰器。通过实例演示,我们将展示装饰器如何在不修改原有代码的基础上添加新的行为,从而提高代码的可读性、可维护性和复用性。此外,我们还将讨论装饰器在实际应用中的一些最佳实践和潜在陷阱。
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
112 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
24天前
|
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
52 10
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
107 8
|
2月前
|
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
68 11
|
2月前
|
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
57 11
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!

热门文章

最新文章