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

如何使用FFmpeg拼接多个分辨率不一致的MP4视频?

FFmpeg拼接不同分辨率MP4视频解决方案

报错原因

FFmpeg的concat滤镜默认要求所有输入视频的视频参数(分辨率、像素宽高比、帧率)、音频参数(采样率、声道数、采样格式)完全匹配,否则无法直接拼接,你的报错就是两个输入视频分辨率不一致导致的。

方案1:保持原视频比例,补黑边拼接(无画面拉伸)

这个方案会把所有视频按原比例缩放到适配目标分辨率,多余部分补黑边,不会出现画面变形,是最常用的方案。你可以先选择一个目标分辨率(示例用1920x1080,可自行替换),对应的命令如下:

ffmpeg -i [第一个视频路径] -i [第二个视频路径] \
-filter_complex \
"[0:v]scale=w=1920:h=1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[v0]; \
 [0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a0]; \
 [1:v]scale=w=1920:h=1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[v1]; \
 [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a1]; \
 [v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" [输出视频路径]

参数说明

  • 把命令里的1920:1080替换成你需要的目标宽高即可,建议优先选择所有输入视频中最大的宽高作为目标,避免放大导致画质损失
  • force_original_aspect_ratio=decrease表示缩放时保持原视频比例,缩放后的最大边不会超出目标分辨率对应边
  • pad参数负责给小于目标分辨率的部分补黑边,让所有视频最终输出尺寸完全一致,(ow-iw)/2:(oh-ih)/2表示黑边均匀分布在画面上下/左右两侧
  • aformat参数统一所有输入的音频参数,避免音频规格不一致导致的拼接报错

方案2:拉伸视频到统一分辨率(无黑边,画面可能变形)

如果你不需要保留原视频比例,接受拉伸画面来填满目标分辨率,可以去掉pad部分,命令简化为:

ffmpeg -i [第一个视频路径] -i [第二个视频路径] \
-filter_complex \
"[0:v]scale=1920:1080,setsar=1[v0]; \
 [0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a0]; \
 [1:v]scale=1920:1080,setsar=1[v1]; \
 [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[a1]; \
 [v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" [输出视频路径]

多视频扩展方法

如果需要拼接超过2个视频,只需要按以下逻辑修改命令即可:

  • 新增-i [第N个视频路径]输入参数
  • 在filter_complex中新增对应第N个视频的视频流、音频流处理代码
  • 把concat的n=2改成对应视频总数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:07