【发布时间】:2020-06-02 09:50:08
【问题描述】:
我想在 android 中获取视频的宽高比(1:1、9:16 等)。目前我得到视频的高度和宽度,但我想要纵横比。使用 Ffmpeg 或 MediaMetadataRetriever 是否可以执行此任务?如果是,那么请给我一些示例代码。如果没有,请向我推荐其他解决方案。
【问题讨论】:
标签: android video ffmpeg mediametadataretriever
我想在 android 中获取视频的宽高比(1:1、9:16 等)。目前我得到视频的高度和宽度,但我想要纵横比。使用 Ffmpeg 或 MediaMetadataRetriever 是否可以执行此任务?如果是,那么请给我一些示例代码。如果没有,请向我推荐其他解决方案。
【问题讨论】:
标签: android video ffmpeg mediametadataretriever
纵横比只是高度与宽度的比率* - 你可以得到那些我认为你正在寻找的只是一种将它们降低到最低比率的方法。
这是一个常见的数学练习 - 您将每个数字除以它们的最大公约数,这是可以同时分为两个数字的最大公约数 (https://en.wikipedia.org/wiki/Greatest_common_divisor)。
在 Java 中有一个很好的例子,在这里你可以使用递归模除法:https://stackoverflow.com/a/4009247/334402
总之你:
(*) 更新。实际上@llogan 的非常好的答案包括 SAR 和 DAR 纵横比。样本纵横比 SAR 是原始源纵横比,而显示纵横比是要显示的视频的纵横比。有时您可能还会看到第三个术语,像素纵横比,即 DAR 除以 SAR。我怀疑它仍然是您感兴趣的 DAR,因此您使用的高度和宽度方法仍然适用。
【讨论】:
$ 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-Output 和 mediainfo --Info-Parameters。
【讨论】: