微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FFMpeg:在保持纵横比的同时缩小视频的最大宽度和高度

如何解决FFMpeg:在保持纵横比的同时缩小视频的最大宽度和高度

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

感谢阅读

解决方法

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

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

这里是提到的答案:

Resize videos with ffmpeg - Keep aspect ratio

虽然不够完美,但已经足够了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。