二ヶ国語放送・字幕放送エンコ備忘録


地上デジタル放送やBS放送では、二ヶ国語放送(日本語・英語)や字幕放送(字幕スーパー)が付加された放送が数多くあります。
PX-W3PEなどで録画した動画はMPEG-TS形式の動画ファイルとして保存されますが、PC向けの動画再生ソフトの多くではこの動画ファイル内に保存されている第二言語の音声や、字幕を抽出することは出来ません。
今回、この第二言語音声と字幕を抽出し、1つのH.264/AVC形式のMP4動画に変換する方法について備忘録的にまとめます。

最低限用意するソフトウェア



動画の編集は基本的にAviUtlで行います。
L-SMASH Worksを導入することによって、AviUtlに直接MPEG-TS形式の動画を読み込むことが出来ます。
しかし、バイリンガル放送の場合動画を正しく読み込むことが出来ない場合が多々あります。
また、第二言語音声を抽出できないといった問題も起きるため、映像と音声をBonTsDemuxを用いて分離します。

 BonTsDemuxを起動し、画面内にTSファイルをドラッグアンドドロップします。
「バッチリスト」にファイルが追加されますので、クリックして選択します。
エンコード方式を「Demux(m2v+wav)」に設定します。
※FakeAacWavを利用できる場合はm2v+aacでも構いません。L-SMASH Worksを通す場合はaacにしても意味がありません。
音声ESは「0」に設定します。0の場合は第一言語(大抵は日本語)に設定されます。
最後に「置換」ボタンを押します。一番上の「追加」ではありません。

再度リストからファイルをクリックして選択します。
「ビデオ出力ファイル」の欄を選択し、ファイル名を少し変えます。
これを忘れると、先にセットした日本語音声に、英語音声が上書きされてしまいます。
今度はエンコード方式を「Demux(wav)」に設定します。
音声ESを「1」に設定します。
最後に「追加」ボタンを押します。リストに新しく追加されます。

この状態で「変換開始」をクリックし、変換が終了するのを待ちます。
Demuxが終了すると

  • M2V形式の動画ファイル
  • WAV形式の日本語音声ファイル
  • WAV形式の英語音声ファイル

の3種類のファイルが出力されます。

M2VファイルをAviUtlで開くと、音声ファイルは読み込まれません。
「ファイル」→「音声読み込み」から、日本語音声ファイルを選択します。

その後、AviUtlでCMカットやフィルタ掛けなどを行います。
なお、CMカットをした場合は後で字幕データを抽出する際に、どの位置でカットしたかを記録する必要があります。

「ファイル」→「エクスポート」→「削除リスト」を選び、保存ダイアログで適当な名前で削除リストを保存します。
これによって、AviUtlでカットした部分を記録することが出来ます。
このファイルは後に使用するので分かりやすい場所に保存してください。

 その後、動画をMP4形式にエンコードします。
ここでエンコードされたファイルに、第二言語音声や字幕データを追加していく形になるので、動画データに関してはこの時点で完成している必要があります。

第二言語音声で同じくCMカットされた状態の動画を作成します。
簡単な作り方としては、先ほど日本語音声ファイルを用いて作成したCMカット後の編集データをAUP形式で保存しておきます。
その後、日本語音声ファイルと英語音声ファイルのファイル名を入れ替えます。
その状態で再度プロジェクトファイルを開くことによって英語音声ファイルのCMカット済み状態が出来上がります。
なお、日本語と英語で再生位置にズレが生じることがあり、「音声位置の調整」フィルタなどで適宜調整する必要がある場合もあります。

第二言語音声を読み込んだ状態の動画は、拡張x264出力のオプション内にある「音声のみ出力」を選択してm4a形式にて出力してください。


次に、Caption2AssCを使用します。
Caption2AssCはgithubの右上の「Clone or Download」を押し、「Download ZIP」からダウンロードして下さい。
ZIPを展開すると、「bin」フォルダが有り、その中にCaption2AssCがあります。
64bitOSを使用している場合はCaption2AssC_x64を使用すると若干高速化されます。

Caption2AssCの使い方はReadmeに記載されてもいますが、
Caption2AssC -format srt "TSファイル" "出力ファイル名"
をコマンドプロンプトで実行することによって、TSファイル内の字幕データがSRT形式で出力されます。

Caption2AssCにてSRTファイルを出力したら、次にSrtSyncを用いてAviUtlでカットした部分に合わせてSRTデータを編集します。
SrtSyncもコマンドプロンプト上で実行します。
SrtSync -delay -500 -utf8 -aviutldl "削除リスト出力テキスト" "編集元SRTファイル"
を実行することで、SRTファイルが削除リストに合わせてカットされます。
-500msのディレイを入れているのは、後述のMP4boxでの追加時に動画から500msec遅れてしまうことを防ぐためです。

最後に、MP4boxを用いてMP4動画、英語m4a音声、SRT字幕ファイルを結合します。
MP4boxもこれまたコマンドプロンプトで実行します。
MP4box -add "m4a音声ファイル":lang=eng -add "SRT字幕ファイル":lang=jpn  "MP4動画"
を実行することで、MP4動画に音声、字幕ファイルが追加されます。

 出力された動画は、1つのVideo、2つのAudio、2つのSubtitleの構成になっています。
Audioは日本語と英語が、Subtitleは字幕の有りと無しになっています。

このような動画ファイルは、MPC-HCなどの字幕対応プレイヤーでも字幕や音声の切り替えができます。

バッチファイルを組むことによって、エンコード後の作業は全て自動化も可能なので、やる気さえ持続すれば映画などのエンコではこれを活用していきたいところです。

コメント