You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg创建包含全部音视频流的马赛克视频?

解决FFmpeg马赛克视频缺失多输入音频的问题

你的问题很典型——原来的FFmpeg命令只处理了视频合成部分,完全没对音频做任何处理,所以FFmpeg默认只会把第一个输入文件的音频加到输出里,其他三个的音频都被忽略了。下面给你两种常用的解决方案,你可以根据需求选择:

方案1:将所有音频混合成一个轨道(同步视频启动时间)

如果你希望各个视频的音频对应各自的启动时间播放,最终输出一个混合后的单音频轨道,这个方案最适合。我们需要给每个音频添加和视频对应的延迟,再用amix滤镜混合:

ffmpeg -i lead_1.mp4 -i lead_2.mp4 -i lead_3.mp4 -i lead_4.mp4 \
-filter_complex "
color=s=1280x720:c=black [base];
[0:v] setpts=PTS-STARTPTS, scale=640x360 [upperleft1];
[1:v] setpts=PTS+35/TB, scale=640x360 [lowerright1];
[2:v] setpts=PTS+87/TB, scale=640x360 [upperleft2];
[3:v] setpts=PTS+183/TB, scale=640x360 [lowerright2];
[base][upperleft1] overlay=1 [tmp1];
[tmp1][lowerright1] overlay=1:x=640:y=360 [tmp2];
[tmp2][upperleft2] overlay=1 [tmp3];
[tmp3][lowerright2] overlay=1:x=640:y=360 [vout];
# 音频处理:统一格式+添加对应延迟+混合
[0:a] aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo [a0];
[1:a] aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo, adelay=35000|35000 [a1]; # 35秒延迟(毫秒为单位)
[2:a] aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo, adelay=87000|87000 [a2]; # 87秒延迟
[3:a] aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo, adelay=183000|183000 [a3]; # 183秒延迟
[a0][a1][a2][a3] amix=inputs=4:duration=longest [aout]
" -map "[vout]" -map "[aout]" -c:v libx264 -c:a aac lead_1_2_3_4.mp4

几个关键细节:

  • aformat用来统一所有音频的采样率、声道数等参数,避免amix滤镜因格式不兼容报错;
  • adelay的参数是毫秒级的延迟,立体声需要给左右声道各写一个数值(比如35秒就是35000|35000);
  • amix=inputs=4:duration=longest表示混合4个音频输入,输出时长取最长的那个素材,确保所有内容都被包含。

方案2:保留每个输入的音频作为独立轨道

如果你希望输出文件里保留4个独立的音频轨道(方便后续单独控制每个视频的音量或开关),可以用这个方案。同样需要给音频添加对应延迟保证音画同步,再用-map指定所有轨道:

ffmpeg -i lead_1.mp4 -i lead_2.mp4 -i lead_3.mp4 -i lead_4.mp4 \
-filter_complex "
color=s=1280x720:c=black [base];
[0:v] setpts=PTS-STARTPTS, scale=640x360 [upperleft1];
[1:v] setpts=PTS+35/TB, scale=640x360 [lowerright1];
[2:v] setpts=PTS+87/TB, scale=640x360 [upperleft2];
[3:v] setpts=PTS+183/TB, scale=640x360 [lowerright2];
[base][upperleft1] overlay=1 [tmp1];
[tmp1][lowerright1] overlay=1:x=640:y=360 [tmp2];
[tmp2][upperleft2] overlay=1 [tmp3];
[tmp3][lowerright2] overlay=1:x=640:y=360 [vout];
# 给每个音频添加对应延迟
[0:a] adelay=0|0 [a0]; # 第一个音频无延迟
[1:a] adelay=35000|35000 [a1];
[2:a] adelay=87000|87000 [a2];
[3:a] adelay=183000|183000 [a3]
" -map "[vout]" -map "[a0]" -map "[a1]" -map "[a2]" -map "[a3]" -c:v libx264 -c:a aac lead_1_2_3_4.mp4

说明:

  • -map参数依次指定输出的视频轨道和四个音频轨道,最终输出文件会包含1个视频轨+4个独立音频轨;
  • 如果你的输入音频格式不一致,同样可以给每个音频添加aformat滤镜统一格式,避免编码报错。

如果不确定哪种方案更适合,推荐先试试第一种混合音频的方式,这是制作马赛克视频最常用的音频处理方式。

内容的提问来源于stack exchange,提问作者Dhulipala Chandrasekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:42:51