Time Base - це одиниця часу, в якій рахується потік. Замість того щоб зберігати часові мітки в секундах, медіафайл рахує тики власного годинника, а Time Base визначає, скільки триває один тик. Вона записується як дріб від секунди.
Які файли містять це значення і звідки воно береться
Time Base є у кожного окремого потоку всередині медіафайлів: зображення, звуку та будь-яких субтитрів у MP4, MOV, MKV, WebM, AVI та MPEG transport streams, а також у окремих аудіофайлах. Кожен потік має свою власну Time Base, тому аудіо та відео в одному файлі зазвичай рахуються в різних одиницях.
Значення обирає енкодер або програма, що зібрала файл. Деякі формати контейнерів вимагають певну Time Base і жорстко її задають; якщо формат залишає вибір відкритим, програма запису обирає значення, яке відповідає вмісту, і файл може просто містити значення за замовчуванням цієї програми.
Як виглядає значення
Це завжди дріб, а число в знаменнику - це кількість тиків на секунду:
1/1000- одна мілісекунда на тик, звичайний вибір у файлах Matroska та WebM1/90000- давно використовується в MPEG transport streams1/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, означає, що всі часові мітки потрібно перерахувати, і це перетворення є класичним джерелом помилок синхронізації. Саме по собі це поле не впливає на якість зображення чи звуку і не містить персональних даних.