ややタイトル詐欺ですが、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ですので、その変換が必要になっています。
結果は以下の通りです。
Python関連の記事を更新しました。
【Python: OpenCVで動画に字幕をつける】https://t.co/OKF5eQWytP pic.twitter.com/Yyk0t0bwFu— oliverSI/Python芸人 (@oliverSI7) January 18, 2019