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

如何使用FFmpeg拼接两个视频?第二个视频可能不含音频轨道

没问题,我来帮你搞定这个FFmpeg拼接的麻烦!

原命令的问题所在

你之前用的命令会报错,核心原因是:当第二个视频没有音频时,[1:a]这个音频流根本不存在,FFmpeg找不到指定的输入流,自然会抛出错误。我们需要一个能自动适配第二个视频是否带音频的方案。

单命令解决方案(Bash环境可用)

这个命令会自动检测第二个视频的音频状态,灵活选择音频源进行拼接:

ffmpeg -i INPUT1 -i INPUT2 -f lavfi -i anullsrc=r=44100:cl=stereo -filter_complex \
"[0:v][1:v]concat=n=2:v=1:a=0[v]; \
 [0:a][$(if ffprobe -v error -select_streams a -show_entries stream=codec_type -of default=noprint_wrappers=1:nokey=1 INPUT2 | grep -q audio; then echo 1:a; else echo 2:a; fi)]concat=n=2:a=1:v=0[a]" \
-map "[v]" -map "[a]" -c:v libx264 -c:a aac OUTPUT

命令细节解释

  • 前三个-i参数:分别加载第一个视频、第二个视频,以及一个备用的静音音频轨(用anullsrc生成,默认是44100Hz立体声,你可以根据第一个视频的音频参数调整)。
  • 视频拼接部分:[0:v][1:v]concat=n=2:v=1:a=0[v],直接把两个视频流拼接成一个,不受音频状态影响。
  • 音频拼接逻辑:用ffprobe快速检测第二个视频是否有音频——如果有,就用它的音频和第一个视频的音频拼接;如果没有,就用静音轨代替,保证音频流数量始终匹配拼接要求。
  • 编码参数:-c:v libx264和-c:a aac是通用的视频/音频编码器,确保输出文件的兼容性;如果两个视频的编码参数完全一致,你可以换成-c copy来快速复制流,跳过重新编码的过程。

额外优化提示

如果两个视频的分辨率、帧率不一致,拼接后的视频可能出现画面跳变,你可以先统一视频参数再拼接,比如修改视频拼接部分:

[0:v]scale=1920:1080,fps=30[v0]; [1:v]scale=1920:1080,fps=30[v1]; [v0][v1]concat=n=2:v=1:a=0[v]

把1920:1080和30换成你需要的目标分辨率和帧率即可。

内容的提问来源于stack exchange,提问作者Sven Nolting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:52:50