2017-05-01 51 views
0

我試圖將一組音頻曲目添加到某些視頻文件中,作爲自動化過程的一部分。我想保留所有原始音軌並且有第二個重新編碼的副本。FFMPEG在保留原件的同時重新編碼所有音頻流

我一直使用的是:

ffmpeg -i file 
-map 0:v -codec:v copy 
-map 0:a -codec:a copy 
-map 0:a:0 -codec:a:0 aac -strict experimental ...(Bitrate, filters etc all with :a:0) 
-map 0:s -codec:s copy 
output file 

但是我不知道如何改變這種處理有多個音軌輸入文件,因爲它只會轉換頭。

如果我在編解碼器行上將:a:0更改爲:a,它會生成我需要的額外副本,但會覆蓋原始副本的副本編解碼器。

任何想法的人?

回答

1

兩種方法可以做到這一點。

首先使用單個命令但可以變長。想法是有條件地將音頻流映射到文件可能具有的最大可能流。不優雅,但會完成工作。

ffmpeg -i in.mp4 
      -c copy 
      -map 0:v 
      -map 0:a:0? -c:a:0 copy 
      -map 0:a:0? -c:a:1 aac 
      -map 0:a:1? -c:a:2 copy 
      -map 0:a:1? -c:a:3 aac 
      -map 0:a:2? -c:a:4 copy 
      -map 0:a:2? -c:a:5 aac 
      -map 0:a:3? -c:a:6 copy 
      -map 0:a:3? -c:a:7 aac 
out.mp4 

第二種方法轉碼所有音頻軌道並將其轉換爲另一個ffmpeg執行以進行復制。使用這種方法,您在最終輸出中對流順序的靈活性較低。

ffmpeg -i in.mp4 -c:a aac -map 0:a -f nut - | 
    ffmpeg -i - -i in.mp4 -c copy -map 1 -map 0 out.mp4 
+0

謝謝,我還沒有看到條件映射[鏈接](https://ffmpeg.org/ffmpeg-all.html#Advanced-options)(爲別人看)我認爲,管道輸出可是更好的,但我認爲它不會與我的自動設置。 – Olirav

相關問題