![ffmpeg 映射帮助,将 1 6ch 音频编码为多轨](https://linux22.com/image/1450933/ffmpeg%20%E6%98%A0%E5%B0%84%E5%B8%AE%E5%8A%A9%EF%BC%8C%E5%B0%86%201%206ch%20%E9%9F%B3%E9%A2%91%E7%BC%96%E7%A0%81%E4%B8%BA%E5%A4%9A%E8%BD%A8.png)
我有2个输入文件:
cover.jpg
audio.dts
(6 通道)
我的目标文件是包含 1 个视频和 3 个音频的 mp4:
- 音频 1 是 2 通道 aac
- 音频 2 是 6 通道 ac3
- 音频 3 是 6 通道 dts
这是我尝试过的命令。图片转为带音频多通道的视频:
ffmpeg -loop 1 -i cover.jpg -i audio.dts \
-map 0:0 -map 1:0 -map 1:0 -map 1:0 \
-f mp4 \
-codec:v:0 libx264 -r:0 1 -profile:v:0 main -level 3.1 -pix_fmt:0 yuv420p -qmax:0 19 -qmin:0 18 \
-codec:a:0 libfaac -ac:0 2 -ar:0 44100 -q:a:0 640 -af:0 "pan=stereo| FL = FL + 0.5*FC + 1.0*BL + 1.0*SL + 0.8*LFE | FR = FR + 0.5*FC + 1.0*BR + 1.0*SR + 0.8*LFE" \
-codec:a:1 ac3 -ac:1 6 -ab:a:1 640 \
-codec:a:2 copy \
-threads 0 -y \
-shortest -t 00:00:39.000 out.mp4
但似乎我应用于音频 #1 的音频选项也应用于音频 #2 和音频 #3。
我怎样才能使这些选项仅适用于一条轨道?
答案1
与往常一样,在 FFmpeg 中有多种方法可以执行此类任务。
我最熟悉的是使用channelsplit
过滤器分离音频流并为每个音频流定义标签。这样,您可以对任何一个通道单独执行各种过滤,并映射输出以包含您想要的任意通道组合。
该过滤器看起来将会像这样:
ffmpeg -i [INPUT_video] -i [INPUT_3channel_audio] -filter_complex "[1:a]channelsplit[1][2][3];...."
在这个例子中,我们将 3 个通道分别拆分为新标签:[1]
[2]
和[3]
。现在可以稍后调用这些标签并将其推送到其他过滤器和/或映射到最终输出。
希望这可以帮助!