ffmpeg - 如何使用 ffmpeg 缩放图像并指定每秒所需的帧数?
问题描述
我正在使用 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 的图像。
解决方案
您可以将线性过滤器与逗号链接在一起:
ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:1080" 240_scaled/out%d.png
- 如果您的输入超过 20 fps,则 ffmpeg 将丢帧以转换为 20 fps。如果您的输入低于 20 fps,则 ffmpeg 将复制帧以转换为 20 fps。如果您希望所有帧都保持原样,请忽略 fps 过滤器。
- 我首先使用了fps 过滤器,因为在这种情况下,假设您的输入帧速率高于 20 fps,它会比首先缩放更有效和更快,因为帧将在缩放过滤器之前被丢弃。
很多玩家不喜欢输出,因为它不是 4:2:0,所以你可以添加格式过滤器:
ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:1080,format=yuv420p" 240_scaled/out%d.png
426x240 放大,同时保持纵横比实际上是 1920x1082 或 1917x1080,所以添加填充或裁剪来补偿。或参考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
推荐阅读
- gstreamer - gstreamer:将录制从一个文件切换到另一个文件
- python - Y_Test的python机器学习预测中的关键错误
- java - 如何限制 Java 中的“新 Scanner(System.in)”系统,不进一步处理用户输入数据,除非它是正确的输入值?
- swift - “非持久性”S4TF 安装
- json - 如何使用 ELK(Eclipse 布局内核)图将节点定位在同一级别
- maven - 配置文件中的依赖版本
- qt5 - 如何将 QGraphicsScene 上的绘画限制在特定区域?
- node.js - 如何将对象推送到 Mongoose 对象子数组
- r - 将时间戳间隔更改为更小的步长
- amazon-web-services - 有没有办法从 CodeDeploy 部署掌舵图?