「手動動画編集」という名の苦行
TikTokやReels、YouTube Shorts向けのコンテンツを作成しているなら、同じ作業を延々と繰り返すためにマウスをクリックし続ける辛さをよく知っているはずです。50個のクリップにロゴを入れ、冒頭3秒をカットし、BGMを追加するのは、まさに苦行です。1〜2本の動画ならCapCutが最適ですが、決まったフォーマットで毎日100本の動画にスケールアップするには?コードが必要です。
手動編集の問題は時間の浪費だけではありません。一貫性の欠如も問題です。少し注意が逸れるだけで、ロゴが5pxずれたり、アウトロが1秒短くなったりします. MoviePyはこの問題を解決するために登場しました。Pythonを通じて編集プロセス全体をプログラム化できます。
クイックスタート:数行のコードで動画カットとロゴ挿入
まずは、シンプルなコマンドでライブラリをインストールしましょう。
pip install moviepy
実際のシナリオを試してみましょう:動画の最初の10秒を切り出し、右上にブランドロゴを配置する必要があります。Premiereを開く代わりに、このスクリプトを実行してください。
from moviepy.editor import VideoFileClip, ImageClip, CompositeVideoClip
# 1. 元の動画を読み込み、最初の10秒をカット
video = VideoFileClip("input_video.mp4").subclip(0, 10)
# 2. ロゴを作成(logo.pngが用意されていると想定)
logo = (ImageClip("logo.png")
.set_duration(video.duration)
.resize(height=50)
.margin(right=20, top=20, opacity=0)
.set_pos(("right", "top")))
# 3. 動画の上にロゴレイヤーを重ねる
final_video = CompositeVideoClip([video, logo])
# 4. 24fpsでファイルを書き出し
final_video.write_videofile("output_final.mp4", fps=24)
動作の仕組み:「クリップ」と「レイヤー」について理解する
MoviePyでは、動画内のすべての要素をクリップ (Clips)として扱います。これはPhotoshopのレイヤーやCapCutのトラックのようなものだと考えてください。
- VideoFileClip: 読み込んだ生の動画素材です。
- CompositeVideoClip: クリップを重ねるためのコンテナです。リストの後ろにあるクリップほど、手前に表示されます。
- 座標系: 原点 (0,0) は左上にあります。これは、ロゴやテキストの位置をピクセル単位で正確に計算するための重要なポイントです。
注意: テキストの挿入 (TextClip) には、システムに ImageMagick がインストールされている必要があります。これがないと、MoviePyはフォントを描画できないため、すぐにエラーが発生します。
SRTファイルからの字幕自動化
最近のプロジェクトで、長いポッドキャストシリーズの字幕を作成する必要がありました。一文字ずつ手入力する代わりに、OpenAI Whisperを使用して先に .srt ファイルを作成しました。その後、MoviePyを使ってその字幕を動画に一瞬で「焼き付け(Burn-in)」ました。
from moviepy.editor import TextClip, VideoFileClip, CompositeVideoClip
from moviepy.video.tools.subtitles import SubtitlesClip
# 字幕のスタイルを定義
def generator(txt):
return TextClip(txt, font='Arial', fontsize=24, color='white',
bg_color='black', method='caption', size=(video.w*0.8, None))
video = VideoFileClip("input.mp4")
subtitles = SubtitlesClip("subtitles.srt", generator)
# 字幕を中央下部に配置
result = CompositeVideoClip([video, subtitles.set_pos(('center', 'bottom'))])
result.write_videofile("output_subtitled.mp4")
実践経験:プロジェクトが2000行を超えたとき
システムが肥大化するにつれ、「動くコード」と「安定して動くコード」は別物であることに気づきました。以下は、何度もフリーズを経験して学んだ3つの教訓です。
1. RAMを「炎上」させない
MoviePyは非常にメモリを消費します。for ループで一括処理を行う場合は、各ループの最後に必ず video.close() を呼び出す必要があります。そうしないと、4K動画を10本ほど処理しただけで16GB hostのRAMが使い果たされ、スクリプトが即座にクラッシュします。
2. FFmpegの力を活用する
MoviePyは実際には FFmpeg のラッパー(Wrapper)です。同じ形式の2つのクリップを結合するような単純なタスクでは、subprocess を介して直接 FFmpeg コマンドを使用する方が、MoviePyでレンダリングし直すよりも5〜10倍速くなります。
3. プロフェッショナルなディレクトリ構造
入力ファイルと出力ファイルを混ぜないようにしましょう。/assets(ロゴ、音楽)、/input(未加工動画)、/output(完成品)のように分離します。フォントサイズや色などのパラメータは config.py ファイルにまとめ、後のプロジェクトで簡単に変更できるようにしておくべきです。
音ズレ(Audio out of sync)の対処法
最もストレスが溜まるのは、音が映像より先に流れてしまうエラーです。原因は通常、元の動画が可変フレームレート (VFR) であることです。これを根本的に解決するために、処理前に FFmpeg を使用して固定フレームレート (CFR) 30fps に強制変換することがよくあります。
ffmpeg -i input.mp4 -filter:v fps=fps=30 output_cfr.mp4
自動化システムの構築は、ロジック面では難しくありません。難しいのは、PCのリソースを過度に消費せずに、綺麗で軽量な動画を出力できるように微調整することです。この共有が、毎日の動画編集時間を数時間短縮する助けになれば幸いです。
どのコードの部分で困っていますか?下のコメント欄で教えてください。サポートさせていただきます!

