FFmpegを使って動画に字幕を焼く

ここではFFmpegを使ってMP4動画にSRT字幕を焼き込む方法を紹介する. "字幕を焼き込む"とは字幕を画として映像の上に載せることを意味している(参考右図). 焼き込むことのメリットは,字幕が映像になっているため,どの機器で再生しても同じ書体の字幕が全く同じ位置に見えることである. 一方のデメリットは字幕をOFFに出来ないことである.

私の環境

  • Mac OS X El Capitan 10.11.2
  • Homebrew 0.9.5
  • FFmpeg 2.8.3
FFmpeg Filters Documentation Subtitles
FFmpegのドキュメンテーションを読むと字幕を焼き込むためにはlibassと呼ばれるフィルタを有効にする必要があるとのこと. 有効にするにはFFmpegのconfigure時に--enable-libassオプションをつける必要があるようで,Homebrewを使ってFFmpegをインストールする場合には--with-libassオプションで良いとのことであった. brew install ffmpeg --with-libass 既にFFmpegをインストール済みの方は"install"を"reinstall"にすると良い. インストールが完了したら,次のコマンドでSRT字幕を焼き込める. ffmpeg -i input.mp4 -vf subtitles=subtitle.srt out.mp4 ASS字幕の場合は次のコマンドになる. ffmpeg -i input.mp4 -vf ass=subtitle.ass out.mp4 なんと簡単なのだろうか! オプションの説明を少し. -iは入力ファイルを指定するためのオプション. -vfにつづいて"subtitles=字幕ファイル名.srt"のように焼き込みたい字幕ファイル名を指定する. 字幕の含まれたMKVファイルも同じように指定することができる. ASS字幕の場合のみ"ass="となる点に注意. 入力/出力動画ファイルフォーマットは勝手に変換してくれるので,入力はMOV,出力はM4Vといった指定もできる. FFmpeg,恐るべし.
ちなみに,フォントやフォントサイズを変更したい場合は次のように指定出来る. ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontName=Helvetica,FontSize=24'" out.mp4 上の例ではフォントをHelveticaに,フォントサイズを24に設定している. エラーが発生したら,上の例のようにsubtitles=...の部分をダブルクオートで囲ってみよう. このような柔軟な設定も可能である.
利用を簡単にするため次のようなスクリプトをつくったので興味のある人は利用していただけると嬉しい. シェルはBashを想定している. burnin.sh | GitHub 使い方は次の通り. 初期設定として,まずは実行権限を与える. chmod +x burnin.sh そして次回以降からは次のように使うことが出来る. burnin.sh input.mp4 subtitle.srt 引数はコマンド名,入力ファイル名,字幕ファイル名の順. 入力ファイルはFFmpegの対応するフォーマットすべてである. 字幕ファイルはSRT,ASS,MKVのどれでも良い. 出力ファイルフォーマットは変数"OUT"で決められるようにつくった. 対応出力フォーマットは同じくFFmpegの対応フォーマットすべてである.
2493138132931749791 https://www.storange.jp/2015/12/ffmpeg.html https://www.storange.jp/2015/12/ffmpeg.html FFmpegを使って動画に字幕を焼く 2015-12-17T21:59:00+09:00 https://www.storange.jp/2015/12/ffmpeg.html Hideyuki Tabata 200 200 72 72