【要約】Whisper + Claude API + ffmpeg で動画に日英2段字幕を自動で焼き込む(Windowsのハマりどころ全部載せ) [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
動画制作者が、字幕の文字起こし、英訳、動画への焼き込みという定型作業に、1本あたり数十分もの時間を費やしていた。この手作業を自動化しようとした際、以下の技術的課題に直面した。
- ・Whisperによる固有名詞やキャラクター名の誤認識。
- ・Windowsのsubprocess実行時におけるUnicodeDecodeErrorの発生。
- ・setxで設定した環境変数が、既存のシェルやエディタに反映されない問題。
- ・ffmpegのフィルタ内でパスのコロン(:)が区切り文字として誤認されるエラー。
- ・解像度やフレームレートが異なる動画を結合する際の映像破損。
// Approach
Pythonをオーケストレーターとして、各技術要素をシームレスに繋ぐパイプラインを構築した。具体的には以下のステップで課題を解決している。
- ・Whisperの
--initial_promptに語彙を注入し、後段の辞書置換で誤認識を補正。 - ・Claude API(Haiku)を用い、セグメントを番号付きリストで一括送信して翻訳効率を向上。
- ・ASS形式のスタイル定義を活用し、MarginVの調整で日英字幕の縦位置を分離。
- ・Windowsのレジストリ(HKCU\Environment)を直接参照し、環境変数の反映問題を回避。
- ・ffmpegのパス指定において、バックスラッシュをスラッシュへ、コロンをエスケープする処理を実装。
- ・動画結合前に、scaleやcropフィルタを用いて解像度とフレームレートを正規化。
// Result
動画制作における字幕付与工程を、手作業の数十分からコマンド実行による数分へと劇的に短縮した。特にWindows環境特有の「ハマりどころ」をコードレベルで解決しており、以下の成果を得ている。
- ・環境変数やパス指定に起因する実行エラーの完全な回避。
- ・ASS形式による、視認性の高い日英2段字幕の自動生成。
- ・アスペクト比を維持したまま、異なる規格の動画を安全に結合するワークフローの確立。
Senior Engineer Insight
> 本記事の価値は、ライブラリの抽象化された使い方ではなく、OSやツール間の「境界線」で発生する問題への対処法にある。特にWindowsにおけるffmpegのパスエスケープや、レジストリを直接叩く環境変数取得は、開発環境の差異を吸収する実戦的な知見だ。スケーラビリティの観点では、Claude APIのコスト管理と、Whisperの推論リソースの最適化が次の課題となる。自動化による開発体験(DX)の向上は著しいが、商用利用にはエラーハンドリングの更なる堅牢化が求められる。