video - 查找远程媒体文件的视频分辨率和视频持续时间

标签 video ffmpeg vlc samba id3

我想编写一个程序来查找媒体文件的一些元信息。我对流行的视频格式很感兴趣,例如 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/

相关文章:

javascript - 如何在 html5 视频播放器中完成下载后播放视频?

node.js - FFMPEG -ss 复制 .​​m3u8 视频很慢

ios - iOS 上的 MobileVLCKit 问题(夜间构建)

video - MPEG-4 或 Matroska 是否可以实现可变分辨率?

delphi - 如何将电影切成四分之一并在 4 台显示器上显示?

android - FFmpeg - 混合视频和音频时大文件的 ANR

streaming - 使用 VLC 将文件流式传输为 RTSP

java - 将视频从 Java 服务器直播到 Android 客户端的最佳方式?

Android 从视频中剥离音频

c++ - FFmpeg API 示例 (encode_video.c) 无法正常工作