Napraw wideo m4v z opóźnionym dźwiękiem (audio i wideo nie są zsynchronizowane)

2

Oto podobne pytanie dotyczące systemu Windows:

Narzędzie do naprawy niesynchronizowanego wideo z dźwiękiem?

Mam nadzieję rozwiązać ten problem na komputerze Mac.

Próbowałem Handbrake i Avidemux (ten drugi wydaje się mieć opcję - „shift” - aby to naprawić, ale w ogóle nie odtwarza dźwięku, więc nie wiem, czy coś robi!).

dreeves
źródło
Czy cel go obserwuje, czy zapisuje na urządzeniu? Istnieją proste opcje, jeśli chcesz po prostu obejrzeć to na swoim lappy.
nerdwaller
Ach, tak, celem jest ocalenie go (ostatecznie do youtube).
dreeves

Odpowiedzi:

5

Zdobądź kopię FFmpeg. Zobacz na dole tego postu, jak to zrobić.

Niezależnie od tego, czy wideo pozostaje w tyle za dźwiękiem, czy odwrotnie, to nie ma znaczenia. Podstawowe polecenie jest następujące. Przekażemy dane wejściowe dwa razy, co widać po dwóch -iopcjach, a następnie opóźnimy jedno wejście i połączymy je z powrotem.

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

Tutaj offsetjest opóźnienie w sekundach, np . 1.5Lub 0.35. Ta wartość musi być dodatnia, więc jeśli twój dźwięk pozostaje w tyle za filmem, będziemy musieli go zrównoważyć. Jest to pokazane w powyższym przykładzie. Podobnie, jeśli wideo pozostaje w tyle za dźwiękiem, będziemy musieli go zrównoważyć.

Jak więc wybrać, czy opóźnić audio czy wideo? Ponieważ opóźniliśmy całość in.flv, po prostu wybieramy strumienie audio lub wideo i łączymy je z oryginalnymi strumieniami audio lub wideo. Odbywa się to w -mapopcjach.

Zasadniczo mapma dwie liczby. Ten przed dwukropkiem określa numer pliku wejściowego (zaczynając od 0), a drugi numer określa strumień pliku wejściowego (również zaczynający się od 0).

Aby opóźnić dźwięk, użyj następujących dwóch opcji:

  • -map 1:0 oznacza: Weź pierwszy strumień z drugiego pliku wejściowego (wideo z oryginalnego pliku)
  • -map 0:1 oznacza: Weź drugi strumień z pierwszego pliku wejściowego (audio z pliku opóźnionego)

Odwróć to, jeśli musisz opóźnić wideo:

  • -map 0:0 oznacza: Weź pierwszy strumień z pierwszego pliku wejściowego (wideo z pliku opóźnionego)
  • -map 1:1 oznacza: Weź drugi strumień z drugiego pliku wejściowego (audio z oryginalnego pliku)

Wreszcie -c copypo prostu powie FFmpeg, aby skopiował strumienie bitów wideo i audio. Oznacza to, że nie będzie procesu kodowania. To sprawia, że ​​polecenie jest bardzo szybkie i nawet nie stracisz żadnej jakości w procesie. Jeśli jednak wystąpią błędy synchronizacji, należy je pominąć -c copyi pozwolić FFmpeg ponownie zakodować dane wejściowe.


Możesz uzyskać najnowszą stabilną wersję FFmpeg za pośrednictwem Homebrew .

  • Otwórz terminal i wprowadź:

    ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
    
  • Zobacz także wymagania instalacyjne . Jeśli tego nie zrobiłeś, musisz zainstalować Narzędzia wiersza polecenia dla Xcode. Do tego potrzebny będzie identyfikator Apple ID.

  • Po zainstalowaniu Homebrew zainstaluj FFmpeg:

    brew install ffmpeg
    
  • Gdy to zrobisz, możemy użyć FFmpeg, aby naprawić twój film.

slhck
źródło