Исправить видео в формате 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 через Homebrew.

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

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

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

    brew install ffmpeg
    
  • Как только это будет сделано, мы можем использовать FFmpeg для исправления вашего видео.

Другие вопросы по тегам