7.11. Rippowanie DVD do wysokiej jakości pliku MPEG-4 ("DivX")
Poprzedni | Rozdział 7. Kodowanie z MEncoderem | Następny

## 7.11. Rippowanie DVD do wysokiej jakości pliku MPEG-4 ("DivX")

Jednym z najczęsciej zadawanych pytań jest "Jak zripować DVD do najwyższej osiągalnej jakości? Nie interesuje mnie rozmiar pliku, chcę tylko najwyższą jakość".

To jest co najmniej źle sformułowane. W końcu jeżeli nie obchodzi Cię rozmiar pliku, to czemu nie skopiować po prostu całego strumienia video MPEG-2 z DVD? Pewnie, plik będzie miał 5GB, jak chcesz to nie pakuj się w to, ale jeżeli chcesz najwyższej jakości i nie martwi Cię rozmiar pliku, to jest na pewno najlepsze rozwiązanie.

Tak na prawdę, powodem dla którego chcesz przekodować DVD do pliku MPEG-4 jest właśnie to, że zależy Ci na rozmiarze pliku.

Trudno jest podać przepis krok-po-kroku jak stworzyć wysokiej jakości ripa DVD. Trzeba uwzględnić kilka czynników, musisz je zrozumieć żeby być zadowolonym z rezultatów jakie osiągniesz. Poniżej zbadamy kilka z tych czynników i spojrzymy na przykłady. Zakładamy, że korzystasz z `libavcodec` do kodowania video, teorii jednak można używać przy innych kodekach.

Głównym założeniem tego przewodnika jest to, iż nie masz konkretnego docelowego rozmiaru pliku i nie masz problemu w oddaniu kilku bitów w zamian za poprawę jakości. Wiele informacji tutaj zawartych jest przydatnych w każdej sytuacji, ale niektóre mogą działać na Twoją niekorzyść jeżeli masz obrany cel w postaci wielkości pliku wynikowego, na przykład zmieszczeniu video na CD.

### 7.11.1. Stały Kwantyzator vs. dwu-przebiegowe

Istnieją trzy podejścia do kodowania video: stały bitrate (CBR), stały kwantyzator i kodowanie dwu-przebiegowe (ABR, uśredniony bitrate).

W każdym z tych trybów, `libavcodec` rozbija ramke na makroblok 16x16 pikseli i aplikuje kwantyzator do każdego makrobloku Im niższy kwantyzator, tym lepsza jakość i wyższy bitrate. Metoda jaką używa `libavcodec` do zdeterminowania jaki kwantyzator użyć do danego makrobloku zależy od wielu czynników i jest łatwo zmienialna. (Jest to bardzo ogólny opis prawdziwego procesu, ale warto rozumieć podstawowy koncept.)

Kiedy ustawisz stały bitrate, `libavcodec` zakoduje video, niszcząc najmniejszą ilość detali jaka jest potrzebna żeby pozostać poniżej wyznaczonej wartości bitrate. Jeżeli naprawdę nie zależy Ci na rozmiarze pliku mógłbyś użyć CBR i ustawić bitrate na nieskończoność. (W praktyce oznacza to liczbę tak wysoką aby nie stawiała żadnego limitu, np. 10000Kbit.). Bez prawdziwych ograniczeń `libavcodec` użyje dla każdego makrobloku możliwie najniższego kwantyzatora (zapisanego w zmiennej `vqmin`, która domyślnie jest ustawiona na 2). Gdy tylko ustawisz niższy bitrate `libavcodec` będzie zmuszony do użycia wyższego kwantyzatora, a więc i pogorszenia jakości video. Ogólnie, jeżeli zależy Ci na jakości wogóle nie powinieneś używać CBR.

Ze stałym kwantyzatorem, `libavcodec` używa kwantyzatora ustawionego przez opcję `vqscale` na każdym makrobloku. Jeżeli chcesz najwyższej możliwej jakości, igonrując bitrate, możesz użyć `vqscale=2`. Będzie to miało taki sam efekt jak ustawienie `vbitrate`=nieskończoność i domyślnie `vqmin` na 2 przy CBR.

Problemem przy stałym kwantyzowaniu jest to, iż używa on danego kwantyzatora czy makroblok potrzebuje go czy nie. To znaczy że można byłoby użyć wyższego kwantyzatora bez starty jakości obrazu. Po co tracić miejsce na niepotrzebnie niski kwantyzator? Twój procesor ma tyle cykli ile jest czasu, ale na twardym dysku jest ograniczona ilosć miejsca.

W dwu-przebiegowym kodowaniu, pierwszy przebieg zripuje film ze stałym bitratem (CBR), ale stworzy plik logujący właściwości każdej ramki. Te informacje są używane podczas drugiego przebiegu i na ich podstawie dobierany jest odpowiedni kwantyzator. Podczas szybkiej akcji lub scen z małą ilością detali, będzie użyty wysoki kwantyzator, a podczas wolnego ruchu lub scen z wieloma detalami niższy.

Jeżeli używasz `vqscale=2`, to tracisz miejsce. Jeżeli używasz `vqscale=3`, to nie dostaniesz najwyższej jakości. Przypuśćmy, że ripujesz DVD z opcją `vqscale=3`, a rezultatem jest 1800Kbit. Jeżeli zastosujesz dwu-przebiegowe kodowanie z `vbitrate=1800`, wyjściowe video będzie miało wyższą jakość dla tej samej wartości bitrate.

Ponieważ jesteś już przekonany, że dwu-przbiegowe kodowanie jest najlepszym rozwiązaniem, prawdziwym pytaniem jest jakiej użyć wartości bitrate? Nie ma jednoznacznej odpowiedzi. Idealna wartość jest najlepszym balansem między jakością a rozmiarem pliku. Zmienia się ona zależnie od źródłowego video.

Dobrym punktem startowym dla wysokiej jakości ripów jest 2000Kbit plus minus 200Kbit. Przy szybkiej akcji, wielu detalach lub poprostu gdy masz wysokie wymagania, możesz zdecydować się na 2400 lub 2600. Przy niektórych DVD, możesz nie zauważyć różnicy przy 1400KBit. Najlepiej jest troszkę poeksperymentować przy różnych wartościach bitrate.

### 7.11.2. Kadrowanie i Skalowanie

Normalne DVD ma rozdzielczość 720x480 dla NTSC i 720x576 dla PAL, ale jest jeszcze flaga mówiąca czy jest to obraz pełno ekranowy (4:3), czy panoramiczny (16:9). Wiele (jeżeli nie wszystkie) panoramiczne DVD nie są dokładnie 16:9, tylko 1.85:1 lub 2.35:1 (kineskop). Oznacza to iż pojawią się czarne pasy którę będą musiały być wykadrowane.

W tym miejscu pojawia się MPlayer posiadający opcję ustalającą prostokąt kadrowania (`-vf cropdetect`). Ponieważ MPEG-4 używa makrobloków 16x16, będziesz chciał aby każdy wymiar obrazu był wielokrotnością 16, w innym wypadku pogorszy się jakość szczególnie przy niskich wartościach bitrate. Możesz osiągnąć to zaokrąglając prostokąt kadrowania do najbliższej wielokrotności 16. Przy kadrowaniu będziesz chciał zwiększyć przesunięcie w osi y o połowę różnicy między starą a nową wartością tak aby obraz brany był z środka ramki. Z powodu sposobu w jaki obraz jest próbkowany na DVD musi to być przysta liczba. (Tak naprawdę nigdy nie używaj nieparzystych wartości przy kadrowaniu ani skalowaniu.) Jeżeli nie chcesz wyrzucać kilku pikseli, może wolisz zeskalować obraz. Przyjrzyjmy sie skalowaniu w naszym następnym przykładzie.

Uważaj też na "miękkie" czarne piksele na brzegach. Wykadruj je też, bo inaczej będziesz tracił bity którę zostaną wykorzystane lepiej gdzie indziej.

Po wszytskim, dostaniesz najprawdopodobniej video którego piksele nie są raczej ani 1.85:1 czy 2.35:1, tylko coś w pobliżu. Mógłbyś policzyć nowe proporcje obrazu ręcznie, ale MEncoder oferuje opcję biblioteki `libavcodec` o nazwie `autoaspect` która zrobi to za Ciebie. W żadnym wypadku nie skaluj pikseli w celu zrobienia z nich kwadratów, chyba że lubisz tracić miejsce na twardym dysku. Skalowanie powinno odbywać się przy odtwarzaniu, a odtwarzacz użyje proporcji zapisanych w nagłówku AVI, aby zdeterminować prawidłową rozdzielczość.

### 7.11.3. Audio

Dźwięk jest o wiele prostszym problemem do rozwiązania.: zostaw go poprostu takim jakim jest. Nawet strumienie AC3 5.1 są najwyżej 448Kbit/s i są one warte każdego bitu. Kuszące może wydawać się zakodowanie dźwięku do wysokiej jakości Ogg Vorbis, ale to że nie posiadasz dzisiaj odbiornika A/V do AC3 nie oznacza że nie będziesz go miał jutro. Zabezpiecz swoje ripy DVD zostawiając im strumień AC3.

### 7.11.4. Przeplot i Telecine

Prawie wszytskie filmy kręcone są z prędkością 24 fps. Ponieważ NTSC jest 29.97 fps, obraz 24 fps trzeba poddać działaniu kilku procesów aby mógł być on odtwarzany na szybkości NTSC. Proces ten nazywa się 3:2 pulldown, często wiązany z telecine (ponieważ pulldown jest często stosowany podczas procesu telecine), i naiwnie opisywany jako iż działa on przez zwalnianie filmu do 23.976 fps, i powtarzaniu co czwartej ramki.

Video w formacie PAL z DVD, o prędkość 25 fps nie jest poddawane żadnym specjalnym procesom. (Praktcznie, PAL może zostać poddany procesowi telcine, nazywanemu 2:2 pulldown, ale w praktyce to nie jest problemem.) Film 24 fps jest poprostu odtwarzany z prędkością 25 fps. W efekcie film leci trochę szybciej ale jeżeli nie jesteś kosmitą pewnie nie zauważysz różnicy. Większość DVD w PALu posiada poprawiony dźwięk, więc nawet przy odtwarzaniu z prędkością 25 fps będzie on brzmiał poprawnie, pomimo tego, iż ścieżka dźwiękowa (a wiec i cały film) jest odtwarzana 4% czasu krócej niż NTSC DVD.

Ponieważ video w PAL DVD nie zostało zmienione, nie musisz martwić się o tempo odtwarzania. Źródło jest 25 fps i Twoj rip będzie 25 fps. Jednakże, jeżeli ripujesz NTSC DVD, możliwe że będziesz musiał zastosować odwrócone telecine.

W filmach nakręconych w prędkości 24 fps, video na NTSC DVD jest albo ztelecinowane do 29.97 fps lub progresywne 24 fps i przeznaczone to telecine które ma zostać wykonane w locie przez odtwarzacz DVD. Z drugiej strony, seriale telewizyjne są zazwyczaj tylko przeplecione, nie ztelecionowane. Jednakże nie jest to regułą: niektóre seriale TV są przeplecione (jak Buffy Postrach Wampirów), a niektóre są miksturą progresywnego i przeplecionego video (jak Angel, lub 24 godziny).

Szczególnie polecamy do przeczytania sekcje o tym Jak sobie radzić z telecine i przeplotem w DVD w formacie NTSC.

Jeżeli, ripujesz tylko filmy, najprawdopodobniej musisz radzić sobie tylko z obrazem 24 fps progresywnym lub telecine. W takiej sytuacji możesz użyć fitru `pullup` (`-vf pullup,softskip`).

### 7.11.5. Filtrowanie

Ogólnie, chcesz filtrować jak najmniej aby pozostać najbliżej jak się da do źródłowego DVD. Kadrowanie jest zazwyczaj niezbędne (opisane powyżej), ale nie skaluj obrazu. Skalowanie w dół jest czasami preferowane zamiast wysokich kwantyzatorów, chcemy uniknąć obu tych rzeczy: pamiętaj co ustaliliśmy na początkum, że chcemy wymienać bity na jakość.

Również nie zmieniaj wartośći gamma, kontrastu, jasności, itd. To co wygląda dobrze na Twoim monitorze, może nie wyglądać dobrze na innych. Te ustawienia powinny być realizowane tylko przy odtwarzaniu.

Jedną rzeczą którą mógłbyś chcieć zrobić jest przepuszczenie obrazu przez lekki odszumiający filtr, tak jak np. `-vf hqdn3d=2:1:2`. Znów, jest to sprawa lepszego spożytkowania miejsca: po co tracić je na kodowanie szumów jeżeli możesz dodać je podczas odtwarzania? Zwiększenie parametrów `hqdn3d` zwiększy możliwości kompresji, ale jeżeli zwiększysz parametry za bardzo ryzykujesz utratę klarowności obrazu. Sugerowane powyżej wartości (`2:1:2`) są dość zachowawcze; spróbuj poeksperymentować z wyższmi wartościami i samemu porównać efekty.

### 7.11.6. Przykład

Kupiłeś wieć nowiutką kopię Harrego Pottera i Komnaty Tajemnic (oczywiście wersję panoramiczną) i chcesz zripować to DVD aby dodać ją do swojego komputerowego kina domowego. Jest to DVD z regionu 1, a więc NTSC. Poniższy przykład będzie działał z fomratem PAL jeżeli pomiesz opcję `-ofps 23.976` (ponieważ wejściowa szybkość jest taka sama jak wyjściowa), oczywiście paramtery kadrowania będą inne.

Po uruchomieniu `mplayer dvd://1`, podążamy opisem zawartym w sekcji Jak sobie radzić z telecine i przeplotem w DVD w formacie NTSC i odkrywamy, że jest to progresywne video 24 fps, co oznacza że nie musimy używać filtrów odwróconego telecine, jak `pullup` czy `filmdint`.

Następnie, chcemy zdeterminować odpowiedni prostokąt kadrowania, używamy fitru cropdetect:

    mplayer dvd://1 -vf cropdetect

Przewniń do w pełni wypełnionej ramki (jasna scena), i zobaczysz wyjście MPlayera na konsoli:

    crop area: X: 0..719  Y: 57..419  (-vf crop=720:362:0:58)

Teraz odtwarzamy film z tym fitrem aby sprawdzić jego poprawność:

    mplayer dvd://1 -vf crop=720:362:0:58

I widzimy że wygląda świetnie. Teraz, upewniamy sie że wymiary śa wielokrotnością 16 . Szerokość jest w porządku, niestety wysokość nie. Ponieważ nie oblaliśmy matematyki w liceum, wiemy że najbliższą wielokrotnościa 16 mniejszą niż 362 jest 352.

Moglibyśmy poprostu użyć `crop=720:352:0:58`, ale ładniej byłoby wziąć trochę z góry i z dołu aby utrzymać się na środku. Zmneijszylismy wysokość o 10 pikseli, ale nie chcemy zwiększyć przesunięcia y o 5 pikseli ponieważ jest to liczba nieparzysta i pogorszyłaby jakość. Zwiększymy zatem przesunięcie na osi y o 4 piksele:

    mplayer dvd://1 -vf crop=720:352:0:62

Innym powodem dla którego powinniśmy obcinać piksele równomiernie z góry i dołu są "połowy czarnych pikseli" które bezwzględnie powinniśmy obciąć jeżeli istnieją. Pamiętaj, jeżeli Twoje video jest ztelecinowane, upewnij się że filtr `pullup` (lub inny filtr odwróconego telecine który zdecydujesz się użyć) pojawia się w łańcuchu fitrów przed fitrem kadrowania. Jeżeli video posiada przeplot, usuń go przed kadrowaniem. (Jeżeli zdecydujesz się pozostawić przeplot, upewnij się że wertykalne przesunięcie kadrowania jest wielokrotnością 4.)

Jeżeli naprawdę jesteś przejęty utratą tych 10 pikseli, może wolisz przeskalować wymiary obrazu do najbliższej wielkortoności 16. Łańcuch fitrów powinen wyglądać tak:

    -vf crop=720:362:0:58,scale=720:352

Skalowanie video w dół oznacza utratę małej ilości detali, która będzie najprawdopodobnie niezauważalna. Skalowanie w góre oznacza utratę jakości (chyba że zwiększysz bitrate). Kadrowanie wyrzuca te piksele. Jest to wymiana jaką trzeba rozważyć w każdym wypadku. Na przykłąd, jeżeli DVD było zrobione dla telewizji, możesz chcieć uniknąć wertykalnego skalowania, ponieważ zestawienie linii odpowiada temu jak obraz był oryginalnie nagrywany.

Przy insepkcji widzimy że nasz film ma dużo akcji i szczegółów, wybieramy więc 2400Kbit na nasze bitrate.

Jesteśmy gotowi do dwu-przebiegowego kodowania. Przebieg 1:

    mencoder dvd://1 -ofps 23.976 -oac copy -vf crop=720:352:0:62,hqdn3d=2:1:2 -ovc lavc \
    -o Harry_Potter_2.avi

Drugi przebieg jest taki sam, podajemy tylko opcję `vpass=2`:

    mencoder dvd://1 -ofps 23.976 -oac copy -vf crop=720:352:0:62,hqdn3d=2:1:2 -ovc lavc \
    -o Harry_Potter_2.avi

Opcje `v4mv:mbd=2:trell` ogromnie poprawią jakość za cenę czasu kodowania. Opcje `cmp=3:subcmp=3:mbcmp=3` wybierają funkcje porównywania które wybierają lepsza jakość niż te domyśłne. Możesz poeksperymentować z tymi wartościami (skonsultuj stronę man co do prawidłowych wartości) ponieważ różne funkcję mogą mieć duży wpływ na jakość zależnie od matriału źródłowego. Na przykład, jeżeli `libavcodec` produkuje za dużo artefaktów możesz spróbować wybrać eksperymentalną funkcję NSSE jako funkcję porównującą przez `*cmp=10`.

Dla tego filmu, końcowe AVI będzie miało 138 minut i prawie 3GB. A ponieważ powiedziałeś że rozmiar nie ma znaczenia, to jest akceptowalna wielkość. Jednakże, jeżelli chciałbyś mniejszy plik, mógłbyś spróbować niższy bitrate. Zwiększanie wartości bitrate daje malejące rezultaty, więc jeżeli widać wyraźną róźnicę między 1800Kbit, a 2000Kbit, to nie znaczy że będzie lepiej powyżej 2000Kbit. Ekperymentuj aż będziesz zadowolony.

Ponieważ przepuściliśmy źródłowy obraz przez filtr odszumiający, możesz chcieć dodać go trochę podczas odtwarzania. To razem z fitrem postprocessingu `spp`, drastycznie poprawia odbiór obrazu i pomaga wyeliminować artefakty. W MPlayerze dostępna jest opcja `autoq`. W tym momencie możesz również poprawić gammę lub/i korekcję kolorów. Na przykład:

    mplayer Harry_Potter_2.avi -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3

Poprzedni | Początek rozdziału | Następny
7.10. Dowolne inter/intra matryce | Spis treści | 7.12. Jak radzić sobie telecine i przeplotem w NTSC DVD