FFMpeg: 使用最大宽度和高度按比例缩小视频

3
在我的程序中,用户可以输入任何视频文件,并将其转码为社交媒体所需的格式,无论其尺寸和宽高比如何。 "导出配置文件" 有许多变量,但这里重要的是 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

感谢阅读

1个回答

3

我在另一个问题上找到了一个相当不错的折衷方案,它只缩小视频,并将它们缩小到一定的最大尺寸(在我的情况下是maxHeight和maxWidth中的最大值),而不会添加填充、裁剪或失真:

以下是该过滤器:

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

以下是提到的答案:

使用ffmpeg调整视频大小-保持纵横比

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


如果输入文件(显然采用不同的编码)的尺寸既低于最大值,又不能被2整除,那该怎么办? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接