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