すべての字幕をそのまま維持しながらスペースを節約するために、ffmpegを使用してMatroskaファイルのビデオストリームを再エンコードしようとしています。正確なストリーム番号を指定せずに機能する一般的なコマンドを作成したいと思います。 ffmpegで基本ビデオストリームと基本オーディオストリームを選択してから、すべての字幕を選択する方法がわかりません。
現在使用中の入力ファイルにはこれらのストリームがありますが、他のファイルには異なるストリームがあります。
[lavf] stream 0: video (mpeg2video), -vid 0
[lavf] stream 1: audio (ac3), -aid 0, -alang eng, Surround 5.1
[lavf] stream 2: audio (ac3), -aid 1, -alang fre, Surround 5.1
[lavf] stream 3: audio (ac3), -aid 2, -alang ita, Surround 5.1
[lavf] stream 4: audio (ac3), -aid 3, -alang spa, Surround 5.1
[lavf] stream 5: audio (ac3), -aid 4, -alang eng, Stereo
[lavf] stream 6: subtitle (dvdsub), -sid 0, -slang eng
[lavf] stream 7: subtitle (dvdsub), -sid 1, -slang fre
[lavf] stream 8: subtitle (dvdsub), -sid 2, -slang ita
[lavf] stream 9: subtitle (dvdsub), -sid 3, -slang spa
[lavf] stream 10: subtitle (dvdsub), -sid 4, -slang ara
[lavf] stream 11: subtitle (dvdsub), -sid 5, -slang dan
[lavf] stream 12: subtitle (dvdsub), -sid 6, -slang dut
[lavf] stream 13: subtitle (dvdsub), -sid 7, -slang fin
[lavf] stream 14: subtitle (dvdsub), -sid 8, -slang ice
[lavf] stream 15: subtitle (dvdsub), -sid 9, -slang nor
[lavf] stream 16: subtitle (dvdsub), -sid 10, -slang por
[lavf] stream 17: subtitle (dvdsub), -sid 11, -slang swe
[lavf] stream 18: subtitle (dvdsub), -sid 12, -slang fre
[lavf] stream 19: subtitle (dvdsub), -sid 13, -slang ita
[lavf] stream 20: subtitle (dvdsub), -sid 14, -slang spa
私が試したコマンド:
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska OUT.mkv
結果:ビデオストリーム1つ、オーディオストリーム1つ、字幕ストリーミングなし。
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska -c:s copy OUT.mkv
結果:ビデオストリーム1つ、オーディオストリーム1つ、字幕ストリーム。
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska -map 0 OUT.mkv
結果:すべての動画、すべてのオーディオ、すべての字幕。
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska -c:s copy -map 0:s OUT.mkv
結果:映像なし、音声なし、すべての字幕。
マニュアルが示すように、-c:s copy
基本ストリームだけでなくすべてのストリームをコピーする必要がありますが、そうではありません。たぶんこれはバグですか?
明確にするために私が追求した結果は次のとおりです。イプアイデア、一つオーディオとみんなサブタイトル。
ベストアンサー1
これストリームの選択 デフォルトの動作は、各ストリームタイプに対して1つのストリームのみを選択します。したがって、複数のオーディオストリームを持つ入力は、1つのオーディオストリームで出力を生成します。この動作を無効にして目的のストリームを手動で選択するには、次のようにします。-map
オプション。
この例-c copy
はストリームのコピー(再多重化)入力から出力へ。録音は発生しません。
ストリーム すべてのストリームをコピー
ffmpeg -i input -map 0 -c copy output
最初のビデオストリーム、2番目のオーディオストリーム、すべての字幕
ffmpeg -i input -map 0:v:0 -map 0:a:1 -map 0:s -c copy output
3番目のビデオストリーム、すべてのオーディオストリーム、字幕なし
この例では負のマッピング字幕を除外します。
ffmpeg -i input -map 0:v:2 -map 0:a -map -0:s -c copy output
複数の入力からストリームを選択
すべてのビデオは入力0から出て、すべてのオーディオは入力1から出ます。
ffmpeg -i input0 -i input1 -map 0:v -map 1:a -c copy output