顺便把过程记录在这里。
效果
先上效果,来点动力:
源视频: BadApple.mp4
转换后:
步骤:
将视频转化为一帧一帧的图片
把图片转化为字符画
按顺序播放字符画
准备
1. 模块
这个程序需要用到这样几个模块:
opencv-python # 用来读取视频和图片
numpy # opencv-python 依赖于它
准备阶段,首先安装依赖:
pip3 install numpy opencv-python
然后新建python代码文档,在开头添加上下面的导入语句
#-*- coding:utf-8 -*-import numpy as np
2. 材料
材料就是需要转换的视频文件了,我这里用的是BadApple.mp4,下载下来和代码放到同一目录下
你也可以换成自己的,建议是学习时尽量选个短一点的视频,几十秒就行了,不然调试起来很痛苦。(或者自己稍微修改一下函数,只转换一定数量的帧。)
此外,要选择黑白分明的视频。否则的话,就需要彩色字符才能有足够好的表现,有时间我试试。
python学习路线分三大阶段:基础-进阶-框架-项目实战
基础第一阶段:基础Python的理解。基础第二阶段面对对象编程(注重编程能力)
基础第三阶段面向对象“设计思想”-封装-继承。基础第四阶段python高级专题。
进阶班第一阶段:linux基础。第二:python web工具。第三python部署工具。
第四关系型数据库。第五Python web框架基础原理。
框架阶段.python web开发第一阶段web.py。基础第二Django基础。
第三flask基础。第四tornado基础,
项目实战:个人博客系统-微信开发-企业OA系统=网盘系统。
1. 按帧读取视频
现在继续添加代码,实现第一步:按帧读取视频。
下面这个函数,接受视频路径和字符视频的尺寸信息,返回一个img列表,其中的img是尺寸都为指定大小的灰度图。
写完后可以写个main方法测试一下,像这样:
如果运行没报错,就没问题
代码里的注释应该写得很清晰了,继续下一步。
2. 图像转化为字符画
视频转换成了图像,这一步便是把图像转换成字符画
下面这个函数,接受一个img对象为参数,返回对应的字符画。
上面的函数只接受一帧为参数,一次只转换一帧,可我们需要的是转换所有的帧,所以就再把它包装一下:
没报错的话,就可以下一步了。(这一步比较慢,测试阶段建议用短一点的视频,或者稍微改一下,只处理前30秒之类的)
3. 播放字符视频
P.S. 开头已经说明了, curses 只支持 类 unix 系统.
写了这么多代码,现在终于要出成果了。现在就是最激动人心的一步:播放字符画了
同样的,我把它封装成了一个函数。下面这个函数接受一个字符画的列表
好,接下来就是见证奇迹的时刻
不过开始前要注意,字符画的播放必须在shell窗口下运行,在pycharm里运行会看到一堆无意义字符。另外播放前要先最大化shell窗口
写完后,开个shell,最大化窗口,然后键入(文件名换成你的)
python3 video2chars.py
可能要等很久。我使用示例视频大概需要一分钟左右。看到提示的时候,按回车,开始播放!
这样就完成了视频到字符动画的转换, 除去注释, 大概七十行代码的样子. 稍微超出了点预期, 不过效果真是挺棒的.
4. 进一步优化
到了这里,核心功能基本都完成了。
不过仔细想想,其实还有很多可以做的:
每次转换都要很久的时间,能不能边转换边播放?或者转换后把数据保存起来,下次播放时,就直接读缓存。
为啥我的字符动画没有声音,看无声电影么?
能不能用彩色字符?