2012-04-12 17 views
8

Byłbym bardzo wdzięczny, gdyby ktoś mógł dać wskazówki dotyczące korzystania z jego offset z ffmpeg. Przeczytałem wiele postów na ten temat, niektóre z nich bardzo wyraźnie wyjaśniają, jak ponownie zsynchronizować audio i wideo za pomocą -itsoffset, ale nie byłem w stanie sprawić, żeby działało. My AVI jest zakodowany FFmpega w dwóch przejściach, z użyciem polecenie dla drugiego przejścia:Polecenie przesunięcia strumienia ffmpeg (-itsoffset) nie działa

ffmpeg -i whole-vts_01.avs -pass 2 -y -vcodec libxvid -vtag XVID -b:v 1300K -g 240 -trellis 2 -mbd rd -flags +mv4+aic -acodec ac3 -ac 2 -ar 48000 -b:a 128k output.avi 

jakiegoś powodu, to kończy się z opóźnieniem 1 sekundy w standardzie wideo (lub audio 1 sekundę wcześniej). Nie zdarza się to zbyt często, ale widzę to od czasu do czasu. Wśród innych próbach, próbowałem następujące:

(1) ffmpeg -i output.avi -itsoffset 00:00:01.0 -i output.avi -vcodec copy -acodec copy -map 0:0 -map 1:1 output-resynched.avi 
(2) ffmpeg -i output.avi -itsoffset 00:00:01.0 -i output.ac3 -vcodec copy -acodec copy -map 0:0 -map 1:0 output-resynched2.avi 
(3) ffmpeg -itsoffset -00:00:01.00 -i output.avi output-resynched8.avi 
(4) ffmpeg -i output.avi -itsoffset -1.0 -i output.avi -vcodec copy -acodec copy -map 0:1 -map 1:0 output-resynched13.avi 

Oto wyniki:

  1. audio zniekształcone i tylko 5m 35 s długie vs. 1h 41m.
  2. (Output.ac3 jest komponent audio output.avi) video i audio identyczny do oryginału, offset nie działa
  3. audio udało się przesunął, ale oryginalne parametry kodowania zastąpione domyślnych (zgodnie z oczekiwaniami).
  4. Audio zniekształcone i tylko 9m 56s długości vs. 1h 41m.

Widzę, że wiele osób wyjaśnia i najwyraźniej korzysta z procesu opisanego powyżej, ale wydaje się, że nie działa on dla mnie. Czy brakuje mi czegoś oczywistego? Bardzo chciałbym móc użyć funkcji -offoffs, ponieważ jest ona czystsza niż moje obejście.

FWIW, tutaj jest inaczej, a już sposobem uzyskania pożądanego rezultatu:

Najpierw utwórz przesunięty plików wideo tylko za pomocą -p:

ffmpeg -i output.avi -ss 1.0 -vcodec copy -an oupput_videoshifted.avi 

Potem wyodrębnić audio:

ffmpeg -i output.avi -vn -acodec copy outputaudioonly.ac3 

I wreszcie remux oba składniki:

ffmpeg -i output_videoshifted.avi -i output_audioonly.ac3 -vcodec copy -acodec copy -map 0:0 -map 1:0 output-resynched14.avi 

Proces działa, jest wystarczająco szybki, ale ja naprawdę wolałbym skorzystać z rozwiązania jednorazowego przejścia.

+0

Istnieje [błąd otwarty] (http://roundup.libav.org/issue359) z flagą '-itsoffset', która może mieć coś wspólnego z problemami, które widzisz. Z drugiej strony, zniekształcony i ścięty dźwięk brzmi jak coś poważniejszego. Jeśli to nadal stanowi problem, z jakiej wersji FFmpeg korzystasz? – blahdiblah

Odpowiedz

4

Oto co zrobiłem i to działa na mnie

pierwsze wejście ustawiania -i a drugie wejście jest pochodzić z tego samego pliku jeden film.

Delay 1 sekundy na wejściu pierwszego filmu, a drugie wejście audio, po prostu zrobić kopię

ffmpeg -y -itsoffset 00:00:01.000 -i "d:\Video1.mp4" -i "d:\Video1.mp4" 
-map 0:v -map 1:a -vcodec copy -acodec copy 
-f mp4 -threads 2 -v warning "Video2.mp4" 

Delay1 drugi w wejściowym drugiego dźwięku i pierwsze wejście wideo po prostu zrobić kopię

ffmpeg -y -i "d:\Video1.mp4" -itsoffset 00:00:01.000 -i "d:\Video1.mp4" 
-map 0:v -map 1:a -vcodec copy -acodec copy 
-f mp4 -threads 2 -v warning "Video2.mp4" 
0

Problem jest zlokalizowany pod numerem -vcodec copy -acodec copy, ponieważ zmiana działa tylko na klatkach kluczowych. Miałem ten sam problem.

Tylko nie kopiować (audio/wideo), spróbuj coś z -itsoffset, ale używać

-vcodec libxvid -vtag XVID -b:v 1300K -g 240 -trellis 2 -mbd rd -flags +mv4+aic -acodec ac3 -ac 2 -ar 48000 -b:a 128k 

do ponownego kodowania. Powinno działać.

Powiązane problemy