【问题标题】:How to tell from a media file if it's a video or an audio? [duplicate]如何从媒体文件中判断它是视频还是音频? [复制]
【发布时间】:2021-05-27 15:57:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 查看重复链接Using ffprobe to check if file is audio or video only。不需要jq 或其他附加解析工具,如下面的答案所示,因为您可以让ffprobe 仅输出您需要的信息。
  • 是的,它似乎是重复的。但是,我想指出,当我发布问题时,我在上面的信息中找不到问题,我花了几次时间搜索它。虽然我不知道 ffprobe 能够做到这一点,但我知道如果可能的话,我想在不将文件下载到服务器的情况下做到这一点。最后我也没有尝试过 jq,只是从响应中得到了信息。

标签: amazon-s3 audio video ffmpeg aws-media-convert


【解决方案1】:

你可以使用

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。

【讨论】:

  • 我明白了,我想这是我需要的,但我会先检查一下,然后再回来找你
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
相关资源
最近更新 更多