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

最后效果展示

首先是原版

接着是黑白版的

最后是彩色版的

是不是看着很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= 0while 1:im.seek(i)imframe = im.copy()if i == 0:palette = imframe.getpalette()else:imframe.putpalette(palette)yield imframei += 1except EOFError:passdef 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 Imagedef 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= 0while 1:im.seek(i)imframe = im.copy()if i == 0:palette = imframe.getpalette()else:imframe.putpalette(palette)yield imframei += 1except EOFError:passdef 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)

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

python制作代码舞视频来啦~相关推荐

  1. 使用python实现代码动画视频

    使用python实现代码动画视频 前言 最近在CSDN上面看到一个将视频转换为由代码组成的视频,所以想自己写一个.参考的原文博客为:https://blog.csdn.net/hhladminhhl/ ...

  2. Python制作卡点视频

    欢迎关注 Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.ne ...

  3. 百万点赞怎么来?用 Python 制作抖音视频原来这么简单

    关于视频的文章之前也讲几篇,那么今天我就和大家来分享一下Python同样也可以用来制作视频,也就是调用moviepy的模块. 喜欢本文记得收藏.点赞.关注. 完整代码.技术交流,文末获取 关于Movi ...

  4. 百万点赞怎么来?用Python制作抖音视频原来这么简单!

    那么在上一篇教程当中,我们讲了Python在图片处理当中的应用,通过调用当中的opencv的模块,那么今天小编就和大家来分享一下Python同样也可以用来制作视频,也就是调用moviepy的模块. 关 ...

  5. Moviepy结合Basemap,用python制作旋转地球视频

    python语言可以方便地制作和编辑视频,制作视频的核心是moviepy库,在使用moviepy的基础上综合调用其它的功能库,就可以做出各种有趣的视频.旋转的地球是比较常见的一个视频内容,我们看看怎样 ...

  6. 百万点赞怎么来?用Python制作抖音视频原来这么简单

    前言 今天小编就和大家来分享一下Python同样也可以用来制作视频,也就是调用moviepy的模块. 关于Moviepy模块 Moviepy是一个用于视频剪辑的Python模块,可被用来进行一些基本的 ...

  7. python制作鬼畜_视频剪辑什么鬼?Python 带你高效创作短视频

    近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节;在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. 之前有两篇文章分别是实现了制作卡 ...

  8. python制作字符画视频来啦~

    字符画是什么? 字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感. 如果我们想要手工绘制出字符画,首先要有 ...

  9. OpenCV 标定摄像头(Python 版本代码,视频中标定,亲测可用)

    在机器视觉领域,摄像头的标定指通过技术手段拿到相机的内参.外参及畸变参数. 相机内参长这样,利用针孔模型,将 3d 物体透视投影到 2d 的相机屏幕上. P = [ f x 0 c x 0 f y c ...

最新文章

  1. Springboot-Vue-MybatisPlus 返回给前端的 Long类型数据失去精度怎么办 之 Long类型作为实体类的一个属性
  2. 始终在新标签页中打开文件
  3. linux usermod -aG命令:将用户添加到某个组group
  4. BOOST_TEST_LE和BOOST_TEST_LT的用法
  5. QT的QColor 类的使用
  6. RecycleView弹性滑动
  7. [SAP FI] Bank Master Vendor Master Creation Related Knowledge
  8. PHP单引号 ' ',没有任何意义,对所引内容不经任何处理直接拿过来
  9. php多功能引流工具箱源码
  10. python画出roc曲线 auc计算逻辑_从scikitlearn(sklearn)的多类数据计算AUC和ROC曲线?...
  11. android84 广播接受者
  12. 【NLP】基于神经网络PCNN(Piece-Wise-CNN)的关系抽取模型
  13. C++实现Vgg19分类器(四)主函数
  14. 春节假期 | 最强抢票攻略
  15. Unity格子类三消游戏【物体下落】小细节(Unity萌新的备忘录)
  16. 09 conventional exercise
  17. rpcx服务框架浅析13-远程调用
  18. Win2003 IIS6.0性能优化指南
  19. 丰富的层次感,打造190㎡现代简约居住空间
  20. 温湿度传感器485通讯协议

热门文章

  1. Vue:生命周期函数的作用
  2. GNSS增强定位技术发展与星地融合应用
  3. 经验干货:使用tf.py_func函数增加Tensorflow程序的灵活性
  4. 感情沟通出了问题要怎么解决_婚姻难题咨询:感情沟通出了问题要怎么解决?...
  5. 魅族16Android版本,魅族16/16 Plus再曝光:大小都有骁龙845版本
  6. oracle数据库管理员默认账户密码
  7. 使用SQL.js访问SQLite
  8. 软文的写作形式(一)
  9. STVD 安装出现“Microsoft Visual C++ 2005 Redistributable”提示,无法进一步安装
  10. 手把手教你设置JVM调优参数