我一直在使用跟随 Gyan 的淡入淡出作为我工作流程的一部分,我发现它看起来比其他交叉淡入淡出解决方案并且易于适应不同的输入。但是,我现在正尝试在 Bash 脚本中实现它以实现自动化,并且在动态生成行中的解析度时遇到了麻烦color=black:1384x1080
。
ffmpeg -i "$1" -i "$2" -i "$3" \
-movflags faststart \
-filter_complex \
"color=black:1384x1080:d=186.367[base]; \
[0:v]scale=-2:1080,setpts=PTS-STARTPTS[v0]; \
[2:v]format=yuva420p,fade=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+((168)/TB)[v1]; \
[base][v0]overlay[tmp]; \
[tmp][v1]overlay,format=yuv420p[fv]; \
[1:a][2:a]acrossfade=d=2[fa]" \
-map [fv] -map [fa] -map -0:v:1 -c:v libx264 -c:a libopus -shortest "output.mp4"
在下面的行中,我可以使用它scale=-2:1080
来缩放输入并保留其纵横比,但是使用与color
过滤器相同的语法会导致几个错误,这些错误几乎说的是同一件事:
无法将选项值“-2x1080”解析为图像大小
有什么方法可以自动执行脚本的这一部分,还是我别无选择,只能手动完成?
答案1
scale2ref 过滤器可用于根据另一个输入缩放一个输入。
像这样添加scale2ref,并在最终覆盖后重置SAR。
color=black:16x16:d=186.367[base]; \
[0:v]scale=-2:1080,setpts=PTS-STARTPTS[v0]; \
[base][v0]scale2ref[base][v0]; \
[base][v0]overlay[tmp]; \
[tmp][v1]overlay,format=yuv420p,setsar=1[fv]; \
[1:a][2:a]acrossfade=d=2[fa]" \