如何从.mov文件中的数据计算FPS?

时间:2018-09-15 01:20:41

标签: file frame-rate quicktime mov

我一直在用C#编写一个读取.mov文件的程序。我能够解析整个内容,忽略我不理解的块,并从我所做的块中获取相关信息。

我想做的是从文件中获取FPS,但获取它并非一帆风顺。我认为是因为该格式可以以不同的速率存储许多电影。

如果有人可以将我指向正确的方向,例如我应该看哪个块(原子)?我以为是stts,但并非所有.mov文件都包含该块!

1 个答案:

答案 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。