作者 | 小 F
来源 | 法纳斯特
抖音字符视频在去年火过一段时间。
反正我是始终忘不了那段极乐净土的音乐...
这一次自己也来实现一波,做一个字符视频出来。
主要用到的库有cv2,pillow库。
原视频如下,直接抖音下载的,妥妥的水印。
不过并不影响本次的操作。
/ 01 / 视频转图片
在Pycharm上直接安装cv2库是成功不了的,具体什么原因我也不清楚。
经过我的实践,发现只需在Pycharm的虚拟环境下。
运行下面这个命令,即可成功安装cv2这个库。
pip3 install opencv-python
不过还是会出现下载速度过慢,导致超时。
如果实在不行就可以去官网,下个.whl格式来安装。
视频转图片代码如下。
import cv2
import os
folder_path = "img_bear/"
os.makedirs(folder_path)
vc = cv2.VideoCapture('bear.mp4')
c = 0
ret = vc.isOpened()
while ret:
c = c + 1
ret, frame = vc.read()
if ret:
cv2.imwrite('img_bear/'+str(c) + '.jpg', frame)
print('img_bear/'+str(c) + '.jpg')
cv2.waitKey(1)
else:
break
vc.release()
最后成功生成了369张图片。
呆萌呆萌的××熊,我是不知道什么品种的熊...
/ 02 / 图片转字符
普通图片转字符图片主要使用了pillow库。
对图片做灰度处理,然后根据图片像素点的灰度值,添加对应的字符。
具体代码如下。
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
folder_path = "bear/"
os.makedirs(folder_path)
for i in range(1, 1000):
filename = 'img_bear/' + str(i) + '.jpg'
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~ <>i!lI;:,\"^`'. ")
if os.path.exists(filename):
img_array = np.array(Image.open(filename).resize((70, 70), Image.ANTIALIAS).convert('L'))
img = Image.new('L', (560, 560), 255)
draw_object = ImageDraw.Draw(img)
font = ImageFont.truetype('consola.ttf', 10, encoding='unic')
for j in range(70):
for k in range(70):
x, y = k * 8, j * 8
index = int(img_array[j][k] / 4)
draw_object.text((x, y), ascii_char[index], font=font, fill=0)
name = 'bear/' + str(i) + '.jpg'
print(name)
img.save(name, 'JPEG')
最后成功生成了字符图片。
和上面的原图一样,也是369张。
/ 03 / 字符转视频
接下来使用cv2库,将字符图片转化为视频。
具体代码如下。
import cv2
import os
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
videoWriter = cv2.VideoWriter('bear_character.avi'
, fourcc, 20.0, (560, 560))
for i in range(1, 1000):
filename = 'bear/'+str(i)+'.jpg'
if os.path.exists(filename):
img = cv2.imread(filename=filename)
cv2.waitKey(100)
videoWriter.write(img)
print(str(i) + '.jpg' + ' done!')
videoWriter.release()
最后成功生成字符视频。
这里懒得去添加原来的BGM,所以凑合着看吧。
据说眯眼看,效果更佳。
/ 04 / 总结
相关的视频以及代码已上传公众号。
公众号回复「字符」即可获取。
本文经作者授权发布,如需转载请联系原作者。
回复下方「关键词」,获取优质资源
回复关键词「 pybook03」,可立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「pybooks02」,可立即获取 O'Reilly 出版社推出的免费 Python 相关电子书合集
回复关键词「书单02」,可立即获取主页君整理的 10 本 Python 入门书的电子版
印度小伙写了套深度学习教程,Github上星标已经5000+
上百个数据文件合并,只能手动复制粘贴?教你一招十秒搞定!
一个提升图像识别准确率的精妙技巧
一文读懂:从 Python 打包到 CLI 工具
如何使用 Python 进行时间序列预测?
美亚Kindle排名第一的Python 3入门书,火遍了整个编程圈
十分钟搭建私有 Jupyter Notebook 服务器
使用 Python 制作属于自己的 PDF 电子书
12步轻松搞定Python装饰器
200 行代码实现 2048 游戏