微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从媒体文件中判断它是视频还是音频?

如何解决如何从媒体文件中判断它是视频还是音频?

我有一些文件 - 音频和视频文件 - 存储在 aws s3 存储桶中,其中可以有不同的容器和内容,我想将它们发送到 aws mediaConvert(MC)。我的问题是我需要知道文件是音频还是视频文件,因为我需要相应地配置 MC。服务器上的主应用程序是基于 PHP 的,但这些信息可能不是那么有趣。

我有 ffmpeg,并且我已经使用 ffprobe 来获取文件持续时间,但是我无法从返回的数据中判断它是视频文件还是纯音频文件in an another question 有人说,也许我可以通过使用 ffmpeg 来获取此信息,但据我所知,这需要我将文件从 s3 下载到服务器。 还有一个 s3 函数,我可以使用它来获取特定对象的标题,其中包含文件的 mime 类型,但是这有时会作为视频文件的音频/mpeg 返回,然后错误地配置 MC。

我还可以检查来自 MC 的第一个作业创建的错误消息,然后它告诉我问题,我可以使用正确的配置重新发送文件,但随后作业被标记为失败并出现错误,这不会感觉不对。

所以我的问题是; 从媒体文件中判断它是视频还是音频的最佳方法是什么? ffmpeg 或 ffprobe 可能可以远程完成,但我对这些工具的了解不够深入,所以我不完全确定它只能按照我描述的方式工作。

解决方法

你可以使用

ffprobe -v quiet -print_format json -show_format -show_streams sample.mp4

上述命令输出输入文件的(此处:sample.mp4)参数以及音频和视频流的详细信息。您可以看到示例输出 here

您感兴趣的是通过 .streams[].codec_type 来确定输入文件是否仅包含音频、视频或两种流。您可以为此使用 jq,例如:

ffprobe -v quiet -print_format json -show_format -show_streams sample.mp4 | jq .streams[].codec_type
"video"
"audio"

或以任何其他方式解析输出 JSON。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。