0

我想在android中获得nay视频的纵横比(1:1、9:16等)。目前我得到视频的高度和宽度,但我想要纵横比。使用 Ffmpeg 或 MediaMetadataRetriever 是否可以执行此任务?如果是,那么请给我一些示例代码。如果不是,那么请向我推荐其他解决方案。

4

2 回答 2

3

ffprobe

$ 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

于 2020-02-18T18:37:42.180 回答
0

纵横比只是高度与宽度的比率* - 因为你可以得到那些我认为你正在寻找的只是一种将它们降低到最低比率的方法。

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

在 Java 中有一个很好的例子,在这里你可以使用递归模除法:https ://stackoverflow.com/a/4009247/334402

所以总而言之,你:

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

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

于 2020-02-18T17:33:58.247 回答