Рассинхрон видео и звука в телевещании

ГЦП

Предисловие:

Так случилось в нашей стране, что все дружно решили перейти на цифровое ТВ. Это без спорно удобно. И качество картинки сильно лучше, не шумит. И частотный ресурс экономит. Ну посудите сами: 20 каналов помещается в 2 пакета (мультиплекса), а значит, занимает всего две частоты против 20 при аналоговом вещании. Просто песня в общем. Конечно есть и минусы, но речь сегодня пойдет не об этом.

И так, в процессе перехода “на цифру”, наша телекомпания тоже озадачилась модернизацией. Так что нас, как филиал, кинулись обновлять со всей силой. Как результат: новое оборудование, комплекс, столы и конечно новый тех.процесс и новые проблемы (куда же без них). И первая же проблема, после ввода в эксплуатацию, как Вы догадались, синхронизация звука с видео. Не сказать, что эта проблема нова, она встречалась и в аналоговых трактах, но в цифровых системах она стала еще актуальней.

Глава 1 «Николаич, а чего эта диктор губами шлёпает?»

С этого странного вопроса от моего подчинённого инженера, началась первая неделя нашего вещания на новом комплексе. В голове еще пробежала мысль «Ну шлёпает и чего? Какая мне не всё равно, чем она там занимается? Вообще не мой отдел!». Но потом, подойдя в аппаратную, увидел «какая именно не всё равно». В эфире диктор читала новости, но вот ощущение, что она просто издевательски шлёпает губами, а новость читает кто-то за кадром, меня не покидала весь выпуск. Сомнений нет, это не шутка от выпускающей бригады, это недосмотр наш, инженерный. После выпуска «под хреново сведенную фонограмму» начали прогонять весь тракт аппаратно – студийного блока (АСБ). Упёрлись в оконечный эмбеддер, много думали… Всё дело в том, что в таких системах звук и видео часто “ходят” разными путями. К примеру, в АСБ, видео направляют в видеомикшерный пульт режиссёра, а звук деембедируют из сигнала SDI и направляют в аудиомикшерный пульт звукорежиссёра.

После обработки и микширования сигналы встречаются в эмбеддере и идут в месте до “конца”. Но как раз тут и начинаются истории. Тут звук перекодировался так, там видео прошло сяк, в итоге никто не гарантирует что звук и видео придут в эмбеддер правильно, и никто не опоздает. И производители оборудования это знают и предусмотрели такие исходы дел. Так в аудиомикшере присутствует параметр “задержка”, который можно покрутить и всё станет на свои места. И, казалось бы, истории конец, но нет… Начитаются частные случаи.

В наших кругах синхронность аудио и видео называют Lip-Sync или AV Delay. Так вот, когда мы нашли причину (а это был видеомикшерный пульт), то и нашли тут же решение. Выставить задержку на аудиомикшере и вернуть липсинк в норму. Но когда вопрос встал «а на сколько задержать то?» тут все и замолчали. Будучи занудой инженером, я не приемлю измерения «на глаз». Проконсультировались с головным офисом и получили тот же «богомерзкий» ответ: «контролируйте визуально или записывайте тестовый сигнал со вспышками и раскладывайте на таймлане Adobe Premier». Ну приехали…

Глава 2 «яж инженер!»

Оценив советы и масштабы проблемы, приняли решение «прокастылить» на глаз, т.к. писать и смотреть на таймлайне не реально долго, и никто не даст нам столько времени, но проблему не закрывать. Долго изучая проблему, я выяснил много интересного. Ну, во-первых, читая эти ваши интернеты, пришел к выводу: за рубежом эту проблему знают и борются с ней специальными функциями в устройствах, называемых растерайзерами и телевизионными осциллоскопами. Во-вторых: как и всё оборудование в броадкастинге, такие штуки мало того, что не дешевые, так еще и частенько просят доп. лицензию за эту функцию отдельно. Так что в России решили не тратиться на эту проблему и вообще о ней особо не думать. «На глаз» – самое оно! К слову, в нашем растерайзере так же не оказалось этой лицензии и покупать её оказалось слишком не выгодно. Но слабоумие и отвага энтузиазм и любовь к своему делу – наше всё, так что мне пришла в голову идея разработать свое дешевое решение проблем липсинка.

Начнём с того, кто сигнал нашего тракта SDI нужно чем-то принять. Самое дешевое решение по таким платам захвата оказалось у компании BlackMagic design. А если вспомнить, что у меня от старого комплекса оставалось пара их плат, так это вообще единственный вариант. Вооружившись платой DeckLink Studio, Desktop Video SDK и Visual Studio, принялся писать софт.

Концепция выстрадана следующая:

  1. Для начала принимаем тестовый сигнал. Например, формируемый генератором SPG, тест. Он представляет собой чёрное поле и периодические белые вспышки с одновременным всплеском по аудио каналу. В окне предпросмотра программы нам нужно выбрать, какую именно область экрана мы измеряем. (Почему так сложно? Да потому, что вместо тестового сигнала с генератора, мы сможем использовать любой самодельный метроном на Arduino например. Светодиод, пищалка и микроконтроллер. Ставим перед телекамерой и вуаля! Мы уже измеряем участок тракта от камеры к комплексу).
  2. Далее запускаем измерение и программа ждёт вспышку по видео и по звуку. Как только вспышки пришли, записывается время. Когда всё время зафиксировано, программа вычитает одно из другого и выдает сколько миллисекунд прошло. Если время не равно нулю, то нужно покрутить коррекцию. Таким образом мы компенсируем задержки платы, «windows» и прочие, опираясь на эталонный сигнал.
  3. Скорректировав в 0, можно подавать этот сигнал в нужный нам участок тракта и измерять задержки сигнала на конкретном участке тракта.

Однажды, один умный человек мне сказал: «не пиши программы, которые уже были кем-то написаны». Мудрое замечание, а по тому за основу своего софта я взял пример из SDK. Большая часть обвязки уже готова. Мне нужно было написать и внедрить туда класс измерений, а также адаптировать весь пример под свои нужды. Сказано – сделано. Пару месяцев чтения, гугления и программирования, и программа вышла на стадию бета теста. На скриншоте ниже я специально рассинхронизировал сигнал на 12 кадров. Программа выдавала 12-13 кадров:

Эпилог «а че, еще и считать нада???»

После всех этих мытарств, пришел день, когда я запустил своё изобретение в нашем тракте. Оказалось, что «на глаз» не совсем корректно (Удивительно, правда?). А именно: мы выставили задержку 120 миллисекунд, что при нашем формате сигнала (1080i50) выглядело как 1000ms/25fps=40 миллисекунд в 1 кадре. Т.е. 120/40= 3 кадра. После измерений задержку увеличили до 5 кадров. Т.е. среднестатистический человек практически не замечает нарушение в 1-2 кадра.

P.S. Программу я продолжаю потихоньку «вылизывать» и на всякий случай обвязал её лицензией. Вдруг кто то купить захочет. В общем, пользоваться своими мозгами правильно – наш девиз…

Добавить комментарий

Ваш адрес электронной почты не будет опубликован.Обязательные поля помечены *

* Все комментарии проходят предмодерацию.