如何解决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 举报,一经查实,本站将立刻删除。