我一直在用C#编写一个读取.mov文件的程序。我能够解析整个内容,忽略我不理解的块,并从我所做的块中获取相关信息。
我想做的是从文件中获取FPS,但获取它并非一帆风顺。我认为是因为该格式可以以不同的速率存储许多电影。
如果有人可以将我指向正确的方向,例如我应该看哪个块(原子)?我以为是stts,但并非所有.mov文件都包含该块!
答案 0 :(得分:0)
我误会了。 stts原子始终存在,在那里您可以获取信息来计算FPS。以下代码尚未经过全面测试,但确实适用于我拥有的所有.mov文件。
void ReadSTTS(BinaryReader reader)
{
int versionAndFlags = reader.ReadInt32(true);
int nEntries = reader.ReadInt32(true);
int sampleCount = 0;
int sampleDuration = 0;
for (int i = 0; i < nEntries; i++)
{
sampleCount += reader.ReadInt32(true);
sampleDuration += reader.ReadInt32(true);
}
FPS = (float)Math.Round((float)mediaTimeScale / ((float)mediaDuration / (float)sampleCount), 2);
}
mediaTimeScale和mediaDuration都来自mvhd原子。 ReadInt32(true)是扩展名,可更改字节序,因为我正在Windows机器上读取.mov。