社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python生成抖音字符视频!

编程派 • 6 年前 • 626 次点击  

作者 | 小 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
 
626 次点击