千家信息网

Python如何实现视频转换为字符画

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章给大家分享的是有关Python如何实现视频转换为字符画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先读取视频,并转为字符。视频是从B站下载的,地址《激战江南》穿
千家信息网最后更新 2025年01月16日Python如何实现视频转换为字符画

这篇文章给大家分享的是有关Python如何实现视频转换为字符画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

首先读取视频,并转为字符。视频是从B站下载的,地址《激战江南》穿山甲名场面。

由于B站直接下载的视频为flv格式,而imageio并不支持,尽管可以用opencv来读取,但相比之下,用ffmepg转个码也不复杂,这样可以最大限度地利用华强买瓜的代码。

另外,视频素材过长不适合代码演示,所以从第2:10进行截取15s。

在命令行中输入

>pip install ffmpeg>ffmpeg  -i soup.flv -ss 00:02:10 -t 15 seg.mp4 -y

很快就得到了seg.mp4,接下来就是读取视频并转为字符,有关这部分代码的解析,可出门左转华强买瓜。

import imageioimport numpy as npimport matplotlib.pyplot as pltvideo = imageio.get_reader('seg.mp4')imgs = [np.mean(im,2) for im in video]plt.imshow(imgs[30])plt.show()

这个视频对于字符画而言太大了,所以转字符画之前需对其压缩。这里采取最简单的方法--即对相邻的像素取平均值。

#将图像宽度缩小至widthfrom itertools import product   #用于循环嵌套def resizeImg(img,w,h=None):    m,n = img.shape    if n

接下来生成字符画,在此使用matplotlib中的text来进行绘制,出于观感考虑,取消了坐标轴。考虑到字符画需要宽度一致,故启用本地字体。

关于绘图字体,可参考python画图时调用本地字体

pixels = "B8&WMZO0QJX@%&jfoavunxr#t/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ^`'. " #用于映射的字符def im2txt(img):    im = np.floor(img/255*len(pixels)).astype(int)    txts = ""    for line in im:        txts += "".join([pixels[i] for i in line])        txts += '\r\n'    #像素换行时文本也要换行    return txts#测试txt = im2txt(im)plt.figure(figsize=(8,4.5))plt.rcParams['font.sans-serif'] = 'SIMSUN'  #SIMSUN为宋体plt.axis([0,10,0,10])_ = plt.text(5, 5, txt, fontsize=6, linespacing=0.6,ha='center', va='center',wrap=True)plt.gca().set_axis_off()plt.show()

结果如下

接下来就是动起来,对于老粉来说这个显然很简单,属于PythonArt这个系列的传统艺能了。。。

from matplotlib import animationfig = plt.figure(figsize=(8,4.5))plt.rcParams['font.sans-serif'] = 'SIMSUN'ax = fig.add_subplot(xlim=(0,10),ylim=(0,10))ax.set_axis_off()text = ax.text(5, 5, txt, fontsize=6, linespacing=0.6,  ha='center', va='center',wrap=True)def animate(im):    text.set_text(im2txt(im))    return [text]imgs = [resizeImg(im,160) for im in imgs]ani = animation.FuncAnimation(fig, animate, imgs[:200], interval=10, blit=True)plt.show()

最终得到

感谢各位的阅读!关于"Python如何实现视频转换为字符画"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0