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

如何使用FFmpeg稳定拼接含/不含音频的视频文件?

如何使用FFmpeg稳定拼接含/不含音频的视频文件?

我最近也碰到过一模一样的难题——手里攒着一堆视频文件,少则5个,多的时候能有上百个,有的带音频轨道,有的完全没声音。而且为了拼接不出错,我还得先把所有视频统一尺寸(比如用-vf "320:240"强制缩放,SAR和DAR的问题先放一边,唉,这部分真的头大),最终目标就是把这些零散的视频拼成一个完整的文件。

之前我也试过各种官方资料里的方法,比如外部列表文件的拼接方式,但总是不稳定,踩了好几个坑。折腾半天后,我琢磨出用FFmpeg的-filter_complex滤镜脚本来实现,稳定性靠谱多了,思路大概是这样:

第一步:先统一视频尺寸(可选但强烈推荐)

如果你的视频尺寸参差不齐,先批量把它们转成相同分辨率,避免拼接时出错。单文件处理命令是:

ffmpeg -i 你的原视频.mp4 -vf "scale=320:240" -c:a copy 缩放后的视频.mp4

要是原视频本身没有音频,这个命令也会保留无音频的状态,不用额外调整。

第二步:编写滤镜脚本文件(比如命名为combine.txt)

这个脚本用来定义每个输入文件的流,以及拼接规则,示例内容如下:

# 逐个引入视频文件,带音频的要同时声明视频和音频流
[in0:v][in0:a] movie="sample0_scaled.mp4"  # 带音频的视频
[in1:v] movie="sample1_scaled.mp4"         # 无音频的视频
[in2:v][in2:a] movie="sample2_scaled.mp4"  # 带音频的视频

# 拼接所有视频流:n=3表示总共有3个视频输入,v=1表示处理视频轨道
[v_concat] concat=n=3:v=1:a=0 [v_out]

# 拼接所有存在的音频流:n=2表示这里有2个音频输入,a=1表示处理音频轨道
[a_concat] concat=n=2:v=0:a=1 [a_out]

# 把拼接好的视频和音频合并成最终输出流
[v_out][a_out] concat=n=1:v=1:a=1 [final_out]
  • 要是某个视频没有音频,只写[inX:v] movie="文件名.mp4"就行,不用加音频流的声明
  • 音频拼接的部分要对应所有带音频的文件数量,要是所有视频都没音频,直接删掉音频拼接的代码块就行

第三步:执行拼接命令

用FFmpeg调用刚才写的脚本,生成最终的拼接视频:

ffmpeg -filter_complex_script combine.txt -map "[final_out]" -c:v libx264 -c:a aac 最终输出.mp4

这样操作下来,不管视频有没有音频,都能稳定拼接成一个完整的文件啦~

备注:内容来源于stack exchange,提问作者Skeeve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:28:08