FFmpeg で最初の英語の字幕チャンネルを除くすべての字幕チャンネルを削除するにはどうすればいいですか?

FFmpeg で最初の英語の字幕チャンネルを除くすべての字幕チャンネルを削除するにはどうすればいいですか?

私は FFmpeg にあまり精通しておらず、自分で何度も試してみましたが、構文を理解することすらできませんでした。そこで、自分よりもずっと賢い人たちに質問しようと思います。FFmpeg を使用して、英語以外のオプションをすべて削除し、その後削除したいと思います。

その後、最初のインデックス以外のすべての英語オプションを削除します。何を試しても解決できず、約 3 時間頭を悩ませましたが、最終的に次の方法を試しました。

ffmpeg -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:s -map 0:m:language:eng -map:0:a:1? -codec copy "copy Episode 01 - Yaha-kui zaShunina.mkv"

これは私が正しい構文を理解できた唯一のものですが、それでもうまくいきませんでした。私より賢い人は助けてくれますか? また、すべてのビデオを保存し、それらが焼き付けではなくソフト サブであることを確認したいと思います。

答え1

構文は次のとおりです-map 0:s:m:language:eng

ffmpeg -y -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:a? -map 0:s:m:language:eng -codec copy "copy Episode 01 - Yaha-kui zaShunina.mkv"

問題は、すべての英語の字幕(最初のストリームだけでなく)をマッピングしていることです。次のコマンドを使用して、最初の英語の字幕ストリームのみを保持するために、FFmpeg をもう一度実行することができます-map 0:s:0

ffmpeg -y -i "Episode 01 - Yaha-kui zaShunina.mkv" -map 0:v -map 0:a? -map 0:s:0 -codec copy "copy copy Episode 01 - Yaha-kui zaShunina.mkv"

(最初の英語ストリームのみを 1 つのコマンドで保持できるかどうかはわかりません)。


次の役職は、英語のオーディオ ストリームをマッピングする場合の構文が であることを示しています-map 0:a:m:language:eng
0:aはオーディオ ストリームを参照します。字幕ストリームを参照する場合は
、これを に置き換えることができます0:s


テスト:

複数のビデオ、オーディオ、字幕のストリームを含む合成ビデオ ファイルを作成します (テスト用):

ffmpeg -y -f lavfi -i testsrc=size=384x206:rate=1 -f lavfi -i sine=frequency=300 -f lavfi -i sine=frequency=400 -f lavfi -i sine=frequency=500 -i in.srt -i in.srt -i in.srt -i in.srt -i in.srt -map:v 0 -map:a 1 -map:a 2 -map:a 3 -map:s 4 -map:s 5 -map:s 6 -map:s 7 -map:s 8 -c:v libx264 -c:a:0 ac3 -ar:0 44100 -c:a:1 ac3 -ar:1 44100 -strict -2 -c:a:2 dca -ar:2 44100 -c:s ass -metadata:s:a:0 language=fra -metadata:s:a:1 language=ger -metadata:s:a:2 language=eng -metadata:s:s:0 language=fra -metadata:s:s:1 language=ger -metadata:s:s:2 language=ger -metadata:s:s:3 language=ger -metadata:s:s:4 language=eng -t 10 input.mkv

内容in.srt(テストに使用):

1
00:00:00,0 --> 00:00:01,0
Sec 0 to 1

2
00:00:01,0 --> 00:00:02,0
Sec 1 to 2

3
00:00:02,0 --> 00:00:03,0
Sec 2 to 3

4
00:00:03,0 --> 00:00:04,0
Sec 3 to 4

input.mkvMediaInfo ツールを使用してストリームを確認する:

Video
ID                                       : 1
Format                                   : AVC
...
Audio #1
ID                                       : 2
Language                                 : French
...
Audio #2
ID                                       : 3
Language                                 : German
...
Audio #3
ID                                       : 4
Language                                 : English
...
Text #1
ID                                       : 5
Language                                 : French
...
Text #2
ID                                       : 6
Language                                 : German
...
Text #3
Language                                 : English
...
Text #4
Language                                 : German
...
Text #5
ID                                       : 9
Language                                 : English

英語の字幕のみを残すコマンドを実行します。
ffmpeg -y -i input.mkv -map 0:v -map 0:a? -map 0:s:m:language:eng -codec copy tmp_output.mkv

MediaInfo を使用すると、tmp_output.mkv英語の字幕が 2 つあることがわかります。

FFmpegをもう一度実行します-map 0:s:0:
ffmpeg -y -i tmp_output.mkv -map 0:v -map 0:a? -map 0:s:0 -codec copy output.mkv

MediaInfo ツールを使用して output.mkv のストリームを確認すると、英語の字幕ストリームが 1 つだけ表示されます。

Text
ID                                       : 5
Language                                 : English
Default                                  : Yes
Forced                                   : No

関連情報