ffmpeg - 将多个音频映射到一个通道

ffmpeg - 将多个音频映射到一个通道

我想输出一个包含多个声音的视频文件,但将它们放在一个频道中。
我尝试了几种方法,但总是得到一个包含多个声音流的视频。
像这样

我的命令是

ffmpeg -r 30 -i test_%03d.png 
-itsoffset 10 -ss 5 -t 20 -i s01.wav
-itsoffset 15 -ss 10 -t 30 -i s02.wav 
-map 0:v -map 1:a:0 -map 2:a:0 -c:v libopenh264 -c:a mp3 test.mp4

新命令测试

-framerate 30 -i test_%03d.png -ss 0.2 -t 1 -i sound01.wav -ss 1 -t 2 -i sound02.wav
-filter_complex
"[1] aformat=sample_fmts=s16p:sample_rates=44100:channel_layouts=mono [a1];
 [2] aformat=sample_fmts=s16p:sample_rates=44100:channel_layouts=mono [a2]; 
 [a1]adelay=400|400,apad[b1]; 
 [a2]adelay=900|900[b2]; 
 [b1][b2]amerge=2[a]" 
 -map 0:v -map "[a]" -c:v libopenh264 -c:a mp3 -ac 2 output.mp4

因为过滤器无法选择其格式发生错误,我向命令添加了格式。但现在又发生了另一个错误,输入 1 无通道布局并且输出视频缺少声音01,请帮帮我!

答案1

要将多个音频流合并为一个,您必须使用过滤器来合并这些流:

ffmpeg -framerate 30 -i test_%03d.png -i s01.wav -i s02.wav \
       -filter_complex "[1][2]amerge=2[a]" \
       -map 0:v -map "[a]"   
       -c:v libopenh264 -c:a mp3 -ac 2 test.mp4

framerate是图像和原始流的正确选择。

-ac 2合并的音频混音为 2 个通道,因为这是 MP3 编码器的上限。


对于更新后的命令,

ffmpeg -framerate 30 -i test_%03d.png 
       -ss 5 -t 20 -i s01.wav
       -ss 10 -t 30 -i s02.wav
       -filter_complex "[1]adelay=10000|10000,apad[a1];
                        [2]adelay=15000|15000[a2];
                        [a1][a2]amerge=2[a]" \
       -map 0:v -map "[a]" -c:v libopenh264 -c:a mp3 test.mp4

adelay音频填充在前面,并以每声道的毫秒数为单位。apad将音频填充在末尾,这是必需的,因为 amerge 以最短的流结束。

相关内容