FFmpeg 过滤器围绕点旋转图像

标签 ffmpeg rotation

有谁知道如何使用 FFmpeg -vf 旋转将图像旋转到其起点(左上角)而不是中心点(默认)?

在此示例中,我尝试将红色方形图像 (test_sq.png) 从 in.png 上的起点旋转 30 度放置在坐标 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

正如你所看到的,它从中心点旋转,并且还剪切了原始图像,这不是很好。 有人对如何实现我的需要有建议或想法吗?

最佳答案

旋转过滤器中的输出宽度和高度将初始化为输入宽/高,并且不会自动计算以显示旋转后的整个图像。使用这个代替,

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

关于FFmpeg 过滤器围绕点旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36433676/

相关文章:

video - 用ffmpeg剪辑视频

Javascript 菜单图标在单击时旋转 90 度并在第二次单击时旋转 90 度

html - 拖动旋转 SVG :g group

linux - 如何将两个音频合并为一个,但使用第一个音频的长度?

ffmpeg - 将 mp3 转换为 flac 会导致文件持续时间更长

c++ - 如何(优雅地)将任意数量的输入输出参数旋转到函数?

php - 为什么在 PHP 中调整上传图片大小时我的图片会旋转?

ios - 如何旋转电影? 【C4框架】

video - 如何使用 tee 选项将参数传递给 ffmpeg 中的比特流过滤器?

audio - 计算 PTS 和 DTS 以在 ffmpeg 中编码新的视频和音频