Python の動画加工ライブラリ MoviePy で文字や音声を被せる

pythonvideo

MoviePy は切り取りや結合、エフェクトをかけたりといった動画の加工を行うためのライブラリ。

$ pip install moviepy

VideoFileClip で動画を読み込み、CompositeVideoClipTextClip など別の Clip を重ねる。次の例は 動画の開始 5 秒後から 3 秒間、左から 40%、上から 70% の位置に文字を表示させる。

from moviepy import VideoFileClip, TextClip, CompositeVideoClip, AudioFileClip, CompositeAudioClip

video = VideoFileClip("video.mp4")

txt_clip = TextClip(font="Arial Unicode.ttf", text="テスト", font_size=70, color='white') \
    .with_start(5) \
    .with_duration(3) \
    .with_position((0.4,0.7), relative=True)

final_video = CompositeVideoClip([video, txt_clip])
final_video.write_videofile("result.mp4", codec='libx264', audio_codec='aac')
加工した動画

同様に CompositeAudioClip で音声を被せることができる。次の例は元動画の音量を 20 % にし、開始 5 秒後から音声ファイルの 1~3 秒部分を流す。

audio_clip = AudioFileClip("audio.mp3")
final_audio = CompositeAudioClip([
	video.audio.with_volume_scaled(0.2), audio_clip.with_start(5).subclipped(1, 3)
])
final_video = video.with_audio(final_audio)