我想输出一个包含多个声音的视频文件,但将它们放在一个频道中。
我尝试了几种方法,但总是得到一个包含多个声音流的视频。
像这样
我的命令是
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 以最短的流结束。