FFmpeg 缩放不是平滑居中(而是锯齿形)
FFmpeg zoom not smooth-centered (but zigzag)
我尝试使用 FFmpeg 执行基本的 zoompan。我有一个输入图像 (.png 1280x720),我从中创建了一个 8 秒的视频 (.mp4 320x180),带有缩放功能。这是我的命令:
ffmpeg -loop 1 -i in_img.png -c:v libx264 -pix_fmt yuv420p -strict experimental -framerate 25 -vf zoompan=z='min(zoom+0.011835363,2.1835363)':d=375:x=400:y=247 -s 320x180 -t 00:00:08.882 out_vid.mp4
一切正常...但缩放效果不佳。它是曲折的。
有谁知道如何让它缩放平滑,比如居中? (而且不是先左后右)
谢谢
编辑
我通过稍微修改 -vf 过滤器中的 'x' 和 'y' 向解决方案迈进了一小步(命令的其余部分与上面相同):
-vf
zoompan=z='min(zoom+0.022,3.25)':d=375:x='if(gte(zoom,3.25),x,x+8.24)':y='if(gte(zoom,3.25),y,y+4.72)':s=1280x720
我每帧都x和y(对于x +8.24,对于y +4.72,我知道这些值是因为我知道到达结束缩放状态需要多少帧) 以便它将移动到其结束缩放状态坐标(1011,582),参见图像:
This is the video of the result,如您所见,它没有产生之字形效果,但现在看起来它先到中心,然后到缩放结果。还是那只是错觉??
有什么想法吗?
从缩放级别 1
(1280x720) 缩放到缩放级别 5
(256x144) 并平移到右下角,最终位置 (1011,568) 在 125 帧中,并输出视频作为 320x180,使用
-vf zoompan=z='min(zoom+0.0320,5)':d=125:x='(iw-(iw/zoom))*(1011/1024)': \
y='(ih-(ih/zoom))*(568/576)',scale=320x180
其中 0.0320
是 (final zoom - initial zoom) / frames to zoom in
的除法,1024
是 input width - final width
,576
是 input height - final height
FFmpeg 似乎无法平滑插值,因此精细的缩放和平移会出现抖动。
我尝试使用 FFmpeg 执行基本的 zoompan。我有一个输入图像 (.png 1280x720),我从中创建了一个 8 秒的视频 (.mp4 320x180),带有缩放功能。这是我的命令:
ffmpeg -loop 1 -i in_img.png -c:v libx264 -pix_fmt yuv420p -strict experimental -framerate 25 -vf zoompan=z='min(zoom+0.011835363,2.1835363)':d=375:x=400:y=247 -s 320x180 -t 00:00:08.882 out_vid.mp4
一切正常...但缩放效果不佳。它是曲折的。
有谁知道如何让它缩放平滑,比如居中? (而且不是先左后右)
谢谢
编辑
我通过稍微修改 -vf 过滤器中的 'x' 和 'y' 向解决方案迈进了一小步(命令的其余部分与上面相同):
-vf zoompan=z='min(zoom+0.022,3.25)':d=375:x='if(gte(zoom,3.25),x,x+8.24)':y='if(gte(zoom,3.25),y,y+4.72)':s=1280x720
我每帧都x和y(对于x +8.24,对于y +4.72,我知道这些值是因为我知道到达结束缩放状态需要多少帧) 以便它将移动到其结束缩放状态坐标(1011,582),参见图像:
从缩放级别 1
(1280x720) 缩放到缩放级别 5
(256x144) 并平移到右下角,最终位置 (1011,568) 在 125 帧中,并输出视频作为 320x180,使用
-vf zoompan=z='min(zoom+0.0320,5)':d=125:x='(iw-(iw/zoom))*(1011/1024)': \
y='(ih-(ih/zoom))*(568/576)',scale=320x180
其中 0.0320
是 (final zoom - initial zoom) / frames to zoom in
的除法,1024
是 input width - final width
,576
是 input height - final height
FFmpeg 似乎无法平滑插值,因此精细的缩放和平移会出现抖动。