ffmpeg:將各種編解碼器附加到各種filtergraph輸出流 - 如何?

ffmpeg:將各種編解碼器附加到各種filtergraph輸出流 - 如何?

我有 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對於視訊串流也將類似地工作。

相關內容