from PIL import Image, ImageDraw, ImageFont
import cv2
import numpy as np
# 文字列と設定
text = "これは右から左に流れる字幕のサンプルです。"
font_path = "/path/to/your/font.ttf" # フォントファイルのパス
font_size = 50
font = ImageFont.truetype(font_path, font_size)
text_width, text_height = font.getsize(text)
# 映像の設定
video_width = 640
video_height = 100
fps = 30
duration = 5 # 秒
total_frames = fps * duration
# 映像の保存先
output_path = 'output_video.mp4'
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (video_width, video_height))
# 初期のx座標
x_position = video_width
for i in range(total_frames):
# 画像を作成
img = Image.new('RGB', (video_width, video_height), color = (0, 0, 0))
d = ImageDraw.Draw(img)
# 文字を描画
d.text((x_position, (video_height - text_height) // 2), text, font=font, fill=(255, 255, 255))
# Pillow画像をOpenCV形式に変換
cv_img = np.array(img)
cv_img = cv2.cvtColor(cv_img, cv2.COLOR_RGB2BGR)
# 映像にフレームを追加
out.write(cv_img)
# 文字のx座標を左に移動
x_position -= 5
# テキストが完全に画面外に出たらループを終了
if x_position + text_width < 0:
break
# 映像を終了し、ファイルに保存
out.release()
cv2.destroyAllWindows()