Python: OpenCVで動画に字幕をつける

ややタイトル詐欺ですが、OpenCVで動画を読み込んで、画像処理ライブラリPillow(PIL)で字幕をつけます。OpenCVのputText()で字幕をつけることもできますが、日本語は文字化けしてしまうようです。

インストール

sudo yum install -y python3
sudo yum install ipa-gothic-fonts 
sudo pip3 install opencv-python
sudo pip3 install pillow

字幕をつける

img.MOVを読み込んでoutput.m4vに字幕をつけて出力します。

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

cap = cv2.VideoCapture('./img.MOV')
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter('output.m4v', fourcc, fps, (width, height))

while True:
    ret, frame = cap.read()
    if ret:
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        pil_image = Image.fromarray(frame_rgb)
        draw = ImageDraw.Draw(pil_image)
        font = ImageFont.truetype('/usr/share/fonts/ipa-gothic/ipag.ttf', 50)
        draw.text((50, 300), '国会議事堂', font=font)
        rgb_image = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
        out.write(rgb_image)
    else:
        break

cap.release()
out.release()

色の表現方法が、OpenCVはBGRであるのに対して、PillowはRGBですので、その変換が必要になっています。
結果は以下の通りです。


コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です