我正在尝试在视频上渲染图像。经过一些研究后,我使用以下命令
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 =黑色@ 0 不再起作用,旋转图像周围的边界框不透明。
任何人都应该帮助这个灵魂。
pd:使用c = none也不起作用,得到了绿色背景
答案 0 :(得分:1)
目前无法对此进行测试,但事先添加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];