REKLAMA


Najważniejsze ustawienia kompresora x264

x264_logo

aktualizacja: 12.05.2014

Kompresor x264 posiada całą masę ustawień z których prawie każdy ma większy lub mniejszy wpływ na proces kompresji oraz jej efektywność. Ten artykuł powinien się przydać szczególnie tym, którzy chcą „wycisnąć” z x264 maksimum możliwości albo po prostu używają gotowych zestawów parametrów lub presetów, a chcą wiedzieć co znaczą poszczególne ustawienia. Tym bardziej, że wszystko co dotyczy x264 jest w języku angielskim. Na polskich stronach znalazłem tylko szczątkowe informacje dotyczące jego ustawień i to porozrzucane po forach. Spróbowałem więc zebrać to co można znaleźć w oficjalnym „a comprehensive guide to options in x264” oraz w nazywanej biblią koderów doom9.org, dodając miejscami sporo od siebie.

Jako że tematyka strony zobowiązuje, przy opisach poszczególnych ustawień będę nawiązywał do tego jaki mają one wpływ na efektywność kompresji i jakość obrazu.

UWAGA: nie zmieniaj tych ustawień, co do których nie jesteś dokładnie pewien co robią. Możesz więcej zepsuć, niż zyskać. Poza tym zależności między niektórymi parametrami są bardzo skomplikowane. Najlepszy sposób kompresji to ustawienie presetu, opcji tune oraz ewentualnie levelu.

 

– ref – ilość klatek referencyjnych. Dokładnie jest to liczba klatek poprzedzających każdą klatkę typu P, które mogą zostać dla niej wykorzystane jako klatki odniesienia. Ustawienie to nie dotyczy klatek B, które mogą używać max. dwóch klatek referencyjnych. Dopuszczalne wartości to 1 – 16. Zwiększając ich liczbę powinniśmy uzyskać lepszą jakość obrazu, ale zależy to w dużym stopniu od rodzaju materiału – największy zysk powinniśmy osiągnąć przy filmach kinowych z umiarkowaną akcją, a szczególnie w filmach animowanych. Minusem jest  to, że większa liczba klatek referencyjnych znacząco spowalnia kompresję, a przy odtwarzaniu zwiększa wymagania dla dekodera (musi on przechowywać w buforze wszystkie klatki referencyjne). Dlatego niektóre odtwarzacze stacjonarne mogą mieć problemy przy dużej liczbie klatek referencyjnych. UWAGA: to ustawienie ma zasadniczy wpływ na level pliku wynikowego. Jeśli celujemy w level 4.1 to maksymalne możliwe ustawienia klatek referencyjnych dla pełnej rozdzielczości 720p to 9, a dla 1080p to 4. Nie ma potrzeby ustawiania tego parametru ręcznie – można wykorzystać do tego celu presety oraz ustawienie –level.

 

– no-cabac – wyłączenie adaptacyjnego kodowania kontekstowego CABAC na rzecz starszego standardu CAVLC. Odpowiada ono za końcową bezstratną kompresję współczynników. Efektywność kompresji spada o ok. 20%, bez żadnego zysku na jakości. Stosować wyłącznie w celu wymuszenia zgodności z profilem Baseline.

 

– bframes – liczba klatek B, które mogą być wstawione pod rząd. Domyślnie są to 3 klatki. Ustawienie na 0 powoduje wyłączenie stosowania klatek B, co znacząco pogarsza efektywność kompresji. Jak poprzednio – ustawienie na 0 stosować wyłącznie w celu wymuszenia zgodności z niskimi profilami. Jeśli chcemy znacząco zwiększyć ten parametr, to najlepiej ustawić b-adapt na tryb 1, w przeciwnym razie mocno spowolnimy kompresję.

 

– b-adapt – wybiera algorytm decydujący kiedy w strumieniu wstawić klatkę typu B. Do wyboru są ustawienia:
0 – zawsze wybiera klatki B (lub nie wybiera wcale, jeśli są wyłączone)
1 – algorytm szybki. Zwiększa prędkość wraz ze wzrostem parametru bframes
2 – algorytm wolny i bardziej dokładny. Zwalnia wraz ze wzrostem parametru bframes
Włączony w trybie 2 od presetu slow, w trybie 1 od presetu superfast.

 

– b-pyramid – umożliwia używanie klatek B jako referencyjnych dla innych klatek. Normalnie tylko klatki I oraz P mogą być używane jako referencyjne. Dostępne są ustawienia:
none – wyłączenie
strict – ogranicza liczbę klatek B używanych jako referencyjne. Włączamy tylko jeśli zależy nam na zgodności ze standardem Blu-ray
normal – bez ograniczeń
Włączone w trybie normal we wszystkich presetach poza ultrafast.

 

– no-mbtree – wyłącza tzw. „drzewo makrobloków”. MB-tree śledzi zmiany jakości poszczególnych makrobloków, występujące pomiędzy klatkami, wzdłuż wektorów ruchu. Wyłączenie powoduje powrót do starej metody, czyli analizy całych klatek obrazu. MB-tree znacząco poprawia jakość kompresji – przykładowo obniża jakość we fragmentach klatki z dużą ilością detali lub bardzo dynamicznych, gdzie ludzkie oko i tak tego nie dostrzeże, podczas gdy np. tło na które będziemy zwracać uwagę, będzie miało lepszą jakość. Wymaga dodatkowego, większego niż standardowy pliku statystyk przy kodowaniu wieloprzebiegowym. MB-tree jest włączone dla wszystkich presetów, poza ultrafast.

 

– rc-lookahead – ustala ilość klatek używanych przy kontroli przepływności w algorytmie MB-tree. Większa wartość powinna zwiększyć skuteczność „drzewa makrobloków”, zmniejszając jednak prędkość kompresji oraz zwiększając zapotrzebowanie na pamięć. Domyślna wartość to 40.

 

– me – ustawia metodę poszukiwania wektorów ruchu operującą na pełnych pikselach (full-pixel). Do wyboru jest pięć metod, w kolejności od najprostszej i najszybszej do najbardziej złożonej:
- dia (diamond)
- hex (hexagon)
- umh (uneven multi-hex)
- esa (exhaustive)
- tesa (transformed exhaustive)
Bardziej złożona metoda powinna zwiększać efektywność kompresji i jakość obrazu, poprzez wyszukiwanie większej liczby przesunięć bloków (wektorów). Ustawienie ma duży wpływ na szybkość kompresji. Dwie ostatnie metody są BARDZO wolne.

 

– merange – ustawia maksymalny zakres wyszukiwania ruchu w pikselach. Domyślna wartość to 16 (ustawiana dla wszystkich presetów poniżej veryslow, od którego ustawiana jest wartość 24). Zalecane ustawienia to: 4, 8, 12, 16, 24, 32, 48, 64. Jeśli ustawiliśmy metodę poszukiwania wektorów ruchu na dia lub hex, to wartość ta jest limitowana do 16. Wartości powyżej 64 mają negatywny wpływ na efektywność kompresji. W przypadku materiału 1080p warto ją podnieść do 24, jeśli pozwala na to wybrana metoda z ustawienia –me.

 

– subme – ustala metodę (stopień złożoności) podpixelowej estymacji ruchu. W odróżnieniu od parametru –me, gdzie wyszukiwane są wektory ruchu, te metody mają na celu zwiększenie dokładności tych wektorów lub włączenie opracowanych dla x264 trybów RDO (inna nazwa: Psy RDO). Czym wyższy tryb, tym bardziej złożony algorytm, więc i wolniejsza kompresja, co powinno (ale niekoniecznie musi) przekładać się na lepszą jakość obrazu. Dostępne są następujące ustawienia:
0 – wyłączenie metod podpixelowych (nie zalecane)
1–5  – algorytmy włączające tryby Half-Pixel (HPel) i Quarter-Pixel (QPel) w różnych scenariuszach podczas procesu kompresji
6–11 – włączenie trybów RDO (Psychovisual Rate-Distortion Optimization), które znacząco wpływają na jakość obrazu (głównie zwiększają ostrość i liczbę detali obrazu), ale zwiększają też nieznacznie zapotrzebowanie na strumień danych. Są wolniejsze od trybów 1–5. UWAGA: RDO może obniżać wartość wskaźników PSNR i SSIM, mimo, że w ocenie wizualnej obraz będzie wyglądał lepiej.

 

– psy-rd – składa się z dwóch parametrów oddzielonych dwukropkiem. Pierwszy ustawia wzmocnienie trybu RDO (jeśli jest włączony – subme co najmniej w trybie 6), drugi to nasilenie tzw. Psy-Trellis (domyślnie wyłączony) – jeszcze bardziej pomaga wydobyć drobne detale z obrazu np. ziarno filmowe, ale wymaga eksperymentów jak sprawdzi się z danym materiałem (nie polecane dla filmów animowanych). Wymaga włączonej kwantyzacji Trellis. Ustawienie domyślne to 1.0:0.0 Dotyczy presetów od fast wzwyż.

 

– trellis – przeprowadza kwantyzację Trellis – bardziej wydajny algorytm kwantyzacji. Do wyboru są trzy ustawienia:
0 – kwantyzacja Trellis wyłączona. Nie zalecane
1 – włączona dla końcowego kodowania makrobloku
2 – włączona we wszystkich trybach decyzyjnych kodowania
Włączony w trybie 1 od presetu faster, w trybie 2 od presetu slower. Tryb 2 jest o wiele wolniejszy, ale daje lepszą jakość obrazu.

 

– aq-mode – włącza tryb adaptacyjnej kwantyzacji (Adaptive Quantization – AQ). Wbrew nazwie nie jest to kolejny algorytm kwantyzacji, a raczej kontroli przepływności (rate control). Jego działanie polega na przerzucaniu części bitów z obszarów klatki o dużej złożoności na te o niższej, czyli bardziej płaskie (dających niższe częstotliwości), np. duże jednolite powierzchnie (ściana, niebo itp.). Dzięki temu na tych powierzchniach ograniczamy typowe dla nich artefakty: banding czy efekt blokowy. Dostępne są ustawienia:
0 – wyłączone. Nie zalecane
1 – tryb domyślny
2 – Auto-variance AQ. Inny algorytm, próbuje dopasować siłę AQ do każdej klatki
Działanie Adaptive Quantization porównywalne jest do MB-tree, z tą różnicą, że AQ działa w obrębie jednej klatki (przestrzennie), natomiast MB-tree pomiędzy klatkami, gdzie występują przemieszczenia makrobloków (wektory ruchu).

 

– aq-strength – ustawia wzmocnienie adaptacyjnej kwantyzacji (AQ), czyli jak dużo bitów będzie przemieszczanych między obszarami o dużej złożoności, a tymi o małej. Domyślnie wartość ta jest ustawiona na 1.0. Nie używać wartości powyżej 2.0

 

– qcomp – tzw. współczynnik kompresji krzywej kwantyzacji. Dopuszczalny zakres: 0.0 – 1.0. Określa jak bardzo mogą różnić się między sobą kwantyzatory dla poszczególnych klatek (inaczej jak bardzo rozciągnięta jest krzywa kwantyzacji). Zwiększenie tego parametru powoduje, że różnice kwantyzatorów są zmniejszane, co powoduje, że sceny bardziej dynamiczne/złożone będą wyglądały lepiej, kosztem tych bardziej statycznych. Wartość skrajna 0.0 oznacza kompresję ze stałym bitrate – sceny dynamiczne będą wtedy wyglądały bardzo kiepsko, natomiast statyczne będą idealnej jakości. Natomiast ustawienie drugiej skrajnej wartości 1.0 oznacza kompresję ze stałym kwantyzatorem – tym razem sceny dynamiczne będą bardzo dobrej jakości, kosztem tych statycznych. Takie skrajne wartości powodują, że wszelkie zmiany dynamiki/złożoności w filmie będą bardzo mocno widoczne jako zmiany jakości. Podnoszenie wartości qcomp powoduje również osłabianie mechanizmów MB-tree oraz AQ. Domyślnie wartość ta ustawiona jest na 0.6 i zalecane jest pozostawienie tej wartości.

 

– deadzone-inter / deadzone-intra – alternatywny sposób wyznaczania jak dużo drobnych detali obrazu ma odrzucić x264 w procesie kwantyzacji. Czym wyższa wartość tym więcej jest ich odrzucanych. Deadzone jest używane, gdy nie działa kwantyzacja Trellis, więc jest w pełni aktywne tylko jeśli wcześniej ustawimy trellis=0 (trellis=1 powoduje ograniczenie wpływu ustawień deadzone, a trellis=2 wyłącza je całkowicie). Intra to klatki typu I, inter to klatki P i B. Klatki I powinny zawierać więcej szczegółów, więc deadzone-intra powinien być niższy. Zakres możliwych ustawień to 0 – 32. Domyślne ustawienie to: deadzone-inter 21, deadzone-intra 11. Obniżenie tych wartości pomaga zachować strukturę obrazu (np. ziarnistość), ale zwiększa też zapotrzebowanie na strumień danych. Natomiast ich podnoszenie daje obraz wygładzony, pozbawiony drobnych detali, przy zmniejszonym zapotrzebowaniu na strumień danych. Pomaga to w otrzymaniu dobrej jakości obrazu bez artefaktów, nawet przy bardzo niskich przepływnościach (porównaj obraz jaki miały filmy w popularnym swojego czasu formacie RMVB). Używanie tego ustawienia zalecam raczej doświadczonym „koderom”, ponieważ trzeba go dobierać odpowiednio do bitrate filmu, struktury obrazu oraz pozostałych ustawień (np. filtra deblock). Dla nie lubiących eksperymentować lepszym wyborem będzie kwantyzacja Trellis i tryby AQ.

 

– partitions – standard H.264 wprowadza możliwość dzielenia makrobloków 16×16 pix. na partycje o mniejszych rozmiarach. Do wyboru są: i8×8, i4×4, p8×8, p4×4 oraz b8×8. Można także wybrać „none” (bez stosowania partycji) oraz „all” (włączone wszystkie dostępne – od presetu slower wzwyż).

 

– weightp – włącza „ważone” przewidywanie poprawy kompresji klatek typu P. Szczególnie poprawia jakość efektów fade (ściemnianie obrazu). Tryb weightP do niedawna nie był prawidłowo obsługiwany przez nieliczne starsze odtwarzacze stacjonarne i urządzenia przenośne. Dostępne są trzy ustawienia:
0 – wyłączenie
1 – tryb uproszczony, bez powielania odniesień
2 – tryb smart, z powielaniem odniesień
Włączony w trybie 1 od presetu superfast, w trybie 2 od presetu medium.

 

– no-mixed-refs – wyłącza możliwość, aby każda partycja 8×8 i 16×8 mogła niezależnie wybierać dla siebie odniesienia. Zamiast tego możliwe jest jedno odniesienie dla całego makrobloku (16×16). Może nieznacznie pogarszać efektywność kompresji. Ustawione dla niskich presetów: do faster włącznie.

 

– direct – ustawia tryb predykcji dla bezpośrednich (direct) wektorów ruchu. Dostępne są ustawienia:
spatial – przestrzenny
temporal – czasowy
auto – wybór automatyczny. Działa najlepiej z kodowaniem 2-przebiegowym
Do presetu medium włącznie ustawiany jest tryb spatial, od presetu slow wzwyż ustawiany jest tryb auto. Przy kodowaniu 1-przebiegowym lepiej jest ustawić spatial.

 

– deblock – kontroluje tzw. filtr pętli (loop filter), który jest częścią standardu H.264. Jest to filtr usuwający efekt blokowy i lekko rozmywający obraz (przy dodatnich wartościach filtra) lub wyostrzający obraz (przy ujemnych wartościach). Składa się z dwóch parametrów oddzielonych dwukropkiem. Pierwszy z nich kontroluje siłę filtru (tzw. alpha deblocking), a drugi to próg (beta deblocking). O ile pierwszy z nich nie wymaga wyjaśnień, to drugi służy do określania na jakich powierzchniach obrazu – bardziej szczegółowych, czy bardziej płaskich, ma być stosowany filtr. Generalnie obie wartości powinny przyjmować tą samą wartość, chyba że efekt nas nie zadowala, można lekko zmodyfikować drugi parametr, czyli próg. Domyślne ustawienie to 0:0 i bynajmniej nie oznacza to, że filtr jest wyłączony, tylko działa z niewielką siłą w kierunku usuwania efektu blokowego. Zalecany zakres wartości to: -3:-3 do 3:3. Najlepiej stosować dodatnie wartości tego filtra dla niskich przepływności (i słabej jakości obrazu) i wartości ujemne dla wysokich. Uwaga na wartości skrajne, np. -3:-3 przy odpowiednio wysokim bitrate oraz innych ustawieniach zwiększających ostrość może powodować niepożądane artefakty.

 

– no-deblock – wyłącza opisany wyżej filtr pętli (loop filter). Całkowite jego wyłączenie nie jest zalecane. Ustawione w presecie ultrafast.

 

– scenecut – ustawia próg wykrywania zmian scen w filmie. Każda klatka ma obliczany stopień podobieństwa do klatki poprzedniej. Jeśli jest ono mniejsze niż wartość ustawiona w tym parametrze, to wykrywana jest zmiana sceny i wstawiana klatka typu I. Zwiększenie jej wartości powoduje wykrywanie większej liczby zmian scen (niektóre specyficzne filmy mogą tego wymagać). Domyślnie ustawiona jest wartość 40 (we wszystkich presetach, poza najniższym ultrafast, gdzie ustawione jest 0, czyli zmiany scen nie są wykrywane – nie zalecane).

 

– open-gop – włącza otwarte GOP (Group of Pictures). W uproszczeniu każda grupa GOP zaczyna się od klatki I, a kończy się na klatce P lub B poprzedzającej kolejną klatką I. Jeśli wszystkie klatki B z jednego GOP używają jako odniesień wyłącznie klatek z tego samego GOP mamy do czynienia z GOP zamkniętym. Jeśli zaś mogą używać odniesień spoza tego samego GOP to mówimy o GOP otwartym. W zamkniętych GOP ostatnia klatka w grupie jest zawsze klatką P (klatka B ma odniesienia w obu kierunkach, więc wskazywałaby na klatkę spoza swojego GOP). Otwarte GOP zwiększają efektywność kompresji dzięki dodatkowym odniesieniom między klatkami granicznymi w grupach, ale mogą być niezgodne z niektórymi dekoderami sprzętowymi (np. problem z przewijaniem). Dlatego domyślnie ta opcja w x264 jest wyłączona. Jeśli kompresujemy filmy dla siebie i wiemy że będą poprawnie odtwarzane na naszym sprzęcie, to zalecam włączenie tej opcji. Włączenie otwartych GOP nie powoduje żadnego spowolnienia kompresji.

 

– no-fast-pskip – wyłącza wczesne podejmowanie decyzji o klasyfikowaniu makrobloków jako SKIP (pomijany ze względu na bardzo duże podobieństwo do swojego odniesienia) w klatkach typu P. Może dawać niewielki wzrost jakości obrazu, przy niskim bitrate, kosztem dużego spowolnienia kompresji. Raczej nie warto stosować. Włączony w presecie placebo.

 

– no-dct-decimate – bloki o bardzo małej złożoności mogą być w procesie kompresji pomijane jako mało istotne dla odbiorcy i nie zapisywane w strumieniu. Zaoszczędzone w ten sposób pasmo można przeznaczyć na inne bardziej znaczące bloki. Czasem (bardzo rzadko) może to jednak powodować widoczne artefakty, np. pasma „wyzerowanych” bloków w bardzo ciemnych scenach. Ustawienie tego parametru powoduje, że wszystkie bloki bez wyjątków będą zapisywane w strumieniu, co zapobiegnie ewentualnym artefaktom, ale obniży ogólną jakość obrazu. Sensowne tylko w przypadku bardzo wysokich przepływności, kiedy nie musimy na niczym oszczędzać.

 

– vbv-maxrate / vbv-bufsize – włącza i konfiguruje tzw. VBV (Video Buffer Verifier). Jest to mechanizm zapobiegający gwałtownym krótkim skokom bitrate, które mogłyby spowodować, że dekoder miałby problem z przetworzeniem tak dużej ilości danych lub przekroczyłyby one możliwości łącza, którym są transmitowane. Jeśli film, który kompresujemy ma być odtwarzany wyłącznie na komputerze, to nie ustawiamy VBV w ogóle (pomijamy te ustawienia). Jeśli ma być odtwarzany na Blu-ray, konsoli lub strumieniowo, to powinno się go ustawić, ale wg dokładnych zaleceń dla urządzeń tego typu. Najbardziej restrykcyjny VBV ustawia się jeżeli film jest kompresowany na potrzeby streamingu w sieci. Jeśli nie ma takiej potrzeby VBV nie ustawiamy, ponieważ zakłóca optymalny rozkład danych w strumieniu i przez to może obniżać jakość obrazu.

 

  • Presety

Aby uprościć działanie x264 i zapobiec ustawianiu każdego parametru ręcznie, jego twórcy pogrupowali najważniejsze ustawienia w tzw. presety. Jest ich dziesięć, a ich nazwy jednoznacznie sugerują prędkość z jaką przeprowadzana jest kompresja:

ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo

Szczególnie początkującym polecam korzystanie z presetów, tylko pamiętajmy, aby trzymać się raczej tych środkowych (czyli w okolicach medium). Domyślnym presetem jest właśnie medium i taki jest ustawiany jeśli sami tego nie określimy.
Co dokładnie kryje się pod każdym presetem:

-> ultrafast:

--no-8x8dct --aq-mode 0 --b-adapt 0
--bframes 0 --no-cabac --no-deblock
--no-mbtree --me dia --no-mixed-refs
--partitions none --rc-lookahead 0 --ref 1
--scenecut 0 --subme 0 --trellis 0
--no-weightb --weightp 0

-> superfast:

--no-mbtree --me dia --no-mixed-refs
--partitions i8x8,i4x4 --rc-lookahead 0
--ref 1 --subme 1 --trellis 0 --weightp 1

-> veryfast:

--no-mixed-refs --rc-lookahead 10
--ref 1 --subme 2 --trellis 0 --weightp 1

-> faster:

--no-mixed-refs --rc-lookahead 20
--ref 2 --subme 4 --weightp 1

-> fast:

--rc-lookahead 30 --ref 2 --subme 6
--weightp 1

-> medium:

--ref 3 --me hex --subme 7 –rc-lookahead 40

-> slow:

--b-adapt 2 --direct auto --me umh
--rc-lookahead 50 --ref 5 --subme 8

-> slower:

--b-adapt 2 --direct auto --me umh
--partitions all --rc-lookahead 60
--ref 8 --subme 9 --trellis 2

-> veryslow:

--b-adapt 2 --bframes 8 --direct auto
--me umh --merange 24 --partitions all
--ref 16 --subme 10 --trellis 2
--rc-lookahead 60

-> placebo:

--bframes 16 --b-adapt 2 --direct auto
--slow-firstpass --no-fast-pskip
--me tesa --merange 24 --partitions all
--rc-lookahead 60 --ref 16 --subme 11
--trellis 2

 

  • Tune

Opcja –tune służy do zoptymalizowania kompresji pod kątem rodzaju materiału wejściowego lub wyjściowego efektu wizualnego, który chcemy otrzymać. Jeśli kompresujemy z linii poleceń to ustawienie –tune powinno znajdować się po ustawieniach presetu, a przed pozostałymi ustawieniami.
Wyjaśnię jakie ustawienia kryją się pod poszczególnymi ustawieniami –tune:
(oznaczenie <?> oznacza brak zmian dla tego parametru)

-> film: (do typowych filmów kinowych)

--deblock -1:-1 --psy-rd <?>:0.15

-> animation: (do filmów typu anime)

--bframes {+2} --deblock 1:1
--psy-rd 0.4:<?> --aq-strength 0.6
--ref {podwajane jeżeli >1, w przeciwnym razie ustawiane na 1}

-> grain: (zachowuje ziarno kliszy filmowej – wymaga wysokiego bitrate)

--aq-strength 0.5 --no-dct-decimate
--deadzone-inter 6 --deadzone-intra 6
--deblock -2:-2 --ipratio 1.1
--pbratio 1.1 --psy-rd <?>:0.25
--qcomp 0.8

-> stillimage: (do pokazów slajdów lub filmów z ekstremalnie niską dynamiką)

--aq-strength 1.2 --deblock -3:-3
--psy-rd 2.0:0.7

-> psnr: (maksymalizuje wartość wskaźnika PSNR – używać tylko w celach testowych!)

--aq-mode 0 --no-psy

-> ssim: (maksymalizuje wartość wskaźnika SSIM – używać tylko w celach testowych!)

--aq-mode 2 --no-psy

-> fastdecode: (w celu przygotowania materiału do odtwarzania na dekoderach o niskiej wydajności np. telefony komórkowe)

--no-cabac --no-deblock --no-weightb
--weightp 0

-> zerolatency: (do transmisji strumieniowych z szybkim kodowaniem i bardzo małym opóźnieniem, kosztem niskiej jakości)

--bframes 0 --force-cfr --no-mbtree
--sync-lookahead 0 --sliced-threads
--rc-lookahead 0

 


Opublikowano: 31 paź 2013 / Kategoria: konfiguracja i ustawienia / 18 534 wyświetleń

Odpowiedzi: 19 do wpisu “Najważniejsze ustawienia kompresora x264”

  1. Daniel pisze:

    Witam, mam pytanie odnośnie „przewijania” (dotarcie do 26 minuty filmu). Używam stałego bitrate/CRF w x264 i zauważyłem że przeskok do danego miejsca nie jest tak szybki jak w oryginale. Czy jest to wina ustawienia w kodeku czy problem jest po stronie „muksera” (używam mkvmerge). Gdzie leży problem?
    Pozdrawiam

    • qbakos pisze:

      mkvmerge to bardzo dobry mukser, więc jego bym raczej nie obwiniał.
      Ja się z tym często spotykam w filmach w wysokiej rozdzielczości i o wysokim bitrate i moim zdaniem jest to wina za małej wydajności obliczeniowej komputera. Materiał skompresowany x264 jest bardziej złożony obliczeniowo od oryginalnych strumieni DVD/Blu-ray, więc procesor zwyczajnie może nie wyrabiać i stąd te lekkie opóźnienia przy przewijaniu. Wyższy preset też może mieć na to jakiś wpływ, ale nie badałem tego

      • Daniel pisze:

        … używam levelu 4.1 a procesor i7-3770 + RAID0 więc wąskiego gardła nie powinno być. Z obserwacji wydaje mi się że może to być problem użycia CRF, przy 2pass aż tak nie jest to uciążliwe lecz pewności na 100% nie mam. Plik wyjściowy jest w 1080

        • Daniel pisze:

          … przewijanie przy 2pass jest płynne (bez zmian w presecie, takie samo jak przy CRF). Kodowanie CRF zapisuje plik inaczej??

          • qbakos pisze:

            To mnie z tym przewijaniem zagiąłeś… Nie słyszałem żeby były jakieś różnice w zapisie pliku między tymi metodami. Ale może coś być nie tak z indeksem albo klatkami kluczowymi. Sprawdzę to jak będę miał chwilę i porównam.
            Jaka jest ścieżka dźwiękowa w tym pliku przekodowanym CRF? I czy oba mają podobną długość? Używasz w miarę nowej wersji mkvmerge?

    • Marcin pisze:

      Miałem podobny przypadek po użyciu avidemux – przewijanie działało jak krew z nosa, a dekoder (WIWA HD90) nie chciał nawet odtworzyć. Jak materiał po przemuxowaniu w avidemux otwierałem w virtualdub zawsze mi krzyczy, że wykrył niepoprawny format audio format (bo jest 16 bajtów, a powinno być 18). Po przepuszczeniu przez VD (direct copy) wszędzie plik bryka.

    • Goku pisze:

      Zmniejsz ilość klatek kluczowych…

  2. Daniel pisze:

    kodowanie zrobiłem w XMedia recode , wcześniej Megui i mkvmerge 6.9.1

    • Daniel pisze:

      … a co do długości to źródło to samo a dzwięk ac3 niekodowany – kopiowany

      • qbakos pisze:

        Sprawdziłem, plik zapisywany jest identycznie przez obie metody. Stawiam na to, że któryś z programów błędnie zapisuje plik mieszając coś w indeksach klatek. XMedia recode nie używałem, ale dwa pozostałe raczej bym wykluczył.
        Spróbuj jeszcze wyłączyć VBV i wtedy sprawdź – on ma wpływ na proces odtwarzania filmu, więc może coś tutaj jest na rzeczy.

  3. Marcin pisze:

    Witam. Pytanko o ustawienie programu OBS. Jeżeli zależy mi na jakości nagrywania obrazu prosto z gier to nagrywać z użyciem CABAC czy CAVLC ?

    • qbakos pisze:

      Zawsze CABAC, bez względu na to czy to z gier, czy kompresujesz filmy, czy jeszcze coś innego.
      CAVLC jest starszą i mniej wydajną metodą.

      • Marcin pisze:

        Ok, dziękuję za odpowiedź.
        Jeżeli masz czas i ochotę to mógłbyś powiedzieć jakie komendy wpisać do programu OBS aby skonfigurować go pod nagrywanie gier w jak najwyższej jakości ( najlepiej bezstratnej ) i płynności 120 FPS przy bitrate 40000 kb/s ? Nagrywam materiały z gier na YT. Rozdzielczość to 2560 x 1440. Jeżeli komputer nie daje rady to nagrywam w FHD. Mówiąc ogólnie to OBS zachowuje płynność tylko na profilu ultrafast. Mimo, że jest zapas FPS na veryfast i niższym to nagranie i gra rwie chociaż licznik pokazuje ponad 100 FPS. Nie wiem czemu tak sie dzieje. Profil ultrafast włącza i wyłącza różne funkcje. Nie ogarniam tego. Czarna magia. Czy są polecenia do wpisania aby pewne zbędne funkcje wyłączyć, a potrzebne włączyć bo są wyłączone wraz z ultrafast?

        Chodzi o optymalizacje procesu nagrywania. Wyłączyć zbędne funkcje, włączyć potrzebne. Max jakość, min obciążenie. Filmy raczej statyczne. Zobaczyć można na YT. Kanał: Mar89Tum

        • qbakos pisze:

          Nie znam programu OBS i nawet o nim nie słyszałem.
          Co do problemów z kompresją to zastanawia mnie do czego Ci potrzebna taka rozdzielczość, tak gigantyczny bitrate i do tego 120 FPS ??? Jaki cel tak wyśrubowanych parametrów? Ogromna większość wyświetlaczy wyciąga max. 60 Hz, więc wszystko powyżej i tak nie da żadnego efektu. Nic dziwnego, że komputer nie jest w stanie tego uciągnąć w czasie rzeczywistym i nie wiem czy obecnie jakikolwiek sprzęt byłby w stanie. Profil ultrafast jeszcze jakoś daje rade, bo tam prawie wszystko jest powyłączane i daje tragiczną jakość (możesz o tym poczytać na mojej stronie).
          Jak dla mnie to powinno być robione tak: najpierw zrzucasz film z gry w formacie bezstratnym (ale nie 120 FPS, bo wtedy to z kolei może dysk nie uciągnąć takiego transferu). Musisz mieć tylko sporo miejsca, bo pliki będą miały gigantyczne rozmiary. Potem na spokojnie sobie kompresujesz z takim profilem jak chcesz. Robienie tego w czasie rzeczywistym moim zdaniem się nie uda.

          • Marcin pisze:

            Witaj. Czemu takie parametry? A no temu, że materiały są potem spowalniane dlatego potrzebuje 120 FPS aby był płynny efekt slowmo.
            Mam mocarny komputer i naprawdę sprzęt bez problemowo nagrywał w 120 FPS ale trzeba było to robić w odpowiednich warunkach w grze aby komp nie był zajęty wyświetlaniem grafiki. Pomijając to to właśnie OBS na profilu Ultrafast gdzie jakość ma być najsłabsza jest na pierwszy rzut oka nie do odróżnienia od oryginału. Proponuję dla własnej ciekawości zobaczyć bo program jest darmowy i to jego ultrafast nie psuje jakości co mnie dziwi.

        • Krzysztof pisze:

          Kolego z YT ;) nie ma zupełnie sensu nagrywać 120 FPS i 40000 kb/s jeśli chcesz wrzucić filmy na YT. https://support.google.com/youtube/answer/1722171?hl=pl&vid=1-635801131184212333-707509999
          W tym miejscu masz wskazówki ustawień kodera by jak najbliżej odpowiadał odtwarzaczowi YT. Przede wszystkim zmniejsz ilość klatek do 60 FPS bo większa ilość nie ma sensu. Osobiście nagrałem dość dynamiczne filmy poprzez transmisję strumieniową (OBS, 1280×720, 60 FPS, 4 Mb/s, preset: very fast) i obraz wyszedł klarowny, ale niestety wtedy jest brak możliwości modyfikacji filmu (nie ma co liczyć na wbudowany Edytor Youtube chyba że ktoś dopiero zaczyna nagrywać). Powiem jeszcze tyle, że dla testu ściągnąłem film poprzez stronę ClipConverter i wrzuciłem niezmodyfikowany z powrotem do YT i wyszła strata w jakości obrazu. Nigdy więc nie uda ci się stworzyć filmu i wrzucić do YT bezstratnie niezależnie jak będziesz kombinował, a niepotrzebnie obciążasz komputer i marnujesz czas do przetwarzania i wysyłu plików o tak wysokiej jakości.

          • Marcin pisze:

            Witaj. 120 FPS używam dlatego, że materiały mają potem nałożony efekt slowmo i taka ilość FPS jest wymagana do płynnego efektu. Bitrate tak duży jak dużo daje rade maszyna. Taką mam zasadę. Zawsze na max możliwości przy moim nagrywaniu


  4. [...] Opcje x264 – pozwolę sobie zalinkować do strony na, której jest to ładnie wyjaśnione, gdyż nie jest to moja mocna strona. Więcej tutaj. [...]

Musisz mieć włączoną obsługę JavaScript, aby dodawać komentarze!

Zostaw odpowiedź


CommentLuv badge

Następny / poprzedni artykuł:



Kategorie

O autorze

    Nazywam się Jakub Kościelny. Na forach jako qbakos. Technikami przetwarzania i kompresji wideo interesuję się właściwie od studiów, czyli już dość długo.
    Kilka lat temu postanowiłem połączyć to hobby z czymś poważniejszym i zacząłem o tym pisać, robić badania, pomiary.
    Na tej stronie zebrałem to wszystko w mam nadzieję przystępnej formie i udostępniłem zainteresowanym tą tematyką.
    A przy okazji mam motywację, aby cały czas szukać nowych tematów na artykuły... oraz zgłębiać tajniki WordPressa. Zapraszam :)