ffmpeg 过滤器顺序旋转比例覆盖

ffmpeg filters order rotate scale with overlay

我正在尝试在视频上渲染图像。经过一番研究后,我使用以下命令

ffmpeg -y  -i "my_video.mp4" -i "my_image.jpg" -filter_complex "color=color=blue:size=711x400:rate=25[container];[0:v]scale=w=400:h=400,setpts=expr=PTS-STARTPTS[vidscaled];[container][vidscaled]overlay=eval=init:shortest=1:x=155:y=0[overlay0];[1:v]scale=w=123:h=123,rotate=a=323.7*PI/180:c=black@0:oh='roth(323.7*PI/180)':ow='rotw(323.7*PI/180)':bilinear=1[imgproc];[overlay0][imgproc]overlay=eval=init:x=18:y='237-abs(123*sin(323.7*PI/180))'[overlay1]" -map "[overlay1]" -map 0:a -strict -2 -preset ultrafast -g 120 output.mp4

这种方法的问题是图像质量低,因为缩放是在旋转之前应用的。所以我尝试在缩放之前应用旋转,(请参阅下一个命令)

ffmpeg -y  -i "my_video.mp4" -i "my_image.jpg" -filter_complex "color=color=blue:size=711x400:rate=25[container];[0:v]scale=w=400:h=400,setpts=expr=PTS-STARTPTS[vidscaled];[container][vidscaled]overlay=eval=init:shortest=1:x=155:y=0[overlay0];[1:v]rotate=a=323.7*PI/180:c=black@0:oh='roth(323.7*PI/180)':ow='rotw(323.7*PI/180)':bilinear=1,scale=w=173:h=173[imgproc];[overlay0][imgproc]overlay=eval=init:x=18:y='237-abs(123*sin(323.7*PI/180))'[overlay1]" -map "[overlay1]" -map 0:a -strict -2 -preset ultrafast -g 120 output.mp4

问题是:c=black@0 不再起作用,旋转图像周围的边界框不透明。

任何人都请帮助这个灵魂。

pd:使用 c=none 也不起作用,得到绿色背景

目前无法对此进行测试,但事先添加一个 alpha 平面应该可以解决问题。

[1:v]format=yuva444p,rotate=a=323.7*PI/180:c=black@0:oh='roth(323.7*PI/180)':ow='rotw(323.7*PI/180)':bilinear=1,scale=w=123:h=123[imgproc];