2013年3月20日水曜日

ffmpegで字幕ファイルを焼き込む方法

MacでX11を導入せずにffmpegを用いて外部字幕ファイルを動画に焼き付ける方法を説明したい。

このブログエントリは、FFmpegで動画に字幕を付けてみるおよびMac の X11 環境のユーザーフォントについて調べてみる、そしてASS 仕組みと書き方を参考に作成したものである。

Mac OS X 10.8.x Mountain LionからX11はオプショナルインストールになった。ffmpegもMac OS X用バイナリが配布されている。本来X11に依存する訳ではないのに字幕焼き付けのためだけにX11を導入するのは無駄である。以下に説明する手順を踏めばX11を導入することなく字幕焼き付けが可能である。

  1. fonts.confファイルの作成
    適当なディレクトリ(例:/Users/アカウント名/.config/fontconfig/)に、下記内容のfonts.confファイルを作成する。
    実行コマンド例

    cd /Users/Accout_Name/
    mkdir .config
    cd .config
    mkdir fontconfig
    cd fontconfig
    nano fonts.conf
    

    記述内容

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
      <dir>/System/Library/Fonts</dir>
      <dir>/Library/Fonts</dir>
      <dir>~/Library/Fonts</dir>
    </fontconfig>
    

    もし新しくフォントを追加した場合はセーフブート(shiftキーを押しながら起動)&再起動でフォントキャッシュをクリア&再構築する。

  2. 「.profile」ファイル作成(すでにある場合は、記述を追加)
    実行コマンド例

    cd /Users/Accout_Name/
    nano .profile
    

    記述内容

    export FONTCONFIG_PATH=/Users/Accout_Name/.config/fontconfig
    

    作成したら、プロファイルを反映させるためにターミナルを一度閉じて新しいウインドウを開く。

  3. 字幕ファイルがSRTフォーマット(拡張子がsrt)の場合、ASSフォーマット(拡張子がass)に変換する。(オプション)

    ffmpeg -i subtitle.srt subtitle.ass
    
  4. ASSファイルを適当なテキストエディタで開き「ScriptType: v4.00+」以降に次の記述を追加する。(すでに記述がある場合は不要)

    PlayResX: 384
    PlayResY: 288
    

    記述例

    [Script Info]
    ScriptType: v4.00+
    :
    :
    PlayResX: 384
    PlayResY: 288
    
  5. ffmpegを用いて字幕を動画に焼き付ける。

    ffmpeg -i Movie.mp4 -preset slow -crf 18 -filter:v "ass=Subtitle.ass" -c:a copy -f mp4 Movie_with_Subtitle.mp4
    

2014.9.2 追記:

  1. 元にするSRTファイルの文字コードはUTF-8にする必要がある。
  2. -filter:v "ass=Subtitle.ass"に記述するASSファイルは、カレントディレクトリにあるか、絶対パスで記述する必要がある。(例えばDesktop上にファイルがあれば、Terminal.appもDesktopにするか、/Users/ユーザー名/Desktop/Subtitle.assにする。~/Desktop/Subtitle.assではエラーになる)

0 件のコメント :

コメントを投稿