Py学习  »  Python

用Python生成抖音字符视频!

编程派 • 5 年前 • 479 次点击  

作者 | 小 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的值为True或者Flase,frame表示读入的图片
    ret, frame = vc.read()
    if ret:
        # 存储为图像
        cv2.imwrite('img_bear/'+str(c) + '.jpg', frame)
        # 输出图像名称
        print('img_bear/'+str(c) + '.jpg')
        # 在一个给定的时间内(单位ms)等待用户按键触发,1ms
        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(11000):
    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((7070), Image.ANTIALIAS).convert('L'))
        # 创建新的图片对象
        img = Image.new('L', (560560), 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

# 设置视频编码器,这里使用使用MJPG编码器
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 输出视频参数设置,包含视频文件名、编码器、帧率、视频宽高(此处参数需和字符图片大小一致)
videoWriter = cv2.VideoWriter('bear_character.avi' , fourcc, 20.0, (560560))

for i in range(11000):
    filename = 'bear/'+str(i)+'.jpg'
    # 判断图片是否存在
    if os.path.exists(filename):
        img = cv2.imread(filename=filename)
        # 在一个给定的时间内(单位ms)等待用户按键触发,100ms
        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 游戏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29619
 
479 次点击