FFmpeg过滤器围绕点旋转图像

时间:2016-04-05 17:57:57

标签: ffmpeg rotation

有没有人知道如何使用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

想象它:

Results

正如您所看到的那样,它从中心点旋转并剪切原始图像,并不是很好。 任何人都有如何实现我需要的建议或想法?

1 个答案:

答案 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