在我的程序中,用户可以输入任何视频文件,并将其转码为社交媒体所需的格式,无论其尺寸和宽高比如何。 "导出配置文件" 有许多变量,但这里重要的是 maxheight 和 maxwidth。
FFMpeg 过滤器必须输出遵循以下规则的视频:
- 如果视频是竖直的,请交换 maxheight 和 maxwidth 值(社交媒体将 1280x720 和 720x1280 视为“720P”)。 - 视频的高度不能超过 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
感谢阅读