获取任何视频的纵横比

Getting the aspect ratio of any video

我想获取 android 中任何视频的宽高比,例如(1:1、9:16 等)。目前我得到了视频的高度和宽度,但我想要纵横比。使用 Ffmpeg 或 MediaMetadataRetriever 可以完成此任务吗?如果是,请给我一些示例代码。如果不是,那么请建议我其他解决方案。

宽高比只是高度与宽度的比值* - 正如您可以获得的那样,我认为您正在寻找的只是一种将它们降低到最低比率的方法。

这是一个常见的数学练习 - 您将每个数字除以它们的最大公约数,这是将同时分为两个数字的最大数字 (https://en.wikipedia.org/wiki/Greatest_common_divisor)。

Java 中有一个很好的例子使用递归模数除法在这里你可以使用:

总之你:

  • 获取高度和宽度(例如 1500、500)
  • 求出它们的最大公约数 gcd(本例中为 500)
  • 将 gcd 分为两个数字,得到纵横比的最低项(本例中为 3:1)

(*) 更新。实际上@llogan 的非常好的答案包括 SAR 和 DAR 纵横比。样本宽高比 SAR 是原始源宽高比,显示宽高比是视频的宽高比,因为它旨在显示。有时您可能还会看到第三个术语,即像素长宽比,即 DAR 除以 SAR。我怀疑它仍然是您感兴趣的 DAR,因此您使用的高度和宽度方法仍然适用。

ff探测器

$ ffprobe -loglevel error -show_entries stream=sample_aspect_ratio,display_aspect_ratio -of default=nw=1 input.mkv 
  sample_aspect_ratio=115:87
  display_aspect_ratio=1840:783

这将同时提供 SAR 和 DAR。

媒体信息

$ mediainfo --Output="Video;%DisplayAspectRatio%,%DisplayAspectRatio/String%,%PixelAspectRatio%,%DisplayAspectRatio_Original%,%DisplayAspectRatio_Original/String%" input.mkv 
  2.350,2.35:1,1.322,1.778,16:9

如本例所示,有多种纵横比可供选择,并且可以以多种形式显示,例如16:9或1.778。

有关详细信息,请参阅 mediainfo --Help-Outputmediainfo --Info-Parameters