Jave从文件中读取视频/音频编解码器

时间:2013-10-29 13:05:04

标签: java file video io

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我认为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)
...

答案 2 :(得分:0)

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

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

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