4 августа 2013 г.

Что делать при рассинхронизации аудио и видео в MPEG-2? (3)

Что ж, звук мы извлекли. У нас получился аудио-файл с расширением mp2.

Сам способ обработки звукового файла я подсмотрел у одного англоязычного доброго человека (и вы можете обратиться к первоисточнику). Так как способ мне подошел, то я спешу поделиться им с вами. Заключается он в ресэмплировании (изменении частоты дискретизации) звука в файле так, чтобы длительность звука совпадала с длительностью видео.

Сразу скажу, речь идет не о такой синхронизации в которой звук опережает или отстает от видео с неизменной разницей. Я имею в виду рассинхронизацию, при которой звук в начале видео совпадает с картинкой, но к концу видео начинает все больше и больше отставать или спешить.

Поэтому перед тем, как мы ресэмплируем наше аудио, нам нужно узнать разницу, на которую нужно сделать поправку.


Вычисляем разницу в рассинхронизации между видео и аудио


Сначала вам нужно разобраться звук опережает видео или наоборот отстает от него. Для этого проиграйте конец оригинального видео и обратите внимание на какой визуально различимый звук и отметьте, когда он имеет место.

Скажем, хлопок на видео происходит в 1:30:45. А звук хлопка звучит в 1:30:51. То есть сначала вы видите хлопок, а затем слышите его. Значит звук отстает на 6 секунд. И значит в следующей формуле это число нужно будет прибавить (+6). Ну, если наоборот, то звук опережает видео. И значит в следующей формуле это число нужно будет отнять (-6).

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

Например, оно длится 1:36:32, то есть, в секундах - это 1*3600 + 36*60 + 32 = 5792

А вот и формула:
  • Если звук отстает: (длительность видео в сек + разница рассинхронизации) / (длительность видео в сек) * (частота дискретизации)
  • Если звук опережает: (длительность видео в сек + разница рассинхронизации) / (длительность видео в сек) * (частота дискретизации)
То есть вам нужно:
  1. взять длительность видео в секундах
  2. добавить к ней или отнять от нее разницу
  3. результат разделить на длительность видео в секундах
  4. и новый результат умножить на частоту дискретизации вашего аудио
Частота дискретизация обычно это либо 44 100 герц или 48 000 герц (мой случай).

(Узнать эту частоту вы можете современных медиа-плеерах для ПК. Я, например, запустил свой оригинальный аудио файл mp2 в AIMP, и он мне показал, что его частота была 48 000 герц. Есть специальные тулзы, которые показывают такую инфу о медиа файлах. Да и по нашему методу ее можно узнать по ходу.)

Итак, скажем у нас имеется видео длительностью 5792 секунды, звук отстает от картинки на 6 секунд (значит, +6), частота дискретизации звука у нас, скажем, 48 000 герц.

Таким образом вычисляем новую частоту для ресэмплирования по такой формуле:

(5792 + 6) / 5792 * 48000 = (почти) 48050 герц

(Для самопроверки: при отставании звука - частота должна получится больше оригинальной, при опережении - меньше)

Итак, мы получили заветное число - 48050, и в следующем сообщении я расскажу, куда его можно засунуть, что с ним делать.

(продолжение следует...)

Комментариев нет:

Отправить комментарий