【问题标题】:How to use ffmpeg to scale image AND to specify desired frames per second?如何使用 ffmpeg 缩放图像并指定每秒所需的帧数?
【发布时间】:2020-03-28 01:12:32
【问题描述】:

我正在使用 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 png mp4


    【解决方案1】:

    您可以将线性过滤器与逗号链接在一起:

    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 filter,因为在这种情况下,假设您的输入帧速率高于 20 fps,它会比首先缩放更有效和更快,因为帧将在scale filter 之前被丢弃。李>

    很多玩家不喜欢这个输出,因为它不是 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
    

    【讨论】:

      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      相关资源
      最近更新 更多