2011-08-19 20 views
11

Próbuję zakodować wideo z ffmpeg do H.264 (przez bibliotekę libx264) ze stałą przepływnością. Wiem, wiem, VBR jest często preferowany, ale do tej konkretnej pracy wymagane jest używanie CBR (tak długo, jak długo jest tak wiele kilobitów na sekundę, nie musi to być dokładny kilobajt na ramkę, afaik) . Moja próbka wideo używam do testu jest stąd: http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iTunes.mov.zip (chodzi z http://support.apple.com/kb/HT1425)Kodowanie wideo H.264 CBR z FFmpeg

mogę uzyskać stałą przepływność podczas kodowania wideo MPEG-4 Video (za pomocą polecenia ffmpeg -i sample_iTunes.mov -b 819968 -minrate 819968 -maxrate 819968 out.mov), a bit stawka jest zgodnie z oczekiwaniami. Odczytywanie specyfikacji wideo za pomocą QuickTime Inspector, ma szybkość transmisji danych 844,94 kbit/s. Chłodny.

Jednak, gdy zmieniam kodek na libx264, wydaje się, że całkowicie ignoruję moje żądania bitrate! Polecenie, które próbuję, to "ffmpeg -i sample_iTunes.mov -vcodec libx264 -vpre medium -b 819968 -vb 819968 -minrate 819968 -maxrate 819968 -bufsize 400000 test.mov". Ale kiedy sprawdzam specyfikację wideo za pomocą QuickTime Inspector, ma szybkość transmisji danych wynoszącą 254,74 kbit/s. WTF? To nie jest nawet blisko!

Próbowałem zmienić tak wiele parametrów i dodając mnóstwo różnych rzeczy, a ja spędziłem 2 dni na szukaniu go, ale nie mogę tego zmusić do działania. Jeśli koduję wideo za pomocą kodera MainConcept H.264, mogę uzyskać stałą szybkość transmisji bitów, ale potrzebuję tego do pracy z ffmpeg.

Jeśli ktoś może mi pomóc dowiedzieć się, jak zrobić kodowanie CBR H.264 za pomocą FFmpeg, pokocham Cię na zawsze!

Odpowiedz

0

Ok, więc myślę, że mogłem znaleźć część problemu. Wydaje się, że wykonanie opcji -bufsize większej niż szybkość danych rozwiązało problem. Oczywiście nie wiem, czy to kodowanie prawdziwe CBR, ale szybkość transmisji danych, którą czyta Quick Time Inspector, wygląda teraz.

5

Ja też pracuję nad próbą uzyskania CBR z x264. Znalazłem ten blog post przez Dark Shakari całkiem interesujący.

Oto co mam do niskiej latencji CBR wideo do Tranport strumienia MPEG:

ffmpeg -i sintel_trailer-720p.mp4 -an -tune zerolatency \ 
     -x264opts bitrate=4000:vbv-maxrate=4000:vbv-bufsize=166 \ 
     -vcodec libx264 -f mpegts -muxrate 4000K -y trailer.ts 

Według blogu X264 dewelopera ustawić:

  • VBV-maxrate = bitrate = B = docelowej przepływności
  • VBV-bufsize = B/FPS (w przypadku filmu, który jest 24 fps)

Na koniec ustaw przełącznik ffmpeg na x264 z-luźnej zerowości.

Mam nadzieję, że to pomocne. A jeśli ktoś ma ulepszenia w tym zakresie, proszę dać mi znać!

+3

Ciągle widzę znaczną zmienność z tymi opcjami. Jednak +1, ponieważ prowadzi mnie do jednej opcji, która faktycznie pomaga w mojej sytuacji, '-muxrate'. To dodaje nadzabianie do strumienia transportowego, aby spróbować osiągnąć swoje cele CBR. To nie jest doskonałe, ale wystarczająco mnie to zbliża. O ile mogę powiedzieć, 'ffmpeg' naprawdę nie obsługuje wcale CBR.Min. = Avg = max też nie działa. Wypychanie z nadzieniem jest tak blisko, jak to tylko możliwe. –

+0

Jestem w stanie zbliżyć się do CBR za pomocą tych opcji, więc +1. Po ustawieniu na 4000K uzyskuję 4000, 3999.9 i 399,8.8, więc nie całkiem CBR, ale cholernie blisko! – zgr024