有没有人知道如何使用FFmpeg -vf旋转将图像旋转到其起点(左上角)而不是中心点(默认)?
在此示例中,我尝试从 in.png 的起点开始旋转红色方形图像( test_sq.png ) 30 度置于coord 423:259 ,导致 out.png 。
这是我的命令:
ffmpeg -y -i in.png -pix_fmt bgra -strict experimental -vf movie=test_sq.png scale=279:279 rotate=30*PI/180:c=none:oh=ow [sticker]; [in][sticker] overlay=423:259 [out] -s 1280x720 out.png
想象它:
正如您所看到的那样,它从中心点旋转并剪切原始图像,并不是很好。 任何人都有如何实现我需要的建议或想法?
答案 0 :(得分:4)
旋转滤镜中的输出宽度和高度初始化为输入W / H,而不是自动计算以在旋转后显示整个图像。改为使用它,
ffmpeg -y -i in.png -i test_sq.png \
-filter_complex "[1]scale=279:279,setsar=1,rotate=PI/6:c=none:ow=rotw(PI/6):oh=roth(PI/6)[s];
[0][s]overlay=423-w*sin(PI/6)/(sin(PI/6)+cos(PI/6)):259,scale=hd720[out]" \
-map "[out]"-pix_fmt bgra out.png
对于非方形图像,
ffmpeg -y -i in.png -i test_sq.png \
-filter_complex "[1]scale=279:279,setsar=1,rotate=PI/6:c=none:ow=rotw(PI/6):oh=roth(PI/6)[s];
[0][s]overlay=423-ih*sin(PI/6):259,scale=hd720[out]" \
-map "[out]"-pix_fmt bgra out.png
(您必须手动提供ih
的值(原始图像的高度)。
对于具有负旋转的非方形图像
ffmpeg -y -i in.png -i test_sq.png \
-filter_complex "[1]scale=279:279,setsar=1,rotate=-PI/6:c=none:ow=rotw(-PI/6):oh=roth(-PI/6)[s];
[0][s]overlay=423:259-iw*sin(PI/6),scale=hd720[out]" \
-map "[out]"-pix_fmt bgra out.png
(您必须手动提供iw
的值(原始图片的宽度)。
对于没有内置alpha的图片,请在format=bgra
过滤器前插入rotate
。