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

Jednym z często zadawanych pytań jest "Jak zrobić rip najlepszej jakości przy danej objętości?". Innym pytaniem jest "Jak zrobić najlepszy możliwy rip? Nie ważne jaka będzie objętość, chcę najlepszej jakości."

To drugie pytanie jest przynajmniej źle postawione. W końcu, jeśli nie przejmujesz się wielkością pliku, mógłbyć po prostu skopiować strumień MPEG-2 z DVD. Pewnie, dostaniesz AVI wielkości około 5GB, ale jeśli chcesz najlepszej jakości i nie przejmujesz się wielkością to jest to najlepsze wyjście.

Tak na prawdę, powodem dla którego chcesz przekodować DVD na MPEG-4 jest to, że przejmujesz się wielkością pliku.

Ciężko jest pokazać książkowy przepis na tworzenie ripu DVD bardzo wysokiej jakości. Trzeba wziąć pod uwagę kilka czynników, i powinieneś rozumieć szczegóły procesu, albo jest duża szansa że nie będziesz zadowolony z wyników. Poniżej zbadamy niektóre problemy i pokażemy przykład. Zakładamy że używasz libavcodec do kodowania obrazu, chociaż ta sama teoria działą też przy innych kodekach.

Jeśli to wydaje Ci się za dużo, to pewnie powinieneś użyć jednej z wielu nakładek dostępnych w sekcji MEncodera naszej strony z powiązanymi projektami. W ten sposób, powinno się udać otrzymać ripy wysokiej jakości bez zbyt myślenia za dużo, ponieważ te narzędzia są projektowane by podejmować za Ciebie mądre decyzje.

7.1.1. Przygotowanie do kodowania: Identyfikowanie materiału źródłowego i framerate

Zanim w ogóle zaczniesz myśleć o kodowaniu filmu, musisz przejść kilka wstępnych kroków.

Pierwszym i najważniejszym krokiem przed kodowaniem powinno być ustalenie jakim typem filmu się zajmujesz. Jeśli Twój film jest z DVD albo telewizji (zwykłej, kablowej czy satelitarnej), będzie w jednym z dwóch formatów: NTSC w Ameryce Północnej i Japonii, PAL w Europie itp. Trzeba sobie jednak zdawać sprawę z tego, że jest to tylko format do prezentacji w telewizji, i często nie jest oryginalnym formatem filmu. Doświadczenie pokazuje że filmy NTSC są trudniejsze do kodowania, ponieważ jest więcej elementów do zidentyfikowania w źródle. Żeby zrobić odpowienie kodowanie musisz znać oryginalny format filmu. Nieuwzględnienie tego skutkuje wieloma wadami wynikowego pliku, na przykład brzydkie artefakty przeplotu i powtórzone albo zagubione klatki. Poza tym że są brzydkie, artefakty są też szkodliwe dla kodowania: Dostaniesz gorszą jakość na jednostkę bitrate.

7.1.1.1. Ustalanie źródłowego framerate

Poniżej jest lista popularnych typów materiału źródłowego, gdzie można je najczęściej znaleźć i ich własności:

  • Typowy film: Tworzony do wyświetlania przy 24fps.

  • Film PAL: Nagrywany kamerą video PAL z prędkością 50 pól na sekundę. Pole składa się tylko z parzystych albo nieparzystych linii klatki. Telewizja była projektowana by odświerzać je naprzemiennie, w charakterze taniej formy analogowej kompresji. Ludzkie oko podobno kompensuje ten efekt, ale jeśli zrozumiesz przeplot nauczysz się go widzieć też w telewizji i nigdy już nie będziesz z niej ZADOWOLONY. Dwa pola nie dają pełnej klatki, ponieważ są uchwycone co 1/50 sekundy, więc nie pasują do siebie, chyba że nie ma ruchu.

  • Film NTSC: Nagrany kamerą NTSC z prędkością 60000/1001 pól na sekundę, albo 60 pól na sekundę w erze przedkolorowej. Poza tym podobny do PAL.

  • Animacja: Zazwyczaj rysowana przy 24fps, ale zdarzają się też z mieszanym framerate.

  • Grafika komputerowa (CG): Może być dowolny framerate, ale niektóre są częstsze niż inne; wartości 24 i 30 klatek na sekundę są typowe dla NTSC, a 25fps jest typowe dla PAL.

  • Stary film: Rozmaite niższe framerate.

7.1.1.2. Identyfikowanie materiału źródłowego

Filmy składające się z klatek nazywa się progresywnymi, podczas gdy te składające się z niezależnych pól nazywa się z przeplotem, albo filmem - chociaż ten drugi termin jest niejasny.

Żeby nie było za łatwo, niektóre filmy są kombinacją kilku powyższych typów.

Najważniejszą różnicą między tymi formatami, jest to że niektóre są oparte na klatkach a inne na polach. Zawsze gdy film jest przygotowywany do wyświetlania w telewizji jest przekształcany na format oparty na polach. Rozliczne metody którymi się tego dokonuje są wspólnie nazywane "telecine", a niesławne "3:2 pulldown" z NTSC jest jednym z jego rodzajów. Jeżeli oryginał nie był też oparty na polach (z tą samą prędkością), dostajesz film w innym formacie niż oryginał.

Jest kilka popularnych typów pulldown:

  • pulldown PAL 2:2: Najprzyjemniejszy z nich wszystkich. Każda klatka jest pokazywana przez czas dwóch pól, poprzez wydobycie parzystych i nieparzystych linii i pokazywanie ich na przemian. Jeśli oryginalny materiał miał 24fps, ten proces przyspiesza film o 4%.

  • pulldown PAL 2:2:2:2:2:2:2:2:2:2:2:3: Każda 12ta klatka jest pokazywana przez czas trzech pól zamiast tylko dwóch. Dzięki temu nie ma przyspieszenia o 4%, ale proces jest o wiele trudniejszy do odtworzenia. Zazwyczaj występuje w produkcjach muzycznych, gdzie zmiana prędkości o 4% poważnie by uszkodziła muzykę.

  • NTSC 3:2 telecine: Klatki są pokazywane na przemian przez czas 3ch albo 2ch pól. To daje częstotliwość pól 2.5 raza większą niż oryginalna częstotliwość klatek. Rezultat jest też lekko zwolniony z 60 pól na sekundę do 60000/1001 pól na sekundę by utrzymać częstotliwość pól w NTSC.

  • NTSC 2:2 pulldown: Używane do pokazywania materiałów 30fps na NTSC. Przyjemne, tak jak pulldown 2:2 PAL.

Są też metody konwersji między filmami PAL i NTSC, ale ten temat wykracza poza zakres tego podręcznika. Jeśli natkniesz się na taki film i chcesz go zakodować, to największe szanse masz robiąc kopię w oryginalnym formacie. Konwersja między tymi dwoma formatami jest wysoce destrukcyjna i nie może zostać ładnie odwrócona, więc kodowanie będzie o wiele gorszej jakości jeśli jest robione z przekonwertowanego źródła.

Gdy film jest zapisywany na DVD, kolejne pary pól są zapisywane jako klatka, pomimo tego że nie są przezaczone do wyświetlania razem. Standard MPEG-2 używany na DVD i w cyfrowej TV pozwala na zakodowanie oryginalnej progresywnej klatki i na przechowanie w nagłówku klatki ilości pól przez które ta klatka powinna być pokazana. Filmy zrobione przy użyciu tej metody są często określane mianem "miękkiego telecine" (soft-telecine), ponieważ proces ten tylko informuje odtwarzacz że ma on zastosować pulldown, a nie stosuje go samemu. Tak jest o wiele lepiej, ponieważ może to zostać łatwo odwrócone (a tak na prawdę zignorowane) przez koder i ponieważ zachowuje możliwie najwyższą jakość. Niestety, wielu producentów DVD i stacji nadawczych nie stosuje prawidłowych technik kodowania ale w zamian produkuje filmy przy użyciu "twardego telecine" (hard-telecine), gdzie pola są faktycznie powtórzone w zakodowanym MPEG-2.

Procedury radzenia sobie z takimi przypadkami będą omówione w dalszej części przewodnika. Teraz podamy tylko kilka wskazówek jak identyfikować z jakim typem materiału mamy do czynienia.

Regiony NTSC:

  • Jeśli MPlayer wyświetla w trakcie oglądania filmu że framerate zostało zmienione na 24000/1001 i nigdy nie powraca, to jest to prawie na pewno progresywny materiał na którym zastosowano "miękkie telecine".

  • Jeśli MPlayer pokazuje że framerate zmienia się między 24000/1001 i 30000/1001 i czasami widzisz "grzebienie" to jest kilka możliwości. Kawałki 24000/1001fps są prawie na pewno progresywne, poddane "miękkiemu telecine", ale fragmenty 30000/1001 fps mogą albo być 24000/1001 poddanym "twardemu telecine" albo filmem NTCS o 60000/1001 polach na sekundę. Używaj tych samych metod co w następnych dwóch przypadkach żeby je odróżnić.

  • Jeśli MPlayer nigdy nie pokazuje informacji o zmianie framerate i każda klatka z ruchem wygląda jak grzebień, to masz film NTSC z 60000/1001 polami na sekundę.

  • Jeśli MPlayer nigdy nie pokazuje informacji o zmianie framerate i dwie klatki z każdych pięciu mają grzebienie, to film jest 24000/1001 fps poddanym "twardemu telecine".

Regiony PAL:

  • Jeśli nie widzisz grzebieni, to jest to 2:2 pulldown.

  • Jeśli na przemian przez pół sekundy widzisz grzebienie a potem nie, to masz 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.

  • Jeśli zawsze widzisz grzebienie w trakcie ruchu, to film jest filmem PAL wyświetlanym z 50 polami na sekundę.

Podpowiedź:

MPlayer może zwolnić odtwarzanie filmu opcją -speed albo odtwarzać klatka po klatce. Spróbuj użyć opcji -speed 0.2 żeby oglądać film bardzo wolno, albo naciskaj wielokrotnie klawisz "." żeby wyświetlać klatka po klatce. Może to pomóc zidentyfikować wzorzec jeśli nie możesz go dostrzec przy pełnej prędkości.

7.1.2. Stały kwantyzator a tryb wieloprzebiegowy

Jest możliwe zakodowanie filmu z szeroką gamą jakości. Z nowoczesnymi koderami i odrobiną kompresji przed kodekiem (zmniejszenie rozdzielczości i usuwanie szumu), możliwe jest osiągnięcie bardzo dobrej jakości przy 700 MB, dla 90-110 minutowego filmu kinowego. Dodatkowo tylko najdłuższe filmy nie dają się zakodować na 1400 MB z prawie doskonałą jakością.

Są trzy podejścia do kodowania video: stały bitrate (CBR), stały kwantyzator i tryb wieloprzebiegowy (ABR, uśrednione bitrate).

Złożoność klatek filmu, a zatem i ilość bitów potrzebna na ich zakodowanie, może się bardzo mocno zmieniać w zależności od sceny. Nowoczesne kodery potrafią się dostosowywać do tych zmian i zmieniać bitrate. Jednak w prostych trybach, takich jak CBR, kodery nie znają zapotrzebowania na bitrate w przyszłych scenach, więc nie mogą na długo przekraczać wymaganego bitrate. Bardziej zaawansowane tryby, takie jak kodowanie wieloprzebiegowe, potrafią wziąć pod uwagę statystyki z poprzednich przebiegów, co naprawia ten problem.

Uwaga:

Większość kodeków obsługujących kodowanie ABR obsługuje tylko kodowanie dwuprzebiegowe, podczas gdy niektóre inne, na przykład x264 albo Xvid potrafią wykonywać wiele przebiegów, z lekką poprawą jakości po każdym przebiegu. Jednak ta poprawa nie jest zauważalna ani mierzalna po około 4tym przebiegu. Dlatego też, w tej części, tryb dwuprzebiegowy i wieloprzebiegowy będą używane zamiennie.

W każdym z tych trybów, kodek video (na przykład libavcodec) dzieli klatkę obrazu na makrobloki 16x16 pikseli i stosuje do każdego z nich kwantyzator. Im niższy kwantyzator, tym lepsza jakość i tym wyższe bitrate. Metody jakiej koder używa do ustalenia kwantyzatora są różne i można nimi sterować. (Jest to straszliwe uproszczenie, ale wystarcza do zrozumienia podstaw.)

Kiedy podajesz stałe bitrate, kodek koduje usuwając tyle szczegółów ile musi i tak mało jak to tylko możliwe żeby pozostać poniżej podanego bitrate. Jeśli na prawdę nie obchodzi cię wielkość pliku, możesz użyć CBR i podać nieskończone bitrate (W praktyce oznacza to bitrate na tyle wysokie że nie stanowi bariery, na przykład 10000Kbit.) Bez żadnego ograniczenia na bitrate kodek użyje najniższego możliwego kwantyzatora do każdej klatki (ustalonego dla libavcodec opcją vqmin, domyślnie 2). Gdy tylko podasz bitrate na tyle niskie że kodek musi używać wyższego kwantyzatora, to prawie na pewno niszczysz film. Żeby tego uniknąć, powinieneś pewnie zmniejszyć rozdzielczość filmu, metodą opisaną dalej. Ogólnie, jeśli zależy Ci na jakości, powinieneś unikać CBR.

Przy stałym kwantyzatorze, kodek używa na każdym makrobloku tego samego kwantyzatora, podanego opcją vqscale (w przypadku libavcodec). Jeśli chcesz możliwie najlepszy efekt, znów ignorując bitrate, możesz użyć vqscale=2. Da to ten sam bitrate i PSNR (peak signal-to-noise ratio, szczytowa proporcja sygnału do szumu) co CBR z vbitrate=nieskończoność i domyślnym vqmin.

Problemem przy stałym kwantyzatorze jest to, że używa podanego kwantyzatora niezależnie od tego czy makroblok tego wymaga czy nie. To znaczy że można by było zastosować do makrobloku wyższy kwantyzator bez utraty postrzegalnej jakości. Dlaczego marnować bity na niepotrzebnie niski kwantyzator? Mikroprocesor ma tyle cykli ile jest czasu, ale jest tylko ograniczona ilość bitów na twardym dysku.

Przy kodowaniu dwuprzebiegowym, pierwszy przebieg potraktuje film jak przu ustawieniu CBR, ale zachowa informacje o własnościach każdej klatki. Te dane są później używane przy drugim przebiegu do podejmowania słusznych decyzji o używanym kwantyzatorze. Przy szybkich scenach albo niewielu szczegółach pewnie użyje większego kwantyzatora, podczas gdy dla powolnych, szczegółowych scen będzie niższy kwantyzator.

Jeśli używasz vqscale=2 to marnujesz bity. Jeśli używasz vqscale=3 to nie dostajesz najlepszej możliwej jakości. Załóżmy że zakodowałeś swoje DVD przy vqscale=3 i dostałeś bitrate 1800Kbit. Jeśli zrobisz dwa przebiegi z vbitrate=1800 ostateczny wynik będzie miał wyższą jakość przy tym samym bitrate.

Ponieważ jesteś już przekonany że prawidłowym wyborem są dwa przebiegi, prawdziwym pytaniem jest jakiego bitrate użyć. Nie ma jednej odpowiedzi. Idealnie chcesz wybrać bitrate będący najlepszym kompromisem między jakością a wielkością pliku. To się zmienia w zależności od filmu.

Jeśli wielkość nie ma znaczenia, dobrym punktem wyjściowym do bardzo wysokiej jakości jest około 2000Kbit plus minus 200Kbit. Jeśli jest dużo akcji albo szczegółów, albo po prostu masz bardzo wrażliwe oko, możesz się zdecydować na 2400 albo 2600. Przy niektórych DVD możesz nie zauważyć różnicy przy 1400Kbit. Dobrym pomysłem jest poeksperymentowanie z kilkoma scenami i różnymi wartościami bitrate żeby nabrać wyczucia.

Jeśli chcesz konkretnej wielkości, musisz jakoś obliczyć bitrare. Ale zanim to zrobisz, musisz wiedzieć ile miejsca potrzebujesz na dźwięk, więc powinieneś ściągnąć go najpierw. Możesz wyliczyć bitrate z następującego równania: bitrate = (wielkość_docelowa_w_MBajtach - wielkość_dźwięku_w_MBajtach) * 1024 * 1024 / długość_w_sekundach * 8 / 1000 Na przykład by wcisnąć dwugodzinny film na płytkę 702MB, z 60MB ścieżki dźwiękowej, bitrate video musi być: (702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 = 740kbps

7.1.3. Ograniczenia efektywnego kodowania

Ze względu na naturę kodowania typu MPEG istnieją różne ograniczenia których warto się trzymać żeby osiągnąć najlepszą jakość. MPEG dzieli obraz na kwadraty 16x16 pikseli nazywane makroblokami, każdy z nich składa się z 4 bloków 8x8 informacji o jasności (luminancja, luma) i dwóch 8x8 z połową rozdzielczości (jeden na składową czerwono-morską, drugi na niebiesko-żółtą). Nawet jeśli wysokość i szerokość filmu nie są wielokrotnościami 16, koder użyje tyle makrobloków żeby przykryć cały obszar obrazu, dodatkowa przestrzeń zostanie zmarnowana. Zatem w interesie zwiększenai jakości przy utrzymaniu wielkości pliku kiepskim pomysłem jest używanie wymiarów które nie są wielokrotnością 16.

Większość DVD ma też jakieś czarne ramki na brzegach. Zostawienie ich tam mocno zaszkodzi jakości na kilka sposobów.

  1. Kompresje typu MPEG są zależne od transformat przestrzeni częstotliwości, a dokładniej Dyskretnej Transformaty Cosinusowej (DCT), która jest podobna do transformaty Fouriera. Ten sposób kodowania jest efektywny przy wzorach i gładkich przejściach, ale kiepsko sobie radzi z ostrymi krawędziami. Żeby je zakoować, musi używać o wiele większej liczby bitów, albo wystąpią artefakty znane jako pierścienie.

    Transformacja częstotliwości (DCT) jest stosowana osobno do każdego makrobloku (tak na prawdę do każdego bloku), więc ten problem istnieje tylko gdy ostra krawędź jest wewnątrz bloku. Jeśli czarna ramka zaczyna się dokładnie na krawędzi 16-pikselowego bloku, nie stwarza problemów. Jednakże, rzadko kiedy takie ramki są ładnie wyrównane, więc zazwyczaj będzie trzeba przyciąć obraz żeby tego uniknąć.

Poza transformatami przestrzeni częstotliwości, kompresje typu MPEG używają wektorów ruchu, by reprezentować zmiany między sąsiednimi klatkami. Oczywiście wektory ruchu są mniej efektywne w stosunku do nowej treści przychodzącej z brzegów obrazka, ponieważ nie było jej na poprzedniej klatce. Jeśli obraz rozciąga się do krawędzi zakodowanego regionu, wektory ruchu radzą sobie z treścią wychodzącą poza krawędzie. Jednak jeśli są ramki, mogą być kłopoty:

  1. Dla każdego makrobloku, kompresja typu MPEG przechowuje wektor opisujący która część poprzedniej klatki powinna być skopiowana do tego makrobloku jako podstawa do przewidzenia następnej klatki. Zakodowane wtedy muszą być tylko różnice. Jeśli makroblok zawiera fragment ramki, to wektory ruchu z pozostałych cześci obrazu zamażą obramowanie. Oznacza to że dużo bitów będzie zużytych albo na jej powtórne zaczernienie albo (co bardziej prawdopodobne), wektor ruchu w ogóle nie będzie użyty i wszystkie zmiany w tym makrobloku będzie trzeba zakodować bezpośrednio. W obu przypadkach, bardzo cierpi na tym efektywność kodowania.

    Powtórnie, ten problem występuje tylko jeśli ramki nie są na krawędziach 16-pikselowych bloków.

  2. W końcu, przypuśćmy że mamy makroblok wewnątrz obrazu i obiekt dostaje się do niego z okolic krawędzi. Kodowanie typu MPEG nie potrafi powiedzieć "skopiuj część która jeest wewnątrz obraka, ale nie czarne obramowanie." Dlatego obramowanie też zostanie skopiowane i trzeba będzie zużyć sporo bitów żeby zakodować fragment obrazu który powinien tam być.

    Jeśli obraz sięga do krawędzi zakodowanego obszaru, MPEG ma specjalne optymalizacje do wielokrotnego kopiowania ostatniego rzędu pikseli jeśli wektor ruchu przychodzi z poza zakodoanego obszaru. Staje się to bezużyteczne gry obraz ma czarne obramowanie. W odróżnieniu od problemów 1 i 2 tutaj nic nie pomoże ustawienie obramowania w odpowiednim miejscu.

  3. Mimo tego, że obramowanie jest całkowicie czarne i nigdy się nie zmienia, zawsze jest pewien narzut związany z większą ilością makrobloków.

Ze wszystkich tych powodów zalecane jest całkowite wycięcie czarnych obramowań. Dodatkowo, jeśli przy krawędziach jest obszar zakłóceń/zniekształceń, obcięcie go również poprawi efektywność kodowania. Puryści, którzy chcą możliwie dokładnie zachować oryginał mogą się sprzeciwiać, ale jeśli nie planujesz używać stałego kwantyzatora to jakość uzyskana dzięki skadrowaniu znacząco przewyższy utratę informacji przy brzegach.

7.1.4. Kadrowanie i skalowanie

Przypomnijmy z poprzedniej części że ostateczna wielkość (wysokość i szerokość) obrazu do kodowania powinna być wielokrotnością 16. Można to osiągnąć kadrowaniem, skalowaniem albo kombinacją obydwu.

Przy kadrowaniu, jest kilka reguł których musimy przestrzegać by uniknąć uszkodzenia filmu. Zwykły format YUV, 4:2:0, przechowuje wartości koloru podpróbkowane, czyli kolor jest próbkowany o połowę rzadziej w każdym kierunku niż jasność. Spójrzmy na diagram, na którym L oznacza punkty próbkowania jasności (luma) a C koloru (chroma).

LLLLLLLL
CCCC
LLLLLLLL
LLLLLLLL
CCCC
LLLLLLLL

Jak widać, wiersze i kolumny obrazu w sposób naturalny łączą się w pary. Dlatego przesunięcia i wymiary kadrowania muszą być liczbami parzystymi. Jeśli nie są, barwa nie będzie już dobrze dopasowana do jasności. Teoretycznie możliwe jest kadrowanie z nieparzystym przesunięciem, ale wymaga to przepróbkowania kolorów, co jest potencjalnie stratną operacją nie obsługiwaną przez filtr kadrowania.

Dalej, film z przeplotem jest kodowany jak poniżej:

Górne poleDolne pole
LLLLLLLL        
CCCC        
        LLLLLLLL
LLLLLLLL        
        CCCC
        LLLLLLLL
LLLLLLLL        
CCCC        
        LLLLLLLL
LLLLLLLL        
        CCCC
        LLLLLLLL

Jak widać, wzór powtarza się dopiero po 4 liniach. Dlatego przy filmie z przeplotem, pionowa współrzędna i wysokość kadrowania muszą być wielokrotnościami 4.

Podstawową rozdzielczością DVD jest 720x480 dla NTSC i 720x576 dla PAL, ale jest też flaga proporcji, która określa czy obraz jest ekranowy (4:3) czy panoramiczny (16:9). Wiele (jeśli nie większość) panoramicznych DVD nie jest dokładnie 16:9 tylko raczej 1,85:1 lub 2,35:1 (cinescope). Oznacza to że będzie czarne obramowanie na filmie, które trzeba usunąć.

MPlayer dostarcza filtr wykrywania kadrowania (-vf cropdetect), który określi prostokąt kadrowania. Uruchom MPlayera z opcją -vf cropdetect a wydrukuje on ustawienia kadrowania potrzebne do usunięcia obramowania. Powinieneś puścić film wystarczająco długo żeby został użyty cały obszar obrazu, inaczej wartości będą niedokładne.

Potem przetestuj otrzymane wartości z użyciem MPlayera, przekazując opcje podane przez cropdetect i dostosowując prostokąt według potrzeb. Filtr rectangle może w tym pomóc, pozwalając na interaktywne ustawienie prostokąta kadrowania na filmie. Pamiętaj, by trzymać się powyższych reguł podzielności, żeby nie przestawić płaszczyzny koloru.

W pewnych przypadkach skalowanie może być niepożądane. Skalowanie w kierunku pionowym jest trudne przy filmie z przeplotem, a jeśli chcesz zachować przeplot, zazwyczaj powinieneś się wstrzymać od skalowania. Jeśl nie chcesz skalować, ale nadal chcesz używać wymiarów będących wielokrotnościami 16 to musisz przekadrować. NIe należy niedokadrowywać, bo obramowania są bardzo szkodliwe przy kodowaniu!

Ponieważ MPEG-4 używa makrobloków 16x16, powinieneś się upewnić, że każdy wymiar kodowanego filmu jest wielokrotnością 16, inaczej degradujemy jakość, zwłaszcza przy niższych bitrate. Można tego dokonać zaokrąglając wysokość i szerokość prostokąta kadrowania do najbliższej wielokrotności 16. Jak powiedziano wcześniej, trzeba zwiększyć przesunięcie pionowe o połowę różnicy między starą a nową wysokością, żeby wynikowy film był brany ze środka klatki. A ze względu na sposób w jaki próbkowane jest DVD, upewnij się że przesunięcie jest parzyste (w zasadzie, stosuj się do reguły, żeby nigdy nie używać nieparzystych wartości przy przycinaniu i skalowaniu obrazu). Jeśli nie czujesz się dobrze odrzucając dodatkowe piksele, może wolisz przeskalować video. Przyjżymy się temu w przykładzie poniżej. Możesz też pozwolić filtrowi cropdetect zrobić to wszystko za Ciebie, jako że ma on opcjonalny parametr round (zaokrąglenie), domyślnie równy 16.

Uważaj też na "poł-czarne" piksele na przegach. Też je wykadruj, albo będziesz na nie marnował bity któ?e przydadzą się gdzie indziej.

Po tym wszystkim prawdopodobnie dostaniesz film który nie ma dokładnie proporcji 1,85:1 ani 2,35:1 tylko coś podobnego. Mógłbyś samemu policzyć nowe proporcje, ale MEncoder ma pocję do libavcodec nazywaną autoaspect która zrobi to za Ciebie. Nie powinieneś przeskalowywać video żeby wyrównać piksele, chyba że chcesz marnować miejsce na dysku. Skalowanie powinno być robione przy odtwarzaniu, a odtwarzacz używa informacji o proporcjach zapisanych w AVI żeby określić prawidłową rozdzielczość. Niestety, nie wszystkie odtwarzacze uznają te informacje, dlatego mimo wszystko możesz chcieć przeskalować.

7.1.5. Dobieranie rozdzielczości i bitrate

Jeśli nie kodujesz w trybie stałego kwantyzatora, musisz wybrać bitrate. Jest to dość prosta rzecz – to (średnia) ilość bitów jaka będzie używana do zakodowania jednej sekundy filmu. Zazwyczaj bitrate mierzy się w kilobitach (1000 bitów) na sekundę. Wielkość filmu na dysku to bitrate razy długość filmu, plus drobne "dodatki" (patrz na przykład sekcja o kontenerze AVI ). Pozostałe parametry, takie jak skalowanie, kadrowanie itp. nie zmienią wielkości pliku jeśli nie zmienisz też bitrate!

Bitrate nie skaluje się proporcjonalnie do rozdzielczości. To znaczy, film 320x240 w 200 kbit/s nie będzie tej samej jakości co ten sam film w 640x480 i 800 kbit/s! Są ku temu dwie przyczyny:

  1. Wizualna: Łatwiej zauważyć artefakty MPEG jeśli są bardziej powiększone! Artefakty powstają na poziomie bloków (8x8). Ludzkie oko trudniej dostrzega błędy w 4800 małych blokach niż w 1200 dużych (zakładając że skalujesz na pełny ekran).

  2. Teoretyczna: Kiedy zmniejszasz obraz ale nadal używasz tych samych bloków 8x8 do transformacji przestrzeni częstotliwości. masz więcej danych w pasmach wyższych częstotliwości. W pewien sposób każdy piksel ma więcej szczegółów niż poprzednio. Dlatego, mimo że przeskalowany obraz zawiera 1/4 informacji jeśli chodzi o wielkość, to nadal może zawierać większość informacji w przestrzeni częstotliwości (zakładając że wysokie częstotliwości były mało używane w oryginalnym filmie 640x480).

Poprzednie podręczniki zalecały dobranie bitrate i rozdzielczości w sposób bazujący na podejściu "bity na piksel", ale z powyższych powodów zazwyczaj nie jest to prawidłowe. Lepszym przybliżeniem zdaje się skalowanie bitrate proporcjonalnie do pierwiastka kwadratowego z rozdzielczości, czyli film 320x240 i 400 kbit/s powinien być podobny do 640x480 i 800 kbit/s. Nie zostało to jednak zweryfikowane ani teoretycznie ani empirycznie. Dodatkowo, ponieważ filmy są bardzo zróżnicowane jeśli chodzi o szum, szczegóły, ilość ruchu itp. bezsensowne jest podawanie ogólnych zaleceń na bity na przekątą (analogia bitów na piksel używająca pierwiastka).

Omówiliśmy więc problemy z wyborem bitrate i rozdzielczości.

7.1.5.1. Obliczanie rozdzielczości

Następne kroki przeprowadzą Cię przez obliczenie rozdzielczości dla Twojego filmu bez zniekształcania go za bardzo, biorąc pod uwagę kilka typów informacji o źródłowym filmie. Najpierw powinieneś policzyć zakodowane proporcje: ARc = (Wc x (ARa / PRdvd )) / Hc

gdzie:

  • Hc i Wc to wysokość i szerokość skadrowanego filmu.

  • ARa do wyświetlane proporcje, zazwyczaj 4/3 lub 16/9.

  • PRdvd to proporcje na DVD równe 1,25=(720*576) dla DVD PAL i 1,5=(720/480) dla VD NTSC.

Potem możesz policzyć rozdzielczość X i Y, zgodnie z dobranym wskażnikiem Jakości Kompresji (Compression Quality, CQ): RozY = INT(Pierw( 1000*Bitrate/25/ARc/CQ )/16) * 16 i RozX = INT( ResY * ARc / 16) * 16, gdzie INT oznacza zaokrąglenie do liczby całkowitej.

Dobrze, ale co to jest CQ? CQ reprezentuje ilość bitów na piksel i klatkę kodowania. Z grubsza biorąc, im większe CQ tym mniejsza szansa na zobaczenie artefaktów kodowania. Jednakże, jeśli masz docelową wielkość filmu (na przykład 1 lub 2 płyty CD), masz ograniczoną ilość bitów do zużycia; dlatego musisz znaleźć równowagę między poziomem kompresji i jakością.

CQ zależy od bitrate, efektywności kodeka video i rozdzielczości filmu. Żeby podnieść CQ zazwyczej zmniejszysz film, ponieważ bitrate jest funkcją docelowej wielkości i długości filmu, które są stałe. Przy użyciu kodeków MPEG-4 ASP, takich jak Xvid i libavcodec, CQ niższe niż 0,18 zazwyczaj daje kiepski obraz, ponieważ nie ma dość bitów by zakodować informacje z każdego makrobloku. (MPEG4, jak wiele innych kodeków, grupuje piksele w bloki żeby skompresować obraz. Jeśli nie ma dość bitów widać krawędzie tych bloków.) Dlatego też mądrze jest wybrać CQ w zakresie 0,20 do 0,22 na film jednopłytkowy i 0,26-0,28 na dwupłytkowy przy standardowych opcjach kodowania. Bardziej zaawansowane opcje kodowania, takie jak te podane tutaj dla libavcodec i Xvid powinny umożliwić otrzymanie takiej samej jakości z CQ w zakresie 0,18 do 0,20 na 1 CD i 0,24 do 0,26 na 2 CD. Z kodekami MPEG-4 AVC, takimi jak x264, możesz używać CQ w zakresie 0,14 do 0,16 przy standardowych opcjach a powinno się też udać zejść do 0,10 do 0,12 z zaawansowanymi opcjami kodowania x264.

Pamiętajmy, że CQ jest tylko przydatnym odnośnikiem, zależnym od kodowanego filmu. CQ równe ,018 może wyglądać dobrze przy Bergmanie, w przeciwieństwie do filmu takiego jak Martix, który zaawiera wiele bardzo ruchliwych scen. Z drugiej strony, bezsensowne jest podnoszenie CQ powyżej 0,30 jako że marnuje się bity bez zauważalnej poprawy jakości. Pamiętajmy też że, jak było wspomniane wcześniej, filmy w niższej rozdzielczości potrzebują większego CQ (w porównaniu do na przykład rozdzielczości DVD) żeby dobrze wyglądać.

7.1.6. Filtrowanie

Bardzo ważne do robienia dobrych kodowań jest nauczenie się posługiwania systemem filtrów MEncodera. Całe przetwarzanie video jest wykonywane przez filtry – kadrowanie, skalowanie, dopasowywanie kolorów, usuwanie szumu, telecine, odwrócone telecine, usuwanie bloków żeby wymienić choć część. Poza dużą ilością obsługiwanych formatów wejściowych to właśnie zakres dostępnych filtrów jest jedną z głównych przewag MEncodera nad podobnymi programami.

Filtry są ładowane do łańcucha przy pomocy opcji -vf:

-vf filtr1=opcje,filtr2=opcje,...

Większość filtrów przyjmuje kilka parametrów numerycznych oddzielanych dwukropkami, ale dokładna składnia zależy od filtru więc szczegóły odnośnie filtrów, które chcesz zastosować, znajdziesz na stronie man.

Filtry działają na filmie w kolejnoścy w jakiej zostały załadowane. Na przykład następujący łańcuch:

-vf crop=688:464:12:4,scale=640:464

najpierw skadruje fragment 688x464 filmu z lewym górnym rogiem na pozycji (12,4) a potem zmniejszy rozdzielczość wyniku do 640x464.

Niektóre filtry trzeba ładować na początku lub blisko początku łańcucha, ponieważ korzystają one z informacji którą następne filtry mogą zgubić lub unieważnić. Sztandarowym przykłądem jest pp (postprocessing, tylko gdy wykonuje operacje usuwania bloków lub pierścieni), spp (inny postprocessor do usuwania artefaktów MPEG), pullup (odwrócone telecine) i softpulldown (konwertuje miękkie telecine na twarde).

W ogólności chcesz przeprowadzać jak najmniej filtrowania żeby film pozostał możliwie bliski oryginałowi. Kadrowanie często jest niezbęne (jak opisano powyżej) ale staraj się uniknąć skalowania. Chociaż czasami zmniejszenie rozdzielczości jest lepszym wyjściem niż użycie wyższego kwantyzatora, chcemy uniknąć obu: pamiętajmy, że od początku zdecydowaliśmy się wybrać jakość kosztem wielkości.

Nie należy też dostosowywać gammy, kontrastu, jasności itp. Co wygląda dobrze na Twoim ekranie może nie być tak dobre na innych. Takie dostrojenia powinny być wykonywane tylko przy odtwarzaniu.

Jedną rzeczą którą możesz chcieć zrobić, jest przepuszczenie filmu przez bardzo lekkie usuwanie szumów, takie jak -vf hqdn3d=2:1:2. Znów, to kwestia lepszego zastosowania bitów: po co marnować je na zakodowanie szumu skoro można dodać ten szum przy odtwarzaniu? Zwiększenie parametrów dla hqdn3d jeszcze bardziej poprawi kompresowalność, ale jeśli przesadzisz to zauważalnie zniekształcisz obraz. Wartości sugerowane powyżej (2:1:2) są dość konserwatywne; nie bój się eksperymentować z wyższymi wartościami i samemu oceniać wyniki.

7.1.7. Przeplot i telecine

Prawie wszystkie filmy są kręcone przy 24 fps. Ponieważ NTSC ma 30000/1001 fps potrzebna jest pewna przeróbka żeby film 24 fps mógł być wyświetlany z prawidłową szybkością NTSC. Ten proces nazywa się 3:2 pulldown, często zwany też telecine (ponieważ jest używany przy konwersji z kina do telewizji) i, w uproszczeniu, jest to spowolnienie filmu do 24000/1001 fps i powtórzenie co czwartej klatki.

Filmy DVD PAL, odtwarzanie przy 25 fps, nie wymagają żadnego specjalnego traktowania. (Technicznie rzecz ujmując, PAL może być poddany telecine, nazywanemu 2:2 pulldown, ale w praktyce nie jest to problemem.) Po prostu film 24 fps jest odtwarzany przy 25 fps. W wyniku tego film jest odtwarzany odrobinkę szybciej, ale jeśli nie masz nieziemskich zmysłów to tego nie zauważysz. Większość DVD PAL ma skorygowaną wysokość dźwięku, więc kiedy są odtwarzane przy 25 fps dźwięk będzie brzmiał poprawnie, mimo tego że ścieżka dźwiekowa (jak i cały film) jest o 4% krótsza niż DVD NTSC.

Ponieważ film na DVD PAL nie został zmieniony, nie ma powodu za bardzo przejmować się framerate. Oryginał ma 25 fps i Twój rip też będzie miał 25 fps. Jednak jeśli ripujesz film z DVD NTSC możesz być zmuszony do zastosowania odwrotnego telecine.

Dla filmów nagrywanych przy 24 fps obraz na DVD NTSC jest albo poddany telecine na 30000/1001 albo jest progresywny przy 24000/1001 i przeznaczony do poddania telecine w locie przez odtwarzacz DVD. Z drugiej strony seriale telewizyjne zazwyczaj mają tylko przeplot, nie są poddane telecine. Nie jest to reguła: Niektóre seriale (na przykład Buffy Łowca Wampirów) mają przeplot, a inne są mieszanką progresywnego i przeplotu (Angel, 24).

Jest wysoce zalecane żebyś przeczytał sekcję How to deal with telecine and interlacing in NTSC DVDs żeby dowiedzieć się jak sobie radzić z różnymi możliwościami.

Jednak jeśli zazwyczaj tylko ripujesz filmy, prawdopodobnie masz doczynienia z filmem 24 fps progresywnym lub poddanym telecine, a w takim przypadku możesz użyć filtra pullup podając parametr -vf pullup,softskip.

7.1.8. Encoding interlaced video

If the movie you want to encode is interlaced (NTSC video or PAL video), you will need to choose whether you want to deinterlace or not. While deinterlacing will make your movie usable on progressive scan displays such a computer monitors and projectors, it comes at a cost: The fieldrate of 50 or 60000/1001 fields per second is halved to 25 or 30000/1001 frames per second, and roughly half of the information in your movie will be lost during scenes with significant motion.

Therefore, if you are encoding for high quality archival purposes, it is recommended not to deinterlace. You can always deinterlace the movie at playback time when displaying it on progressive scan devices. The power of currently available computers forces players to use a deinterlacing filter, which results in a slight degradation in image quality. But future players will be able to mimic the interlaced display of a TV, deinterlacing to full fieldrate and interpolating 50 or 60000/1001 entire frames per second from the interlaced video.

Special care must be taken when working with interlaced video:

  1. Crop height and y-offset must be multiples of 4.

  2. Any vertical scaling must be performed in interlaced mode.

  3. Postprocessing and denoising filters may not work as expected unless you take special care to operate them a field at a time, and they may damage the video if used incorrectly.

With these things in mind, here is our first example:

mencoder capture.avi -mc 0 -oac lavc -ovc lavc -lavcopts \
    vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224

Note the ilme and ildct options.

7.1.9. Notes on Audio/Video synchronization

MEncoder's audio/video synchronization algorithms were designed with the intention of recovering files with broken sync. However, in some cases they can cause unnecessary skipping and duplication of frames, and possibly slight A/V desync, when used with proper input (of course, A/V sync issues apply only if you process or copy the audio track while transcoding the video, which is strongly encouraged). Therefore, you may have to switch to basic A/V sync with the -mc 0 option, or put this in your ~/.mplayer/mencoder config file, as long as you are only working with good sources (DVD, TV capture, high quality MPEG-4 rips, etc) and not broken ASF/RM/MOV files.

If you want to further guard against strange frame skips and duplication, you can use both -mc 0 and -noskip. This will prevent all A/V sync, and copy frames one-to-one, so you cannot use it if you will be using any filters that unpredictably add or drop frames, or if your input file has variable framerate! Therefore, using -noskip is not in general recommended.

The so-called "three-pass" audio encoding which MEncoder supports has been reported to cause A/V desync. This will definitely happen if it is used in conjunction with certain filters, therefore, it is now recommended not to use three-pass audio mode. This feature is only left for compatibility purposes and for expert users who understand when it is safe to use and when it is not. If you have never heard of three-pass mode before, forget that we even mentioned it!

There have also been reports of A/V desync when encoding from stdin with MEncoder. Do not do this! Always use a file or CD/DVD/etc device as input.

7.1.10. Choosing the video codec

Which video codec is best to choose depends on several factors, like size, quality, streamability, usability and popularity, some of which widely depend on personal taste and technical constraints.

  • Compression efficiency: It is quite easy to understand that most newer-generation codecs are made to increase quality and compression. Therefore, the authors of this guide and many other people suggest that you cannot go wrong [1] when choosing MPEG-4 AVC codecs like x264 instead of MPEG-4 ASP codecs such as libavcodec MPEG-4 or Xvid. (Advanced codec developers may be interested in reading Michael Niedermayer's opinion on "why MPEG4-ASP sucks".) Likewise, you should get better quality using MPEG-4 ASP than you would with MPEG-2 codecs.

    However, newer codecs which are in heavy development can suffer from bugs which have not yet been noticed and which can ruin an encode. This is simply the tradeoff for using bleeding-edge technology.

    What is more, beginning to use a new codec requires that you spend some time becoming familiar with its options, so that you know what to adjust to achieve a desired picture quality.

  • Hardware compatibility: It usually takes a long time for standalone video players to begin to include support for the latest video codecs. As a result, most only support MPEG-1 (like VCD, XVCD and KVCD), MPEG-2 (like DVD, SVCD and KVCD) and MPEG-4 ASP (like DivX, libavcodec's LMP4 and Xvid) (Beware: Usually, not all MPEG-4 ASP features are supported). Please refer to the technical specs of your player (if they are available), or google around for more information.

  • Best quality per encoding time: Codecs that have been around for some time (such as libavcodec MPEG-4 and Xvid) are usually heavily optimized with all kinds of smart algorithms and SIMD assembly code. That is why they tend to yield the best quality per encoding time ratio. However, they may have some very advanced options that, if enabled, will make the encode really slow for marginal gains.

    If you are after blazing speed you should stick around the default settings of the video codec (although you should still try the other options which are mentioned in other sections of this guide).

    You may also consider choosing a codec which can do multi-threaded processing, though this is only useful for users of machines with several CPUs. libavcodec MPEG-4 does allow that, but speed gains are limited, and there is a slight negative effect on picture quality. Xvid's multi-threaded encoding, activated by the threads option, can be used to boost encoding speed — by about 40-60% in typical cases — with little if any picture degradation. x264 also allows multi-threaded encoding, which currently speeds up encoding by 94% per CPU core while lowering PSNR between 0.005dB and 0.01dB on a typical setup.

  • Personal taste: This is where it gets almost irrational: For the same reason that some hung on to DivX 3 for years when newer codecs were already doing wonders, some folks will prefer Xvid or libavcodec MPEG-4 over x264.

    You should make your own judgement; do not take advice from people who swear by one codec. Take a few sample clips from raw sources and compare different encoding options and codecs to find one that suits you best. The best codec is the one you master, and the one that looks best to your eyes on your display [2]!

Please refer to the section selecting codecs and container formats to get a list of supported codecs.

7.1.11. Audio

Audio is a much simpler problem to solve: if you care about quality, just leave it as is. Even AC-3 5.1 streams are at most 448Kbit/s, and they are worth every bit. You might be tempted to transcode the audio to high quality Vorbis, but just because you do not have an A/V receiver for AC-3 pass-through today does not mean you will not have one tomorrow. Future-proof your DVD rips by preserving the AC-3 stream. You can keep the AC-3 stream either by copying it directly into the video stream during the encoding. You can also extract the AC-3 stream in order to mux it into containers such as NUT or Matroska.

mplayer source_file.vob -aid 129 -dumpaudio -dumpfile sound.ac3

will dump into the file sound.ac3 the audio track number 129 from the file source_file.vob (NB: DVD VOB files usually use a different audio numbering, which means that the VOB audio track 129 is the 2nd audio track of the file).

But sometimes you truly have no choice but to further compress the sound so that more bits can be spent on the video. Most people choose to compress audio with either MP3 or Vorbis audio codecs. While the latter is a very space-efficient codec, MP3 is better supported by hardware players, although this trend is changing.

Do not use -nosound when encoding a file with audio, even if you will be encoding and muxing audio separately later. Though it may work in ideal cases, using -nosound is likely to hide some problems in your encoding command line setting. In other words, having a soundtrack during your encode assures you that, provided you do not see messages such as Too many audio packets in the buffer, you will be able to get proper sync.

You need to have MEncoder process the sound. You can for example copy the original soundtrack during the encode with -oac copy or convert it to a "light" 4 kHz mono WAV PCM with -oac pcm -channels 1 -srate 4000. Otherwise, in some cases, it will generate a video file that will not sync with the audio. Such cases are when the number of video frames in the source file does not match up to the total length of audio frames or whenever there are discontinuities/splices where there are missing or extra audio frames. The correct way to handle this kind of problem is to insert silence or cut audio at these points. However MPlayer cannot do that, so if you demux the AC-3 audio and encode it with a separate app (or dump it to PCM with MPlayer), the splices will be left incorrect and the only way to correct them is to drop/duplicate video frames at the splice. As long as MEncoder sees the audio when it is encoding the video, it can do this dropping/duping (which is usually OK since it takes place at full black/scene change), but if MEncoder cannot see the audio, it will just process all frames as-is and they will not fit the final audio stream when you for example merge your audio and video track into a Matroska file.

First of all, you will have to convert the DVD sound into a WAV file that the audio codec can use as input. For example:

mplayer source_file.vob -ao pcm:file=destination_sound.wav \
    -vc dummy -aid 1 -vo null

will dump the second audio track from the file source_file.vob into the file destination_sound.wav. You may want to normalize the sound before encoding, as DVD audio tracks are commonly recorded at low volumes. You can use the tool normalize for instance, which is available in most distributions. If you are using Windows, a tool such as BeSweet can do the same job. You will compress in either Vorbis or MP3. For example:

oggenc -q1 destination_sound.wav

will encode destination_sound.wav with the encoding quality 1, which is roughly equivalent to 80Kb/s, and is the minimum quality at which you should encode if you care about quality. Please note that MEncoder currently cannot mux Vorbis audio tracks into the output file because it only supports AVI and MPEG containers as an output, each of which may lead to audio/video playback synchronization problems with some players when the AVI file contain VBR audio streams such as Vorbis. Do not worry, this document will show you how you can do that with third party programs.

7.1.12. Muxing

Now that you have encoded your video, you will most likely want to mux it with one or more audio tracks into a movie container, such as AVI, MPEG, Matroska or NUT. MEncoder is currently only able to natively output audio and video into MPEG and AVI container formats. for example:

mencoder -oac copy -ovc copy  -o output_movie.avi \
    -audiofile input_audio.mp2 input_video.avi

This would merge the video file input_video.avi and the audio file input_audio.mp2 into the AVI file output_movie.avi. This command works with MPEG-1 layer I, II and III (more commonly known as MP3) audio, WAV and a few other audio formats too.

MEncoder features experimental support for libavformat, which is a library from the FFmpeg project that supports muxing and demuxing a variety of containers. For example:

mencoder -oac copy -ovc copy -o output_movie.asf -audiofile input_audio.mp2 \
    input_video.avi -of lavf -lavfopts format=asf

This will do the same thing as the previous example, except that the output container will be ASF. Please note that this support is highly experimental (but getting better every day), and will only work if you compiled MPlayer with the support for libavformat enabled (which means that a pre-packaged binary version will not work in most cases).

7.1.12.1. Improving muxing and A/V sync reliability

You may experience some serious A/V sync problems while trying to mux your video and some audio tracks, where no matter how you adjust the audio delay, you will never get proper sync. That may happen when you use some video filters that will drop or duplicate some frames, like the inverse telecine filters. It is strongly encouraged to append the harddup video filter at the end of the filter chain to avoid this kind of problem.

Without harddup, if MEncoder wants to duplicate a frame, it relies on the muxer to put a mark on the container so that the last frame will be displayed again to maintain sync while writing no actual frame. With harddup, MEncoder will instead just push the last frame displayed again into the filter chain. This means that the encoder receives the exact same frame twice, and compresses it. This will result in a slightly bigger file, but will not cause problems when demuxing or remuxing into other container formats.

You may also have no choice but to use harddup with container formats that are not too tightly linked with MEncoder such as the ones supported through libavformat, which may not support frame duplication at the container level.

7.1.12.2. Limitations of the AVI container

Although it is the most widely-supported container format after MPEG-1, AVI also has some major drawbacks. Perhaps the most obvious is the overhead. For each chunk of the AVI file, 24 bytes are wasted on headers and index. This translates into a little over 5 MB per hour, or 1-2.5% overhead for a 700 MB movie. This may not seem like much, but it could mean the difference between being able to use 700 kbit/sec video or 714 kbit/sec, and every bit of quality counts.

In addition this gross inefficiency, AVI also has the following major limitations:

  1. Only fixed-fps content can be stored. This is particularly limiting if the original material you want to encode is mixed content, for example a mix of NTSC video and film material. Actually there are hacks that can be used to store mixed-framerate content in AVI, but they increase the (already huge) overhead fivefold or more and so are not practical.

  2. Audio in AVI files must be either constant-bitrate (CBR) or constant-framesize (i.e. all frames decode to the same number of samples). Unfortunately, the most efficient codec, Vorbis, does not meet either of these requirements. Therefore, if you plan to store your movie in AVI, you will have to use a less efficient codec such as MP3 or AC-3.

Having said all that, MEncoder does not currently support variable-fps output or Vorbis encoding. Therefore, you may not see these as limitations if MEncoder is the only tool you will be using to produce your encodes. However, it is possible to use MEncoder only for video encoding, and then use external tools to encode audio and mux it into another container format.

7.1.12.3. Muxing into the Matroska container

Matroska is a free, open standard container format, aiming to offer a lot of advanced features, which older containers like AVI cannot handle. For example, Matroska supports variable bitrate audio content (VBR), variable framerates (VFR), chapters, file attachments, error detection code (EDC) and modern A/V Codecs like "Advanced Audio Coding" (AAC), "Vorbis" or "MPEG-4 AVC" (H.264), next to nothing handled by AVI.

The tools required to create Matroska files are collectively called mkvtoolnix, and are available for most Unix platforms as well as Windows. Because Matroska is an open standard you may find other tools that suit you better, but since mkvtoolnix is the most common, and is supported by the Matroska team itself, we will only cover its usage.

Probably the easiest way to get started with Matroska is to use MMG, the graphical frontend shipped with mkvtoolnix, and follow the guide to mkvmerge GUI (mmg)

You may also mux audio and video files using the command line:

mkvmerge -o output.mkv input_video.avi input_audio1.mp3 input_audio2.ac3

This would merge the video file input_video.avi and the two audio files input_audio1.mp3 and input_audio2.ac3 into the Matroska file output.mkv. Matroska, as mentioned earlier, is able to do much more than that, like multiple audio tracks (including fine-tuning of audio/video synchronization), chapters, subtitles, splitting, etc... Please refer to the documentation of those applications for more details.



[1] Be careful, however: Decoding DVD-resolution MPEG-4 AVC videos requires a fast machine (i.e. a Pentium 4 over 1.5GHz or a Pentium M over 1GHz).

[2] The same encode may not look the same on someone else's monitor or when played back by a different decoder, so future-proof your encodes by playing them back on different setups.