
私は 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.mkv
MediaInfo ツールを使用してストリームを確認する:
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