Исправление видео m4v с запаздывающим звуком (рассинхронизация звука и видео)

Исправление видео m4v с запаздывающим звуком (рассинхронизация звука и видео)

Вот аналогичный вопрос для Windows:

Инструмент для исправления рассинхронизации видео и звука?

Я надеюсь решить эту проблему на Mac.

Я пробовал Handbrake и Avidemux (в последнем, кажется, есть опция — «shift» — для исправления этой проблемы, но он вообще не воспроизводит звук, так что я не могу сказать, делает ли он что-нибудь!).

решение1

Получите себе копию FFmpeg. Смотрите в конце этого поста, как это сделать.

Отстает ли видео от аудио или наоборот, на самом деле не имеет значения. Основная команда выглядит следующим образом. Мы передадим ввод дважды, как видно по двум -iопциям, затем задержим один ввод и снова объединим их.

ffmpeg -i in.flv -itsoffset offset -i in.flv -map 1:0 -map 0:1 -c copy out.flv

Здесь,offsetзадержка в секундах, например 1.5или 0.35. Это значение должно быть положительным, поэтому если ваш звук отстает от видео, нам придется сместить видео. Это показано в примере выше. Аналогично, если видео отстает от звука, нам придется сместить звук.

Итак, как выбрать, задерживать ли аудио или видео? Ну, поскольку мы задержали все in.flv, мы просто выберем аудио или видео потоки и объединим их с исходными аудио или видео потоками. Это делается в опциях -map.

По сути, mapимеет два числа. Одно перед двоеточием указывает номер входного файла (начинается с 0), а второе число указывает поток входного файла (также начинается с 0).

Итак, чтобы задержать звук, используйте следующие два варианта:

  • -map 1:0означает: Взять первый поток из второго входного файла (видео из исходного файла)
  • -map 0:1означает: Взять второй поток из первого входного файла (аудио из задержанного файла)

Поменяйте местами, если вам нужно отложить видео:

  • -map 0:0означает: Взять первый поток из первого входного файла (видео из задержанного файла)
  • -map 1:1означает: Взять второй поток из второго входного файла (аудио из исходного файла)

Наконец, -c copyпросто скажет FFmpeg скопировать видео- и аудиопотоки. Это означает, что не будет никакого процесса кодирования. Это делает команду сверхбыстрой, и вы даже не потеряете качество в процессе. Однако, если вы столкнетесь с ошибками синхронизации, то вам следует пропустить -c copyи позволить FFmpeg перекодировать входные данные.


Вы можете получить последнюю стабильную версию FFmpeg черезДомашнее пиво.

  • Откройте Терминал и введите:

      ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
    
  • Смотритетребования к установкеТакже. Вам нужно установить Commandline Tools for Xcode, если вы этого еще не сделали. Для этого вам понадобится Apple ID.

  • После установки Homebrew установите FFmpeg:

      brew install ffmpeg
    
  • После этого мы сможем исправить ваше видео с помощью FFmpeg.

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