一个有趣的Python案例:将抖音视频转换为字符视

介绍

字符视频就是画面全部由字符组成的,那就先来看看效果:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

原视频如下: 本文来自小莫扎特博客www.plusminustsuchi.com 提供

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

那么用代码怎么实现的呢?下面用python实现,话不多说,直接上干货。 本文来自小莫扎特博客www.plusminustsuchi.com 提供

本文福利:私信回复【PDF】可获取Python电子书一套

代码实现详解

其实总体思路分为3个步骤:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

1.将原视频分割成若干个图片以及分离出音频 本文来自小莫扎特博客www.plusminustsuchi.com 提供

2.将每张图片转为字符画图片(重点部分) 本文来自小莫扎特博客www.plusminustsuchi.com 提供

3.将若干个字符画图片和音频合并成新的视频(字符视频)

本文来自小莫扎特博客www.plusminustsuchi.com 提供

  • 将原视频分割成若干个图片以及分离出音频

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

这个过程我们可以用python调用ffmpeg工具进行切割,ffmpeg是专门处理音视频的工具库。可以在ffmpeg官网下载可执行文件放在程序的当前目录 本文来自小莫扎特博客www.plusminustsuchi.com 提供

分离音频命令为:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

  本文来自小莫扎特博客www.plusminustsuchi.com 提供

分割视频成若干图片的命令为:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

将分割出来的图片和音频临时存储起来,为了后面若干图片转字符图片效率及速度有所提高,还需将分割后的图片转为缩略图,就是改变图片的尺寸

本文来自小莫扎特博客www.plusminustsuchi.com 提供

这里使用python的PIL图形处理库来进行缩略图转化,同样将缩略图临时存储起来 本文来自小莫扎特博客www.plusminustsuchi.com 提供

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

将每张图片转为字符画图片

如何将一张图片转为字符形式呢?其实很简单,分3步: 本文来自小莫扎特博客www.plusminustsuchi.com 提供

1.将图片转为灰度图 本文来自小莫扎特博客www.plusminustsuchi.com 提供

2.将灰度图的每个像素点替换为相应的字符

本文来自小莫扎特博客www.plusminustsuchi.com 提供

3.将所有替换后的字符画成一张字符图片 本文来自小莫扎特博客www.plusminustsuchi.com 提供

1.将图片转为灰度图

本文来自小莫扎特博客www.plusminustsuchi.com 提供

灰度图,Gray Scale Image 或是Grey Scale Image,又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶

本文来自小莫扎特博客www.plusminustsuchi.com 提供

公式为:Gray = R0.299 + G0.587 + B*

本文来自小莫扎特博客www.plusminustsuchi.com 提供

同样在python中可以用PIL库直接转灰度: 本文来自小莫扎特博客www.plusminustsuchi.com 提供

  本文来自小莫扎特博客www.plusminustsuchi.com 提供

2.将灰度图的每个像素点替换为相应的字符

本文来自小莫扎特博客www.plusminustsuchi.com 提供

这里如何替换呢?可以根据灰阶值来替换为我们自己设定的字符,例如:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

symbols = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~> 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

从上面列表可以看到:越靠前的越密集,越往后越稀疏,于是我们根据灰阶值的大小按比例取列表中的字符,灰阶值越大,取越靠后的字符,这样图片轮廓才能更好的清晰显示

本文来自小莫扎特博客www.plusminustsuchi.com 提供

为了是转化后的字符图片看起来不密集以及提高转化时间,我这里将每间隔1个像素来替换字符,初始还要指定图片的边框及尺寸,这些参数可以自行调整,具体展示如下代码:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

3.将所有替换后的字符画成一张字符图片

本文来自小莫扎特博客www.plusminustsuchi.com 提供

这步只需调用PIL库的save方法,如上面代码最后一行。 本文来自小莫扎特博客www.plusminustsuchi.com 提供

同样,我们将转化后的字符图片临时保存起来。

本文来自小莫扎特博客www.plusminustsuchi.com 提供

至此第2大步完成,即:将一张图片转为字符图片完成

本文来自小莫扎特博客www.plusminustsuchi.com 提供

将若干个字符画图片和音频合并成新的视频(字符视频)

这里也是使用ffmpeg工具进行合成,命令为:

本文来自小莫扎特博客www.plusminustsuchi.com 提供

ffmpeg -threads 2 -start_number 000001 -r 24 -i 路径名/%06d.jpeg -i temp.mp3 -vcodec mpeg4 生成的文件名
 
本文来自小莫扎特博客www.plusminustsuchi.com 提供

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

这一步完成后,字符视频已经生成了。最后还需删除一些临时的文件及文件夹。

本文来自小莫扎特博客www.plusminustsuchi.com 提供

完整代码展示

 

本文来自小莫扎特博客www.plusminustsuchi.com 提供

学会了吗?简单吗?

本文来自小莫扎特博客www.plusminustsuchi.com 提供

内容版权声明:以上内容均为转载,如有侵犯原作者请联系删除!