字幕つきのmp4やmkvをつくる

滅多にやらないから忘れそうなので、メモっておきます。

TS から字幕を抽出する。

Caption2Ass を使う。 Caption2Ass_mod1 (改造版) でも可。

プログラム バージョン ファイル名
Caption2Ass_mod1 人柱版V0.2.9 up0264.zip
Caption.dll 改造版0.1.1.4 up0064.zip
Caption2Ass 081221 up0877.zip


すべて「 http://2sen.dip.jp/dtv/ 」のアップローダにあります。アップローダは「 Friio 」だったり「 DTV 」だったり他の場所だったりしますが、過去ログ検索を活用すれば問題なっしん。

Caption2Ass の場合

Caption2Ass解凍しこんな感じで実行する。オリジナル版の Caption2Ass を使う場合、 Caption.dll は同梱。

> Caption2Ass1.exe -format srt %インプットのTS%

format オプションは出力ファイルのフォーマットに関するもの。 ass/srt の2つが指定できる。今回は SRT フォーマットを使用することとする。

Caption2Ass_mod1 の場合

Caption2Ass_mod1 を解凍、同じディレクトリに Caption.dll を置く。 Gaiji ディレクトリも同場所に。

> Caption2Ass_mod1.exe -format srt %インプットのTS%

format オプションは ass/srt/taw の3つが指定できる。 taw は TMPEG 用。


ときどき大きく時間情報がずれたものができあがるが、その場合 -forcepcr オプションを付けると幸せになれる。

> Caption2Ass_mod1.exe -format srt -forcepcr %インプットのTS%

CMカット -トリミング- とかしたいとき

その後にCM カット等トリミングを行った場合、カットした分だけ字幕ファイルと時間がずれていく。字幕ファイルは TS からカットしないで吐き出しているのでこの場合当然である。正常に表示させるには同期情報を更新しなくてはならないので、そのためのソフトを使う。

プログラム バージョン ファイル名
SrtSync 0.1.9 up0267.zip
AviSynth でトリミングした場合

AviSynth スクリプトファイル『 avs 』で Trim() でトリミングした場合はこんな感じ。

> SrtSync -utf8 -trim %トリミングしたAVS% %インプットのSRT%


ただし、 Trim の書式は「 Trim 」と1文字目が大文字であること、また複数範囲をつなげる場合は「 ++ 」で接続されている必要がある。以下のような感じ。

Trim(839,5633)++Trim(8780,21366)++Trim(24065,50137)

VirtualDub でトリミングした場合

VirtualDub の処理設定ファイル『 vcf 』でトリミングしている場合。

> SrtSync -utf8 -vcf %トリミングしたAVS% %インプットのSRT%

私はコレを使ってる。
AviUtl を使う場合のやり方もあるが、私自身 AviUtl でカットすることがないので知る気はない。

mux する

mp4 の場合、普通に add するだけ。 字幕ファイル (SRT) は UTF-8 で書かれている必要有。 SrtSync で utf8 オプションを指定していれば UTF-8 で出力されているはずである。

> mp4box -add %SRTファイル% %MP4ファイル%


mkv の場合も普通にくっつけるだけ。 mkvtoolnix 入れて mmg.exe を使えば簡単。 mkv の場合字幕ファイルの文字コードは任意だけど、マージするときに文字コードを指定してあげないと化けてしまうことに注意。

再生する

MPC-HC で再生する場合

  • Haali Splitter なら、右クリ→フィルタ→(ファイル名)→字幕トラック あたりを有効に
  • MPC-HC 内蔵フィルタなら、右クリ→字幕 あたりを有効に


VLC で再生する場合

  • ツール→設定→字幕とOSD
  • あとは ビデオ→字幕トラック あたりを有効に


もっと難しいのかなぁと思ったけど、やってみると案外簡単。作成自体は外字の文字化けと若干の時間のズレに気をつければほぼ問題なくできる。それよりも問題なのは再生環境の方。特に mp4 の場合、うまく字幕を表示させるのは結構大変。ほとんどおまけ程度の認識でいた方がいいかもしれない。