Python生成抖音字符视频,技术流!

作者: 一墨编程学习 | 来源:发表于2019-04-28 17:48 被阅读8次

    抖音字符视频在去年火过一段时间。

    反正我是始终忘不了那段极乐净土的音乐...

    这一次自己也来实现一波,做一个字符视频出来。

    主要用到的库有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(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
    
    # 设置视频编码器,这里使用使用MJPG编码器
    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)
            # 在一个给定的时间内(单位ms)等待用户按键触发,100ms
            cv2.waitKey(100)
            # 将图片写入视频中
            videoWriter.write(img)
            print(str(i) + '.jpg' + ' done!')
    # 视频释放
    videoWriter.release()
    
    

    最后成功生成字符视频,这里放个图

    如果你依然在编程的世界里迷茫,不知道自己的未来规划,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验!
    自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、人工智能、数据挖掘等,零基础到项目实战的资料都有整理。
    送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,这里是python学习者聚集地

    点击:python技术分享

    相关文章

      网友评论

        本文标题:Python生成抖音字符视频,技术流!

        本文链接:https://www.haomeiwen.com/subject/tfmlnqtx.html