0

我有一个混合视频文件的文件夹(网络显示 mp4、ogv、webm 的多种格式)。在 Java 中检索这些文件时,我可以通过从文件名中提取扩展名来验证格式。有没有办法从文件中检索其他信息,例如视频和音频编解码器数据?

为了创建文件,我在 Java 中使用 ffmpeg 将视频文件转码为我需要的格式和大小,因此在创建文件时我确实知道编解码器信息。如果它没有自动存储在文件中的某个位置,有没有办法设置元数据或其他东西并手动存储信息以便我以后可以检索它?我没有使用数据库来存储文件位置或其他数据,只是简单地从文件系统中扫描和检索。

4

3 回答 3

2

我认为ffmpeg可以从您指定为ffmpeg实用程序源的文件中自动获取视频和音频格式。

如果您需要将元数据用于其他目的,那么您可以尝试 Red5 服务器源 (java)。有很多阅读器(包括MP4Reader)可用于获取元数据。

例如,对于mp4文件MP4Reader,在类构造函数中扫描整个文件,然后您可以从第一个标签中获取元数据:

reader = new org.red5.io.mp4.impl.MP4Reader(myFile)
String v = reader.getVideoCodecId();  // e.g. "avc1" (for h.254), "VP6F"
String a = reader.getAudioCodecId();  // e.g. "mp4a" (for aac), ".mp3" (for mp3)
...
于 2013-12-04T15:58:44.717 回答
1

据我所知,没有简单的方法可以按内容确定文件类型。您必须做出假设,然后用代码测试这些假设(例如,我认为它是 X 类型,所以我将检查前 Y 字节中始终存在于 X 类型文件中的模式。)

于 2013-10-29T13:07:34.883 回答
0

视频和音频数据流(例如 H.264/AVC 视频、AAC、杜比数字音频等)在称为容器格式的文件格式中一起复用(或“复用”)。MP4 就是这样一种容器格式,旨在能够容纳许多不同类型的视频和音频流(有关一些正式注册的类型, 请参见http://www.mp4ra.org/codecs.html )。

不同的容器格式具有标识所包含的不同媒体流的元数据,以便帮助确定应该使用哪种类型的解码器来解码特定的媒体流。

如果可以(您说您使用的是 Java),请尝试使用ffprobe来确定媒体文件(以及其他元数据)中使用的容器、视频和音频格式。对于所有媒体类型,它可能不是 100% 可靠的(因为它可能无法识别一些),但考虑到您使用 ffmpeg 编码(ffprobe 是一个 ffmpeg 派生工具),它应该可以完成这项工作。

于 2013-10-29T22:03:38.870 回答