FFmpeg批量处理视频时背景与前景叠加顺序错误的问题求助
FFmpeg批量处理视频时背景与前景叠加顺序错误的问题求助
嘿,我一眼就瞅出问题所在啦!你单独测试的命令和批量脚本里的输入文件顺序搞反了,导致滤镜链里的流索引对应错误,才会出现主视频和背景颠倒的情况。
问题根源分析
你能正常运行的单独命令里,输入顺序是:
ffmpeg -stream_loop -1 -i background1080p.mp4 -i input1080p.mp4 -i logo.png
这里[0]是循环的背景视频,[1]是要叠加的主视频,滤镜里是把缩放后的主视频([inner])叠加到背景([0])上,逻辑完全正确。
但批量脚本里的输入顺序变成了:
ffmpeg -i "%%a" -stream_loop -1 -i background.mp4 -i logo.png
现在[0]是来自INPUT文件夹的主视频,[1]才是循环的背景视频,可你滤镜里还是沿用了原来的索引逻辑,自然就把主视频当成底层、背景当成上层叠加了,顺序完全反了!
修正后的批量脚本
我帮你调整了滤镜链里的流索引,同时保留你原来的逻辑,修正后的脚本如下:
@ECHO OFF Setlocal EnableDelayedExpansion set INPUT=D:\Shorts\code\INPUT set OUTPUT=D:\Shorts\code\OUTPUT :: encode video: for %%a in ("%INPUT%\*.*") DO ( ffmpeg -i "%%a" -stream_loop -1 -i background.mp4 -i logo.png ^ -filter_complex "[0]scale=1280:720[inner];[1][inner]overlay=70:70:shortest=1[vid]; [vid][2]overlay=10:10:enable='not(between(t\,10\,15))'[out]" ^ -map "[out]" -map 0:a -c:a copy -shortest -y "%output%\%%~na.mp4" ) pause
关键修改点说明
- 滤镜流索引调整:
- 现在
[0]是主视频,所以先对[0]执行缩放得到[inner] - 然后用
[1][inner]overlay把缩放后的主视频(上层)叠加到背景视频([1],底层)上,恢复了你单独测试时的叠加顺序
- 现在
- 优化脚本格式:
- 把命令拆分成多行(用
^换行),可读性更好 - 给for循环加了括号,避免后续可能的语法问题
- 调整了输出文件名,去掉了可能多余的
%%03d序号(如果确实需要序号可以再加回来)
- 把命令拆分成多行(用
- 保留了你原来的音频映射(
-map 0:a),也就是取主视频的音频,如果你想取背景的音频,可以改成-map 1:a
备注:内容来源于stack exchange,提问作者alexdo
相关产品推荐
相关产品推荐

