上次写了个华强买瓜字符视频的帖子,下面有人问如何保存,所以这次就写一个能将字符画视频保存下来的帖子,然而时不待我,华强纪元已经结束,现在是穿山甲的时代了。

首先读取视频,并转为字符。视频是从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 imageio
import numpy as np
import matplotlib.pyplot as plt
video = imageio.get_reader('seg.mp4')
imgs = [np.mean(im,2) for im in video]
plt.imshow(imgs[30])
plt.show()

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

#将图像宽度缩小至width
from itertools import product   #用于循环嵌套
def resizeImg(img,w,h=None):m,n = img.shapeif n<w:return imgif not h:h = int(m*w/n)im = np.zeros([h,w])rw,rh = n/w,m/h         #缩放比例dw,dh = int(rw),int(rh) #取均值的步长for i,j in product(range(h),range(w)):I,J = int(i*rh),int(j*rw)im[i,j] = np.mean(img[I:I+dh,J:J+dw])return im
# 测试一下im = resizeImg(imgs[30],160)
plt.imshow(im)
plt.show()

接下来生成字符画,在此使用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 animation
fig = 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绘制穿山甲字符画视频:这喝汤多是一件美逝相关推荐

  1. 利用python做个字符画视频

    废话少说,先上成果 https://www.bilibili.com/video/BV1cC4y1p7Tz 某一帧 python字符画视频 视频分割 图片字符化 合成视频 视频分割 可以利用ffmpe ...

  2. python制作字符画视频来啦~

    字符画是什么? 字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感. 如果我们想要手工绘制出字符画,首先要有 ...

  3. 绘制Excel字符画

    作者:小小明 今天分享一个好玩的炫技技巧:绘制Excel字符画 比如我们有这样一张图片: 想把它画到excel上: 该如何实现呢? python几分钟内轻松实现!看看代码吧: from openpyx ...

  4. python图片转字符画

    学习了下python图片转字符画,学习连接:Python 图片转字符画,觉得还挺有趣,不过图片的颜色和细节不能太多,不然效果比较差,代码如下: from PIL import Image import ...

  5. python 图片转字符画

    python 图片转字符画 项目介绍 本实验用 50 行 Python 代码完成图片转字符画小工具.通过本实验将学习到 Linux 命令行操作,Python 基础,pillow 库的使用,argpar ...

  6. python生成字符画_使用Python生成ASCII字符画

    使用Python生成ASCII字符画 在很多的网站主页中或者程序的注释中会有一些好看的字符注释画.显得很牛逼的样子 例如: 知乎 _____ _____ _____ _____ /\ \ /\ \ / ...

  7. python克里金生成asc_使用Python生成ASCII字符画

    使用Python生成ASCII字符画 在很多的网站主页中或者程序的注释中会有一些好看的字符注释画.显得很牛逼的样子 例如: 知乎 _____ _____ _____ _____ /\ \ /\ \ / ...

  8. python图像转字符画_Python实现图片转字符画的代码实例

    如何利用Python实现图片转字符画详解 如何用python将图片转为字符画给小编你的心作纪念,小编的梦有你的祝福才能够完全,风浪再大,小编也会勇往直前,小编们的爱,镶在青春的纪念册. # codin ...

  9. 网页版 Python 图片转字符画

    原文:https://lwebapp.com/zh/post/python-image-to-ascii 需求 最近发现一个好玩的 Python 玩法,用 Python 将图片转为字符画,大多数都是本 ...

最新文章

  1. Androidx CoordinatorLayout 和 AppBarLayout 实现折叠效果(通俗的说是粘性头效果)
  2. [WCF编程]1.WCF入门示例
  3. 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
  4. python爬虫登录网站_python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!...
  5. android崩溃拦截给出提示显示日志
  6. java代码操作注册表,java操作注册表范例代码
  7. Win2008使用WEB方式更改工作组计算机用户帐户密码
  8. MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
  9. pc机收集信息cpu\配置\网络信息
  10. 不加群提取群成员_QQ群引流推广怎么做
  11. Linux常用命令 shell脚本for QA-数据脱敏版2
  12. python interpreter是什么_如何写一个Python Interpreter | 学步园
  13. 理解Linux的平均负载和性能监控
  14. Ubuntu清空回收站提示权限不够的解决办法
  15. 班导师见面会会议记录
  16. Kafka 开启 ACLs 权限控制
  17. uniapp离线打包SDK
  18. x265 1.8版本更新
  19. 宁波诺丁汉大学计算机学院官网,宁波诺丁汉大学电子通讯及计算机工程(含实习)硕士课程...
  20. Java XML教程

热门文章

  1. 嵌入式UWB定位测距设备开发实战(4)硬件之元器件选型
  2. c语言1ms延时程序,请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?...
  3. 飞书和钉钉之间,差了几个企业微信?
  4. 微信小程序阅读器功能
  5. java程序笑脸怎么打_我编写的JAVA程序为什么在编译执行后会先打出一个笑脸呢?...
  6. 2022-清华管理学-清华大学-宁向东
  7. ruby读dbf文件
  8. 物料主数据的维护状态
  9. 【图像修复】基于滤波实现损坏图像修复含Matlab源码
  10. python getch_macOS 下的 getch()