ffmpeg zoompan 图像到具有原始大小的视频

ffmpeg zoompan 图像到具有原始大小的视频

如何ffmpeg利用输入图像比例/尺寸来输出zoompan应用了滤镜的视频文件?输入图像可以有任意尺寸(1000x500、4000x3500 等)。

示例命令:

ffmpeg -i input.jpg -filter_complex 'zoompan=z='\''min(zoom+0.0015,1.5)'\'':x='\''iw/2-(iw/zoom/2)'\'':y='\''ih/2-(ih/zoom/2)'\'':d=250,trim=duration=10' -y ouput.pm4
  • 有一个:szoompan 过滤器的选项(来自这里),但看起来我不能使用对原始输入图像大小的引用,只能使用绝对值(例如:s=1000x800
  • 或者,ffmpeg 命令本身有一个-s标志,但是如何设置正确的尺寸?

答案1

根据关注帖子,我们必须手动检查输入的大小。

我们可以使用一些编程来获取输入的分辨率,并相应地调整 FFmpeg 命令。
我知道的最好的方法是使用 Python 脚本。

我设法创建了一个 Windows(非最佳)批处理文件,使用 FFprobe 获取分辨率,并将其存储到环境变量中INPUT_RES

批处理文件示例(适用于 Windows):

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.jpg > log.txt
for /F "tokens=1* delims= " %%i in (log.txt) do set INPUT_RES=%%i
ffmpeg -i input.jpg -filter_complex "format=yuv444p,zoompan=z='min(zoom+0.0015\,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=250:s=%INPUT_RES%,trim=duration=10" -y output.mp4

在 Linux 中它应该更简单,请参阅:如何将变量设置为 Bash 中命令的输出?


如果您希望大小与输入成比例,则可以使用scale过滤器。
应该可以简单地缩放input.jpg为临时图像文件(使用 FFmpeg 缩放过滤器),并获取临时图像文件的分辨率。

相关内容