如何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
- 有一个
:s
zoompan 过滤器的选项(来自这里),但看起来我不能使用对原始输入图像大小的引用,只能使用绝对值(例如: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 缩放过滤器),并获取临时图像文件的分辨率。