【问题标题】:FFMpeg: scale down videos with maximum width and height while maintaining aspect ratioFFMpeg:在保持纵横比的同时以最大宽度和高度缩小视频
【发布时间】:2021-02-20 23:02:58
【问题描述】:

在我的程序中,用户可以输入他想要的任何视频文件,并将其转码以供社交媒体使用,无论其尺寸和纵横比如何。 “导出配置文件”有很多变量,但这里重要的是 maxheight 和 maxwidth。

FFMpeg 过滤器必须输出符合以下规则的视频:

  • 如果视频是垂直的,则排列 maxheight 和 maxwidth 值(社交媒体将 1280x720 和 720x1280 都视为“720P”)
  • 视频的高度不得高于 maxheight 或宽度不得高于 maxwidth。
  • 原始视频和导出的视频具有相同的宽高比,不会出现失真。
  • 不应发生填充或裁剪。
  • 如果视频已经低于这些最大尺寸(不放大),则不应缩放视频。
  • 即使输入分辨率为奇数,该函数也必须工作。

我已经尝试找到可以做到这一点的过滤器组合,但到目前为止我还没有做到,如果宽高比不正确,视频会失真或出现巨大的黑条,解决方案可能很简单,但我是这个库的初学者,所以我可能只是缺少一个简单的解决方案。

我目前的解决方案:

ffmpeg -i input.mp4 -vf [in] scale=1280:720:flags=lanczos:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1 [res]; [res] format=yuv420p [format] -c:v libx264 -c:a aac -movflags +faststart output.mp4

感谢阅读

【问题讨论】:

    标签: video ffmpeg transcoding


    【解决方案1】:

    我在另一个问题上找到了一个很好的折衷方案,它只缩小视频并将它们缩小到某个最大尺寸(在我的例子中是 max(maxHeight, maxWidth))并且不添加填充、裁剪或失真: 这是过滤器:

    -vf 'scale=if(gte(iw\,ih)\,min(1280\,iw)\,-2):if(lt(iw\,ih)\,min(1280\,ih)\,-2)'
    

    这里是提到的答案:

    Resize videos with ffmpeg - Keep aspect ratio

    它并不完美,但足够好

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2021-02-09
      • 1970-01-01
      • 2011-12-27
      • 2015-05-22
      • 2021-06-23
      • 2015-06-13
      • 2016-01-17
      • 1970-01-01
      相关资源
      最近更新 更多