一、简要说明
简述:本文主要展示将视频转成ASCII符号形式展示出来,带音频。
运行环境:Win10/Python3.5。
主要模块: PIL、numpy、shutil。
[PIL]: 图像处理
[numpy]: 矩阵形式读取图片数据
*[shutil]: 删除目录
注意点:ffmpeg.exe(视频处理) 可以自行网上下载。
二、简单分析
在网上看到转成字符形式的视频,感觉挺有趣的,于是查阅相关资料,开始实现一下。基本思路:主要使用 ffmpeg 对进行视频操作,然后使用 PIL 对图片进行缩小、灰度和转码的处理。流程如下:
1. 创建临时路径。
2. 将视频按帧分割成图片存入临时目录。
3. 遍历将图片缩放、转成灰度,再转成ASCII形式的图片。
4. 将ASCII形式的图片合成视频。
5. 获取源文件的音频文件。
6. 合并视频和音频文件。
再来看看效果图:

三、开发流程
3.1、创建目录,存储图片的临时路径

以上代码主要创建源视频切割图片存储路径、转码后图片存储路径和输出文件的存储路径,图片的存储路径为 ==临时路径== ,每次执行前会先清空之前的文件,请注意。
3.2、将视频分割成图片

cmd:ffmpeg-i[输入文件名]-r[fps,帧率][分割图存储路径]
这里就比较简单,使用 ==ffmpeg== 将视频分割成图片并按照相应个数存储在临时路径即可。查阅ffmpeg命令行说明
3.3、将视频分割成图片

这一步是重点,在遍历获取源图片目录列表之后,就可以分步进行操作了:
1、缩小图片、转成灰度模式,存入数组。
2、新建空白图片(灰度模式、与原始图片等宽高)。
3、将每个字符绘制在一定的区域内。
4、保存字符图片。
下面就是替换的字符:
self.ascii_char =list("$@B%8&WM#*oahkbdpqwO0QLCJYXzcvunxrjft/\|()1[]?-_+~<>i!......... ")
3.4、将ascii形式的图片合成视频

遍历转码的图片,合成视频。
cmd:ffmpeg-threads2-start_number[开始图片编号]-r[帧率,fps]-i[图片路径]-vcodec[指定解码器][输出文件名]
3.5、获取音频mp3文件

cmd:ffmpeg-i[输入视频文件名]-fmp3[输出的mp3文件名]
3.5、合并视频和音频文件

上面代码就是将视频和音频进行合并,转成全符号的视频也不会丢失音频。
cmd :ffmpeg -i[视频文件名]-i[音频文件名]-strict -2 -f mp4[合并后的文件名]
四、生成GIF动图

上面主要实现:将分割出来的图片,合成一张GIF动图,通过设置越过的图片数,可以减小容量,但是会加速动画效果,上面的效果图,就是通过这里生成的。
五、附录

网友评论