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

问题描述 投票:0回答:1

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

我要做的是从文件中获取FPS,但获得它并不是直截了当的。我假设因为格式可以以不同的速率存储许多电影。

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

file frame-rate quicktime mov
1个回答
0
投票

我误解了。 stts atom始终存在,这是您获取计算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 atom。 ReadInt32(true)是一个更改字节序的扩展,因为我正在Windows机器上读取.mov。

© www.soinside.com 2019 - 2024. All rights reserved.