Как рассчитать FPS из данных в файле .mov? - PullRequest
0 голосов
/ 15 сентября 2018

Я пишу программу на C #, которая читает файл .mov. Я могу проанализировать все это, игнорируя куски, которые я не понимаю, и получая соответствующую информацию от кусков, которые я делаю.

То, что я пытаюсь сделать, это получить FPS из файла, но получить его было непросто. Я предполагаю, потому что формат может хранить много фильмов с разной скоростью.

Если бы кто-то мог указать мне правильное направление, например, на какие куски (атомы) я должен смотреть? Я думал, что это STTS, но не все файлы .mov содержат этот кусок!

1 Ответ

0 голосов
/ 15 сентября 2018

Я ошибся.Атом 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) - это расширение, которое изменяет порядок байтов, так как я читаю .mov на машине с Windows.

...