以编程方式确定视频文件格式?
时间:2020-03-06 14:29:47 来源:igfitidea点击:
好的,我了解了视频格式的基础知识,有一些容器格式,然后我们有了核心的视频/音频格式。我想编写一个基于Web的应用程序,用于确定文件使用的视频/音频编解码器。
如何最好地以编程方式确定视频编解码器?最好通过系统调用使用标准库并解析其输出吗? (例如ffmpeg,转码等?)
解决方案
mplayer -identify将解决问题。只需在文件上调用ffmpeg也会起作用-不管我们要让ffmpeg实际执行什么操作,它都会在开始时自动打印有关输入文件的一组信息。
当然,如果我们想从程序中执行此操作而无需对外部程序执行exec调用,则只需包含avcodec库并直接运行其自己的识别例程即可。
尽管我们可以实现自己的检测,但是鉴于libav *支持的格式数量非常之多,它肯定不如现有的例程。重新发明轮子将是一个相当愚蠢的案例。
Linux的"文件"命令也可以解决这个问题,但是它输出的数据量取决于视频格式。例如,在AVI上,它提供有关分辨率,FOURCC,fps等的各种数据,而对于MKV文件,它仅显示" Matroska数据",不告诉我们任何内部信息,甚至不告诉我们所使用的视频和音频格式。
我们需要从线下开始。我们需要了解容器格式及其如何指定编解码器。
因此,我将从识别容器格式的程序开始(不只是从扩展名开始,进入标头并确定实际的容器)。
然后确定程序将支持哪些容器,并放入解析存储在容器中的元数据所需的功能,其中将包括编解码器。
-亚当
我们确实希望大型二进制标识标记数据库在文件开头附近进行查找。幸运的是,问题被标记为" Linux",并且那里已经存在这样的数据库。 file(1)将为我们完成这项工作。
我在perl脚本中使用FFMPEG来实现此目的。
$info = `ffmpeg -i $path$file 2>&1 /dev/null`; @fields = split(/\n/, $info);
只需找出@fields中需要提取的项目即可。