【小技巧】用Python给你的视频添加字幕

本文建议阅读时间 8 分钟

在日常调试代码时,经常需要在视频中添加一些文字说明。下面将使用 Python 的 OpenCV 和 PIL 库来实现对视频添加文字的功能。

对于视频中添加的文字,字体可以根据个人喜好选择。使用 Windows 系统的用户可以在 C:\Windows\Fonts 目录下找到更多字体,复制到程序所在目录即可使用。

Windows 中的字体

以下是实现代码,语言为 Python,运行次数为 0:

import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np

读取视频

cap = cv2.VideoCapture('video.avi')

定义编解码器并创建 VideoWriter 对象

fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,360)) # 设置输出视频参数

while cap.isOpened(): ret, frame = cap.read() if ret == True:

在 frame 上显示一些信息

    img_PIL = Image.fromarray(frame[..., ::-1])  # 转换为 array
    font = ImageFont.truetype('STZHONGS.TTF', 40)  # 设置字体,Windows系统可以在 "C:\Windows\Fonts" 下查找
    text1 = "机器视觉CV"
    text2 = "目标检测DEMO"

    for i, te in enumerate(text1):
        position = (50, 20+i*50)
        draw = ImageDraw.Draw(img_PIL)
        draw.text(position, te, font=font, fill=(255,0,0))

    for i, te in enumerate(text2):
        position = (520, 10+i*40)
        draw = ImageDraw.Draw(img_PIL)
        draw.text(position, te, font=font, fill=(255,0,0))

    frame = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)

    # 写入帧
    cv2.imshow('frame', frame)
    out.write(frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
else:
    break

释放所有资源

cap.release() out.release() cv2.destroyAllWindows()

实现效果如下:

视频截图