web-dev-qa-db-ja.com

avconvで字幕を焼き付けますか?

Mkvファイルがあり、avconvを使用してDVD互換のmpgファイルに変換したいと思います。同じmkvファイルから1つの字幕ストリームをバーンインするにはどうすればよいですか?

avconv -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 -acodec mp2 -ac 2 -ab 128k output.mpg

4
user4811

テキストベースの字幕

ffmpegには subtitles filter があり、SRTファイルをビデオストリームに書き込むことができます。ただし、--enable-libassでコンパイルされたffmpegが必要です。少なくとも 利用可能なフィルター を見ていると、Libavに似たようなものはないと思います。

まず、字幕を抽出する必要があります。 -map 0:s:0は出力用の最初の字幕ストリームを選択し、-c:s:0はそのコーデックを選択します-それが本当にSRTであることを確認するためです。

ffmpeg -i input.mkv -an -vn -map 0:s:0 -c:s:0 srt subtitles.srt

次に、それらを燃やします。

ffmpeg -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 \
-c:a mp2 -ac 2 -b:a 128k -filter:v subtitles=subtitles.srt output.mpg

注意:

  • 上記のコマンドは、入力のストリーム0:00:1がそれぞれビデオストリームとオーディオストリームであると想定しています。字幕が出力ファイルに含まれないようにするだけの場合は、-snを追加して字幕を完全に無効にすることもできます。

  • 前者はffmpegの存在しないオプションであるため、-ab-b:aに変更する必要があります。


画像ベースの字幕

入力にHDMVPGのような画像ベースの字幕が含まれている場合(MakeMKVがそれらを作成しているようで、他のツールがそれらを抽出できない場合)、オーバーレイフィルターを使用してそれらを書き込むことができます。

ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map [v] -map 0:a \
-target pal-dvd -aspect 16:9 -q:v 1 -c:a mp2 -ac 2 -b:a 128k output.mpg

これも説明されています FFmpeg Wikiで

字幕が元の映画とは異なるサイズで表示される場合(たとえば、ビデオストリームが縮小されたが、字幕が縮小されなかった場合)、 -canvas_sizeオプション を使用して設定してみてください。サイズ。

5
slhck