Как получить точную задержку между звуком и видео с помощью ffmpeg?

Как получить точную задержку между звуком и видео с помощью ffmpeg?

Я знаю, как установить задержку с помощью -itsoffsetфлага ffmpeg, но мне хочется узнать, как получить и установить точное время задержки.

решение1

Если между видео и аудио потоком есть внутренняя задержка, нет простого способа узнать это. Предположим, вы создаете аудиовизуальный файл, в котором аудио поток был намеренно смещен с помощью itsoffset. Это приведет к изменению временных меток аудио презентации относительно видео.

Допустим, это оригинал, предполагающий три аудиокадра на видеокадр (что на практике слишком мало):

V1       V2          V3    ...
A1 A2 A3 A4 A5 A6 A7 A8 A9 ...

Аудиокадры будут иметь временные метки A1 = 0, A2 = 1, A3 = 2 и т. д.

Теперь вы задерживаете аудиопоток:

V1       V2          V3    ...
xx xx xx A1 A2 A3 A4 A5 A6 ...

Здесь первые три пустых образца будут иметь временные метки 0, 1 и 2, а A1 — 3. Для игрока это означает, что V2 и A1 принадлежат друг другу, и в этом нет ничего плохого.

Если вы хотите оценить начальное смещение, вам придется вручную проверить аудиопоток или использоватьsilencedetectдля определения периода между началом потока и первым аудиосэмплом, содержащим информацию, но это работает только если аудиопоток начинается непосредственно с сигнала. Если это постепенное увеличение или начинается с -∞ dBFS, вам не повезло.

Связанный контент