
我有 2 個從過濾器圖中映射出來的 ffmpeg 音訊輸出,因此:
-filter_complex "[0:1]..bla-bla-bla..[ac3];[0:2]..bla-bla-bla..[dts]" -map "[dts]" -map "[ac3]"
接下來,我需要對 2 個音訊串流進行編碼。一定有一種方法來指定每個串流使用什麼編解碼器,是嗎?像這樣的東西:
-codec:[dts] dts -codec:[ac3] ac3
沒有。這會引發「無效的流說明符」。我發現的所有範例僅顯示了一個引用輸入流的stream_specifier,而不是一個filtergraph流。
我嘗試過的:
-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:dts dts -codec:ac3 ac3
-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:[dts] dts -codec:[ac3] ac3
-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:a:dts dts -codec:a:ac3 ac3
-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:a:[dts] dts -codec:a:[ac3] ac3
-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:[a:dts] dts -codec:[a:ac3] ac3
我還嘗試了帶引號的所有變體(例如 -codec:"[dts]")
所有這些都會引發「無效的流說明符」。有什麼想法嗎?
答案1
您必須使用輸出流中映射流的流索引。
索引由映射的順序決定。
在 中-map "[dts]" -map "[ac3]" -codec:dts dts -codec:ac3 ac3
,
[ac3]
是第二個映射,因此其編解碼器使用-c:1 ac3
或進行分配-c:a:1 ac3
。
如果地圖是-map 0:v:1 -map "[dts]" -map 0:s:0 -map "[ac3]"
,
那麼它將是-c:3 ac3
或-c:a:1 ac3
答案2
一個相當簡單的方法是按串流類型設定編解碼器:
-c:a CODEC
將為所有音訊串流設定編解碼器
之後新增位置參數可以讓您指定不同的流,而不必計算其他類型的所有流:
-c:a:0 CODEC
將設定編解碼器第一個音訊溪流
-c:a:1 CODEC
將設定編解碼器第二個音訊溪流
-c:a:2 CODEC
將設定編解碼器第三個音訊流等。
-c:v:0
對於視訊串流也將類似地工作。