FFmpeg中如何将concat滤镜输出作为复杂滤镜输入单命令处理
FFmpeg 单命令实现concat拼接后接后续滤镜的方案
原命令核心问题
- 输入流索引错误:你共传入3个输入文件,索引从0开始依次为
[0](irregular.mp4)、[1](intro.mp4)、[2](outro.mp4),原命令错误调用了不存在的[3]输入,且intro、outro的索引对应错误 - 标签重复定义:同一标签
[b]被重复赋值两次,引发流识别冲突 - 语法错误:
-map"[concatenateda]"参数中间缺少空格,属于命令格式错误 - 拼接顺序错误:原命令concat输入顺序不符合常规片头→正片→片尾的拼接逻辑
- 缺失参数统一处理:concat滤镜要求所有输入的视频分辨率、帧率、音频采样率/声道数完全一致,原命令未做参数对齐,容易拼接失败
修正后可用命令
ffmpeg -i irregular.mp4 -i intro.mp4 -i outro.mp4 -filter_complex \ # 处理片头intro,统一音视频参数 [1:v]scale=1080:610:force_original_aspect_ratio=increase,crop=1080:610,setdar=16/9,fps=30[v_intro]; \ [1:a]aformat=sample_rates=44100:channel_layouts=stereo[a_intro]; \ # 处理正片irregular,统一音视频参数 [0:v]scale=1080:610:force_original_aspect_ratio=increase,crop=1080:610,setdar=16/9,fps=30[v_main]; \ [0:a]aformat=sample_rates=44100:channel_layouts=stereo[a_main]; \ # 处理片尾outro,统一音视频参数 [2:v]scale=1080:610:force_original_aspect_ratio=increase,crop=1080:610,setdar=16/9,fps=30[v_outro]; \ [2:a]aformat=sample_rates=44100:channel_layouts=stereo[a_outro]; \ # 按片头→正片→片尾顺序拼接 [v_intro][a_intro][v_main][a_main][v_outro][a_outro]concat=n=3:v=1:a=1[concat_v][concat_a]; \ # 对拼接后的视频流执行pad操作 [concat_v]pad=1080:1920:(ow-iw)/2:(oh-ih)/2[padded_v]; \ # 叠加边框(如果overlay素材是独立边框文件,可追加第四个输入后替换对应索引即可) [padded_v][1:v]overlay=0:0[out_v] \ # 映射最终输出的视频和音频 -map "[out_v]" -map "[concat_a]" -c:v libx264 -c:a aac output.mp4
命令中用反斜杠换行仅为方便阅读,可直接合并为单行执行,完全符合单命令处理的要求。
关键逻辑说明
concat滤镜输出的视频流[concat_v]、音频流[concat_a]可以直接作为后续所有滤镜的输入,你要追加缩放、调色等其他操作,直接在concat之后接对应的滤镜链即可,不需要二次封装文件。
内容的提问来源于stack exchange,提问作者Teddy Tsai
相关产品推荐
相关产品推荐

