2016-12-02 57 views
1

我這樣使用的命令,比如有很多有多個音頻和字幕語言文件,然而軌跡號不一致(英文音頻流並不總是在前):映射流通過語言的FFmpeg

ffmpeg -i "input.mkv" -map 0 -map -0:a:1 -c:v copy -c:a copy "output.mkv" 

不會產生預期的結果。周圍搜索後,我發現這是可能基於與此命令語言映射流:

ffmpeg -i "input.mkv" -map 0 -map -0:m:language:eng -c:v copy -c:a copy "output.mkv" 

然而-map -0:m:language:eng將刪除所有曲目與英文標記。要保留字幕軌道,您可以使用-map 0:s,但這是一個很好的解決方案,但我想知道是否可以僅基於語言映射音頻流。

回答

0

更新據我可以告訴這是消除英語音頻,同時保留所有其他流的最佳方式而不使用流標識,我發現它比語言標誌更不一致。通常人們使用正確的語言標誌,但音頻語言不太可能保持相同的ID。

ffmpeg -i "in.mkv" -map a -map -m:language:eng -map v -map s -map d? -map t -c:v copy -c:a copy "out.mkv"

命令將映射每個音頻流然後取出音頻與English語言標誌。它會映射所有視頻,字幕和附件流。如果需要,您可以添加-disposition:a:0 default以爲第一個音頻流提供[默認]標誌。注意:僅當您刪除已具有默認標誌的音頻時才使用。如果您想將其他音軌設置爲默認值,請將-disposition:a:0更改爲-disposition:a:1等等。

+0

該命令將複製視頻流*和非英文字幕流。 *除非視頻標記爲英語,通常不會。我的解決方法避免了這一點。 – Mulvya

+0

嗯,你的解決方案不會映射附件,但你怎麼做,而不使用-map 0或給每個附件流的ID?你發佈的第一個解決方案是製作一個臨時文件,這個過程需要更長的時間。另外,如果在刪除英文流後不使用'-map 0:v',那麼如果視頻有英文標誌,視頻會不會被刪除? ? – ffmpeg123

+0

保留數據和附件流的修改解決方法。你的原始目的,IIRC,是隻刪除英文音頻流。我的解決方法可以做到這一點,並讓所有其他事情都可以完成 – Mulvya

2

編輯:忽略初始回覆。目前不可能。頂部使用解決方法。

ffmpeg -i "in.mkv" -map 0:a -map -0:m:language:eng -map 0:v -map 0:s -map 0:d? -map 0:t? -c copy "out.mkv" 

由於ffmpeg以給定的順序實現了地圖選項,因此達到了預期的效果。


您需要後綴的元數據選擇的流類型選擇即

ffmpeg.exe -i "%f" -map 0 -map -0:a:m:language:eng -c:v copy -c:a copy "../%f" 
+0

這似乎起初工作,但我遇到一些問題。我的視頻有兩個音軌#0英語#1日語音頻是ogg vorbis,他們必須糾正語言標誌。運行上面的命令只會輸出帶有英文音頻的文件。即使我嘗試改變-0:a:m:language:eng到-0:a:m:language:jpn我也會得到相同的結果。無論我做什麼,它似乎只是刪除第二首歌曲。 – ffmpeg123

+0

這可以工作,但不是很簡單:ffmpeg -i「input,mkv」-map 0:v -map 0:s -map 0:a:m:language:jpn -c:v copy -c:副本「 output.mkv「我不明白爲什麼」-map 0 -map -0:a:m:language:eng「在」-map 0 -map -0:m:language:eng「時不起作用。 – ffmpeg123

+0

Acutally,我的答案和解決方法都無效。你的解決方法「有效」,因爲ffmpeg正在評估'-map 0:a:m:language:jpn'爲'-map 0:a:1',這在你的情況下恰好是jpn音頻。目前,這不是直接可能的,但我已經用解決方法替換了我的答案。 – Mulvya

0

-0:m:language:eng將刪除英文音軌並保留所有其他音軌。

只保留英文音軌並刪除所有其他文件,刪除開頭處的短劃線:0:m:language:eng 短劃線開頭創建一個負映射,它告訴ffmpeg「匹配此「

我知道這是8個月後,但我認爲這將有助於那些最終在這裏谷歌搜索像我一樣。