Time Base - это единица времени, в которой ведется счет в потоке. Вместо того чтобы хранить метки времени в секундах, медиафайл считает в тактах своих собственных часов, а Time Base определяет, сколько длится один такт. Она записывается как дробь секунды.
Какие файлы его содержат и откуда берется значение
Параметр Time Base есть у отдельных потоков внутри медиафайла - изображения, звука и любых субтитров в потоках MP4, MOV, MKV, WebM, AVI и MPEG transport stream, а также в отдельных аудиофайлах. У каждого потока своя Time Base, поэтому звук и видео в одном файле обычно считают в разных единицах.
Значение выбирает кодировщик или программа, которая собрала файл. Некоторые контейнеры требуют определенную Time Base и жестко ее задают; если формат оставляет выбор открытым, программа записи подбирает значение под содержимое, и файл может просто нести значение по умолчанию этой программы.
Как выглядит это значение
Это всегда дробь, и число в знаменателе - это количество тактов в секунду:
1/1000- одна миллисекунда на такт, обычный выбор для файлов Matroska и WebM1/90000- давно применяется в потоках MPEG transport stream1/48000- аудиопотоки часто считают в сэмплах, поэтому Time Base совпадает с частотой дискретизации1/12800- значение, часто встречающееся у видеопотоков в файлах MP4
Чтобы перевести метку времени в секунды, умножьте ее на дробь. Метка времени воспроизведения 12800 в потоке с Time Base 1/12800 соответствует ровно одной секунде; при Time Base 1/1000 метка 3500 соответствует трем с половиной секундам. Поэтому «сырые» метки времени в отчете выглядят как огромные числа - это количество тактов, а не секунд. Более старые приложения также могут выводить отдельную строку Codec Time Base рядом с этой.
Почему это важно
Все события в медиафайле происходят в целом количестве тактов, поэтому Time Base задает максимально точный шаг времени, который поток может выразить. Если кадр или сэмпл попадает между двумя тактами, его метка времени должна быть округлена, и ошибки округления накапливаются.
Это становится реальной проблемой при частотах кадров, которые не являются целыми числами. При вещательной частоте 30000 кадров за 1001 секунду один кадр длится чуть больше 33 миллисекунд, но не целое количество миллисекунд, поэтому миллисекундная Time Base не может разместить ни один кадр точно. Time Base с большим числом тактов в секунду, то есть с большим знаменателем дроби, может точно попасть на каждую границу кадра, поэтому кодировщики предпочитают значения вроде 1/12800 или 1/90000 вместо простых миллисекунд.
Последствия проявляются как ошибки тайминга, а не как что-то, видимое на отдельном кадре: звук постепенно уходит из синхронизации с изображением, интервалы между кадрами становятся неравномерными, разрез или переход попадают чуть мимо. При склеивании файлов, чьи потоки считают время в разных Time Base, все метки времени нужно пересчитать, и это классический источник ошибок синхронизации. Само поле не влияет на качество изображения или звука и не содержит персональных данных.