Я знаю, как установить задержку с помощью -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, вам не повезло.