我想编写一个程序来查找媒体文件的一些元信息。我对流行的视频格式很感兴趣,例如 avi、mkv、mp4、mov(也可能是其他流行的)。我基本上想得到:
- 视频大小(720、1080、360 等)
- 视频的总运行时间(可能不是很准确)
- 音频流数量
- 视频编解码器名称
- 音频编解码器名称
已经有 mediainfo ,但在我的程序中,我想获取有关远程文件的信息,可以通过 ftp、http、samba 访问这些文件;甚至 torrent(有一些 torrent 解决方案,允许读取尚未下载的文件)。
MediaInfo 库不支持 samba (smb://) 和 mkv 格式(用于运行时)。
另外,我想知道,需要下载多少数据才能获得这些信息。我不想下载完整的视频文件,因为我没有足够的磁盘空间。
此信息是在文件的前 1、10 或 100 KB 中吗?如果我知道容器名称和总文件大小,它是否处于可预测的偏移量?
PS:平台是Linux,语言是C/C++
最佳答案
不,您无法从文件的“前 X 字节”(对于小于媒体文件完整大小的任何已知 X 值)找到您要查找的信息。一些容器在标题中列出了所有这些信息。有些(如 QuickTime)在文件末尾有元数据,元数据偏移量在文件头中。有些(如 AVI)在 header 中列出了流偏移量,每个流的 header 中都有特定的流信息(即分散在整个文件中)。有些根据编码方法使用不同的样式(例如,快速流式传输与即时编码)。
也就是说,理论上可以通过请求适当的字节范围来完成您正在寻找的事情。例如,请求前 10K 左右,并根据容器类型解析出您需要读取/解析的其他字节范围以查找元数据。但这将是一个相当大的项目。
关于video - 查找远程媒体文件的视频分辨率和视频持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958988/