顺便把过程记录在这里。

效果

先上效果,来点动力:

源视频: 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. 进一步优化

到了这里,核心功能基本都完成了。

不过仔细想想,其实还有很多可以做的:

每次转换都要很久的时间,能不能边转换边播放?或者转换后把数据保存起来,下次播放时,就直接读缓存。

为啥我的字符动画没有声音,看无声电影么?

能不能用彩色字符?