Facebook ввел новую единицу времени
Флик позволяет идеально синхронизировать видео и аудио
Американский проект Facebook Open Source разработал библиотеку для языка программирования C++, с помощью которой в код можно добавить новую единицу измерения времени – флик. Об этом сообщает N+1.
Библиотека и описание новой единицы доступны на странице проекта на GitHub. Разработчики утверждают, что новая единица времени позволяет идеально синхронизировать видео и аудио, кроме неудачного стандарта NTSC.
В большинстве существующих сегодня языков программирования отсчет времени ведется в миллисекундах (одна тысячная секунды). При этом в C++ для работы с видео и аудио и их синхронизации программистам приходится оперировать с десятичными долями секунды, высчитывая такие интервалы, которые бы привязывали определенное место аудиозаписи к определенному кадру.
Из-за того, что видео и аудио используют разные скорости смены данных, иначе называемые частотами обновления, добиться идеальной синхронизации звука и картинки удается не всегда. Именно по этой причине Facebook Open Source и предложил использовать в C++ новую единицу времени, которую еще в октябре 2016 года придумал сотрудник проекта Кристофер Хорват.
Новая единица измерения времени в C++ получила название флик, которое образовано от двух слов – frame (кадр) и tick (счет, пометка). С разговорного английского слово flick можно перевести как фильм. Один флик равен 1/705600000 секунды, или 1,417 наносекунды. Именно такая единица времени, уверяют в Facebook, позволяет идеально синхронизировать любые существующие частоты видео и аудио.
Например, распространенные для распространенных частот 24 и 25 кадров в секунду длительность каждого кадра можно измерить в понятных и целых 29400000 и 28224000 фликов. Для рапида с частотой 192000 кадров в секунду временная продолжительность одного кадра составит 3675 фликов. Эти флики можно точно синхронизировать с фликами, рассчитанными для "кадров" аудио популярных частот от 8 до 192 килогерц.
При использовании стандартных подходов к делению времени при синхронизации аудио и видео в C++ длительность показа одного кадра при частоте 24 кадра в секунду составила бы 41,666666 миллисекунды. Производить математические вычисления с такими числами неудобно, а попытки их округлить при большой продолжительности видео будут давать нарастающую рассинхронизацию с аудио.