如何使用FFmpeg缩放图像并指定所需的帧率?

6
我正在使用ffmpeg将mp4视频转换为PNG图像。
我希望每秒20帧,并且还希望将图像放大至1920x1080。原始的mp4视频是240p(426x240)大小。
它可以在-vf标志之后指定20 fps,但无法调整图像大小。
ffmpeg -i 240_video.mp4 -vf scale=1920:1080 fps=20 240_scaled/out%d.png

如果我不加上scale=1920:1080,命令就可以工作,但是当然我得到426x240像素的图片。
1个回答

12

您可以使用逗号将线性滤波器串联在一起:

ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:1080" 240_scaled/out%d.png
  • 如果您的输入帧率超过20fps,则FFmpeg将删除帧以将其转换为20fps。如果您的输入帧率少于20fps,则FFmpeg将复制帧以将其转换为20fps。如果您想保留所有帧,则省略fps过滤器。
  • 我首先使用fps过滤器,因为在这种情况下,假设您的输入帧率高于20fps,则它将比先进行缩放更有效和更快,因为帧将在缩放过滤器之前被丢弃。

许多播放器不喜欢输出结果,因为它不是4:2:0格式,所以您可以添加format过滤器

ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:1080,format=yuv420p" 240_scaled/out%d.png

保持宽高比的情况下,将426x240升级为1920x1082或1917x1080,因此需要添加padcrop以进行补偿。或者参考缩放中的force_original_aspect_ratio选项。添加setsar以避免出现奇怪的SAR。-movflags +faststart被添加以供渐进式播放使用。

ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:-1,crop=1920:1080,setsar=1,format=yuv420p" -movflags +faststart 240_scaled/out%d.png

我最近得到了一个类似的问题,但我最终使用了 zoompan:https://dev59.com/atH7oIgBc1ULPQZFdANt#75056453 - Highmastdon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接