谁能告诉我元数据以常见的视频文件格式存储在哪里?如果它位于文件的开头,或者分散在整个文件中。
我正在使用包含大量视频文件的远程对象存储,并且我想从这些文件中提取元数据,特别是视频持续时间和视频尺寸,而不是将整个文件内容流式传输到本地计算机。
我希望此元数据将存储在文件的前 X 个字节中,因此我可以只获取从开头开始的字节范围而不是整个文件,将部分文件数据传递给ffprobe
.
出于测试目的,我创建了一个 22MB MP4 文件,并使用以下命令仅向 ffprobe 提供前 1MB 数据:
head -c1024K '2013-07-04 12.20.07.mp4' | ffprobe -
它打印:
avprobe version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2007-2013 the Libav developers
built on Apr 2 2013 17:02:36 with gcc 4.6.3
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1a6b7a0] stream 0, offset 0x10beab: partial file
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:':
Metadata:
major_brand : isom
minor_version : 0
compatible_brands: isom3gp4
creation_time : 1947-07-04 11:20:07
Duration: 00:00:09.84, start: 0.000000, bitrate: N/A
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 20028 kb/s, PAR 65536:65536 DAR 16:9, 29.99 fps, 30 tbr, 90k tbn, 180k tbc
Metadata:
creation_time : 1947-07-04 11:20:07
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 189 kb/s
Metadata:
creation_time : 1947-07-04 11:20:07
所以我看到前 1MB 足以提取 9.84 秒的视频持续时间和 1920x1080 的视频尺寸,即使 ffprobe 打印了关于检测部分文件的警告。如果我提供少于 1MB,它会完全失败。
这种方法是否适用于其他常见的视频文件格式以可靠地提取元数据,或者任何常见的格式是否会在整个文件中分散元数据?
我知道容器格式的概念,并且可以使用各种编解码器来表示这些容器内的音频/视频数据。虽然我不熟悉细节。所以我猜这个问题可能适用于容器+编解码器的常见组合?提前致谢。