Python如何实现视频转换为字符画(python,开发技术)

时间:2024-05-06 05:17:47 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

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

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

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

在命令行中输入

>pipinstallffmpeg>ffmpeg-isoup.flv-ss00:02:10-t15seg.mp4-y

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

importimageioimportnumpyasnpimportmatplotlib.pyplotaspltvideo=imageio.get_reader('seg.mp4')imgs=[np.mean(im,2)foriminvideo]plt.imshow(imgs[30])plt.show()

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

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

#将图像宽度缩小至widthfromitertoolsimportproduct#用于循环嵌套defresizeImg(img,w,h=None):m,n=img.shapeifn<w:returnimgifnoth:h=int(m*w/n)im=np.zeros([h,w])rw,rh=n/w,m/h#缩放比例dw,dh=int(rw),int(rh)#取均值的步长fori,jinproduct(range(h),range(w)):I,J=int(i*rh),int(j*rw)im[i,j]=np.mean(img[I:I+dh,J:J+dw])returnim#测试一下im=resizeImg(imgs[30],160)plt.imshow(im)plt.show()

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

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

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

pixels="B8&WMZO0QJX@%&jfoavunxr#t/\|()1{}[]?-_+~<>i!lI;:,\"^`'.^`'."#用于映射的字符defim2txt(img):im=np.floor(img/255*len(pixels)).astype(int)txts=""forlineinim:txts+="".join([pixels[i]foriinline])txts+='\r\n'#像素换行时文本也要换行returntxts#测试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()

结果如下

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

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

frommatplotlibimportanimationfig=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)defanimate(im):text.set_text(im2txt(im))return[text]imgs=[resizeImg(im,160)foriminimgs]ani=animation.FuncAnimation(fig,animate,imgs[:200],interval=10,blit=True)plt.show()

最终得到

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

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Python如何实现视频转换为字符画的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java动态脚本Groovy的特性是什么下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18