
我對 FFmpeg 不太熟悉,我自己也嘗試過很多次,但我什至無法弄清楚語法 所以我要向外詢問比我聰明得多的人。我希望使用 FFmpeg 刪除所有非英語選項,然後刪除它們。
之後,刪除除第一個索引選項之外的所有英文選項。無論我如何嘗試,我都無法弄清楚這一點,並將我的頭撞到牆上大約三個小時,我最後的嘗試是:
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"
(我不知道是否可以在一個命令中僅保留第一個英語流)。
下列郵政,表示映射英語音訊串流的語法是-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
使用MediaInfotmp_output.mkv
我們可以看到有兩個英文字幕。
再次執行 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的串流只顯示一個英文字幕串流:
Text
ID : 5
Language : English
Default : Yes
Forced : No