diff options
author | boskicinek <boskicinek@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-07-12 14:03:19 +0000 |
---|---|---|
committer | boskicinek <boskicinek@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-07-12 14:03:19 +0000 |
commit | d293461ef9c4b23d1ef7415e842200f36c9c60d3 (patch) | |
tree | d3119f8c3b38f279376c62986b4d64f753b09dbe /DOCS | |
parent | 5af60f000a40fe7dd83b3ecf574804d3b64e716e (diff) | |
download | mpv-d293461ef9c4b23d1ef7415e842200f36c9c60d3.tar.bz2 mpv-d293461ef9c4b23d1ef7415e842200f36c9c60d3.tar.xz |
- incomplete but we probably need this (because we updated mencoder.xml already)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19030 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'DOCS')
-rw-r--r-- | DOCS/xml/pl/encoding-guide.xml | 4418 |
1 files changed, 4418 insertions, 0 deletions
diff --git a/DOCS/xml/pl/encoding-guide.xml b/DOCS/xml/pl/encoding-guide.xml new file mode 100644 index 0000000000..be0cf2d80f --- /dev/null +++ b/DOCS/xml/pl/encoding-guide.xml @@ -0,0 +1,4418 @@ +<?xml version="1.0" encoding="iso-8859-2"?> +<!-- synced with 1.32 --> +<!-- Opiekun: Torinthiel --> +<!-- INCOMPLETE!!!! --> +<chapter id="encoding-guide"> +<title>Kodowanie przy użyciu <application>MEncodera</application></title> + +<sect1 id="menc-feat-dvd-mpeg4"> +<title>Rippowanie DVD do wysokiej jakości pliku MPEG-4 ("DivX")</title> + +<para> + 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." +</para> + +<para> + 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. +</para> + +<para> + Tak na prawdę, powodem dla którego chcesz przekodować DVD na MPEG-4 jest to, + że <emphasis role="bold">przejmujesz</emphasis> się wielkością pliku. +</para> + +<para> + 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 albo masz dużą szansę że nie będziesz zadowolony z wyników. + Poniżej zbadamy niektóre problemy i pokażemy przykład. Zakładamy że używasz + <systemitem class="library">libavcodec</systemitem> do kodowania obrazu, + chociaż ta sama teoria działą też przy innych kodekach. +</para> + +<para> + Jeśli to wydaje Ci się za dużo, to pewnie powinieneś użyć jednej z wielu + nakładek dostępnych w + <ulink url="http://mplayerhq.hu/homepage/design7/projects.html#mencoder_frontends">sekcji MEncodera</ulink> + 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. +</para> + +<sect2 id="menc-feat-dvd-mpeg4-preparing-encode"> +<title>Przygotowanie do kodowania: Identyfikowanie materiału źródłowego +i framerate</title> +<para> + Zanim w ogóle zaczniesz myśleć o kodowaniu filmu, musisz podjąć kilka + początkowych kroków. +</para> + +<para> + 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 <emphasis role="bold">ne</emphasis> 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ą pbrzydkie, artefakty są też szkodliwe dla kodowania: + Dostaniesz gorszą jakość na jednostkę bitrate. +</para> + +<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-fps"> +<title>Ustalanie źródłowego framerate</title> +<para> + Poniżej jest lista popularnych typów materiału źródłowego, gdzie można je + najczęściej znaleźć i ich własności: +</para> +<itemizedlist> +<listitem><para> + <emphasis role="bold">Typowy film</emphasis>: Tworzony do wyświetlania przy + 24fps. +</para></listitem> +<listitem><para> + <emphasis role="bold">Film PAL</emphasis>: 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, jako tania forma + 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 <emphasis role="bold">nie</emphasis> dają pełnej klatki, ponieważ + są uchwycone co 1/50 sekundy, więc nie pasują do siebie, chyba że nie ma + ruchu. +</para></listitem> +<listitem><para> + <emphasis role="bold">Film NTSC</emphasis>: Nagrany kamerą NTSC z prędkością + 6000/1001 pól na sekundę, albo 60 pól na sekundę w erze przedkolorowej. + Poza tym podobny do PAL. +</para></listitem> +<listitem><para> + <emphasis role="bold">Animacja</emphasis>: Zazwyczaj rysowana przy 24fps, + ale zdarzają się też z mieszanym framerate. +</para></listitem> +<listitem><para> + <emphasis role="bold">Grafika komputerowa (CG)</emphasis>: 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. +</para></listitem> +<listitem><para> + <emphasis role="bold">Stary film</emphasis>: Rozmaite niższe framerate. +</para></listitem> +</itemizedlist> +</sect3> + +<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-material"> +<title>Identyfikowanie materiału źródłowego</title> +<para> + 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. +</para> +<para> + Żeby nie było za łatwo, niektóre filmy są kombinacją kilku powyższych typów. +</para> +<para> + Najważniejszą różnicą między tymi formatami, jest to że niektóre są oparte + na klatkach a inne na polach. + <emphasis role="bold">Zawsze</emphasis> 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 "pulldown", + a niesławne "3:2 telecine" 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ł. +</para> + +<itemizedlist> +<title>Jest kilka popularnych typów pulldown:</title> +<listitem><para> + <emphasis role="bold">pulldown PAL 2:2</emphasis>: 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%. +</para></listitem> +<listitem><para> + <emphasis role="bold">pulldown PAL 2:2:2:2:2:2:2:2:2:2:2:3</emphasis>: + 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ę. +</para></listitem> +<listitem><para> + <emphasis role="bold">NTSC 3:2 telecine</emphasis>: 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. +</para></listitem> +<listitem><para> + <emphasis role="bold">NTSC 2:2 pulldown</emphasis>: Używane do pokazywania + materiałów 30fps na NTSC. + Przyjemne, dokładnie jak pulldown 2:2 PAL. +</para></listitem> +</itemizedlist> + +<para> + 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 odnajdując kopię w oryginalnym formacie. + Konwersja między tymi dwoma formatami jest wysoce destrukcyjna i nie może + zostać czysto odwrócona, więc kodowanie będzie o wiele gorszej jakości jeśli + jest robione z przekonwertowanego źródła. +</para> +<para> + 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. +</para> +<para> + Procedury radzenia sobie z takimi przypadkami będą omówione + <link linkend="menc-feat-telecine">w dalszej części przewodnika</link>. + Teraz podamy tylko kilka wskazówek jak identyfikować z jakim typem materiału + mamy do czynienia. +</para> + +<itemizedlist> +<title>Regiony NTSC:</title> +<listitem><para> + Jeśli <application>MPlayer</application> 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". +</para></listitem> +<listitem><para> + Jeśli <application>MPlayer</application> pokazuje że framerate zmienia się + między 24000/1001 i 30000/1001 i czasami widzisz "grzebienie" to jest kilka + możliwości. + <!-- Torinthiel: grzebienie mi najlepiej pasują, ale może jest oficjalne tłumaczenie --> + 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ć. +</para></listitem> +<listitem><para> + Jeśli <application>MPlayer</application> 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ę. +</para></listitem> +<listitem><para> + Jeśli <application>MPlayer</application> 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". +</para></listitem> +</itemizedlist> + +<itemizedlist> +<title>Regiony PAL:</title> +<listitem><para> + Jeśli nie widzisz grzebieni, to jest to 2:2 pulldown. +</para></listitem> +<listitem><para> + 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. +</para></listitem> +<listitem><para> + Jeśli zawsze widzisz grzebienie w trakcie ruchu, to film jest filmem PAL + wyświetlanym z 50 polami na sekundę. + <!-- Torinthiel: wyświetlanym czy nagranym? --> +</para></listitem> +</itemizedlist> + +<note><title>Podpowiedź:</title> +<para> + <application>MPlayer</application> może zwolnić odtwarzanie filmu opcją + -speed albo odtwarzać klatka po klatce. + Spróbuj użyć opcji <option>-speed</option> 0.2 żeby oglądać film bardzo + wolno, albo naciskaj wielokrotnie klawisz "<keycap>.</keycap>" żeby + wyświetlać jedną klatkę na raz. Może to pomóc zidentyfikować wzorzec jeśli + nie możesz go dostrzec przy pełnej prędkości. +</para> +</note> +</sect3> +</sect2> + +<sect2 id="menc-feat-dvd-mpeg4-2pass"> +<title>Stały kwantyzator a tryb wieloprzebiegowy</title> + +<para> + 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ą. +</para> + +<para> + Są trzy podejścia do kodowania video: stały bitrate (CBR), + stały kwantyzator i tryb wieloprzebiegowy (ABR, uśrednione bitrate). +</para> + +<para> + 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; to naprawia wyżej + wymieniony problem. +</para> + +<note><title>Uwaga:</title> +<para> + Większość kodeków obsługujących kodowanie ABR obsługuje tylko kodowanie + dwuprzebiegowe, podczas gdy niektóre inne, na przykład + <systemitem class="library">x264</systemitem> albo + <systemitem class="library">XviD</systemitem> 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. +</para> +</note> + +<para> + W każdym z tych trybów, kodek video (na przykład + <systemitem class="library">libavcodec</systemitem>) + 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.) +</para> + +<para> + 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 <systemitem class="library">libavcodec</systemitem> opcją + <option>vqmin</option>, 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 troszczysz się o jakość, powinieneś unikać CBR. +</para> + +<para> + Przy stałym kwantyzatorze, kodek używa na każdym makrobloku tego samego + kwantyzatora, podanego opcją <option>vqscale</option> + (w przypadku <systemitem class="library">libavcodec</systemitem>). + Jeśli chcesz możliwie najlepszy efekt, znów ignorując bitrate, możesz użyć + <option>vqscale=2</option>. Da to ten sam bitrate i PSNR (peak + signal-to-noise ratio, szczytowa proporcja sygnału do szumu) co CBR + z <option>vbitrate</option>=nieskończoność i domyślnym + <option>vqmin</option>. +</para> + +<para> + 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 pewna ilość bitów + na twardym dysku. +</para> + +<para> + 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. +</para> + +<para> + Jeśli używasz <option>vqscale=2</option> to marnujesz bity. Jeśli używasz + <option>vqscale=3</option> to nie dostajesz najlepszej możliwej jakości. + Załóżmy że zakodowałeś swoje DVD przy <option>vqscale=3</option> + i dostałeś bitrate 1800Kbit. Jeśli zrobisz dwa przebiegi + z <option>vbitrate=1800</option> ostateczny wynik będzie miał + <emphasis role="bold">wyższą jakość</emphasis> przy + <emphasis role="bold">tym samym bitrate</emphasis>. +</para> + +<para> + 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 najbliżej równowagi między jakością + a wielkością pliku. To się zmienia w zależności od filmu. +</para> + +<para> + 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. +</para> + +<para> + 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ś <link linkend="menc-feat-dvd-mpeg4-audio">ściągnąć go</link> + najpierw. + Możesz wyliczyć bitrate z następującego równania: + <systemitem>bitrate = (wielkość_docelowa_w_MBajtach - wielkość_dźwięku_w_MB) + * 1024 * 1024 / długość_w_sekundach * 8 / 1000</systemitem> + Na przykład by wcisność dwugodzinny film na płytkę 702MB, z 60MB ścieżki + dźwiękowej, bitrate video musi być: + <systemitem>(702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 + = 740kbps</systemitem> +</para> + +</sect2> + + +<sect2 id="menc-feat-dvd-mpeg4-constraints"> +<title>Constraints for efficient encoding</title> + +<para> + Due to the nature of MPEG-type compression, there are various + constraints you should follow for maximal quality. + MPEG splits the video up into 16x16 squares called macroblocks, + each composed of 4 8x8 blocks of luma (intensity) information and two + half-resolution 8x8 chroma (color) blocks (one for red-cyan axis and + the other for the blue-yellow axis). + Even if your movie width and height are not multiples of 16, the + encoder will use enough 16x16 macroblocks to cover the whole picture + area, and the extra space will go to waste. + So in the interests of maximizing quality at a fixed filesize, it is + a bad idea to use dimensions that are not multiples of 16. +</para> + +<para> + Most DVDs also have some degree of black borders at the edges. Leaving + these in place can hurt quality in several ways. +</para> + +<orderedlist> +<listitem> +<para> + MPEG-type compression is also highly dependent on frequency domain + transformations, in particular the Discrete Cosine Transform (DCT), + which is similar to the Fourier transform. This sort of encoding is + efficient for representing patterns and smooth transitions, but it + has a hard time with sharp edges. In order to encode them it must + use many more bits, or else an artifact known as ringing will + appear. +</para> + +<para> + The frequency transform (DCT) takes place separately on each + macroblock (actually each block), so this problem only applies when + the sharp edge is inside a block. If your black borders begin + exactly at multiple-of-16 pixel boundaries, this is not a problem. + However, the black borders on DVDs rarely come nicely aligned, so + in practice you will always need to crop to avoid this penalty. +</para> +</listitem> +</orderedlist> + +<para> + In addition to frequency domain transforms, MPEG-type compression uses + motion vectors to represent the change from one frame to the next. + Motion vectors naturally work much less efficiently for new content + coming in from the edges of the picture, because it is not present in + the previous frame. As long as the picture extends all the way to the + edge of the encoded region, motion vectors have no problem with + content moving out the edges of the picture. However, in the presence + of black borders, there can be trouble: +</para> + +<orderedlist continuation="continues"> +<listitem> +<para> + For each macroblock, MPEG-type compression stores a vector + identifying which part of the previous frame should be copied into + this macroblock as a base for predicting the next frame. Only the + remaining differences need to be encoded. If a macroblock spans the + edge of the picture and contains part of the black border, then + motion vectors from other parts of the picture will overwrite the + black border. This means that lots of bits must be spent either + re-blackening the border that was overwritten, or (more likely) a + motion vector will not be used at all and all the changes in this + macroblock will have to be coded explicitly. Either way, encoding + efficiency is greatly reduced. +</para> + +<para> + Again, this problem only applies if black borders do not line up on + multiple-of-16 boundaries. +</para> +</listitem> + +<listitem> +<para> + Finally, suppose we have a macroblock in the interior of the + picture, and an object is moving into this block from near the edge + of the image. MPEG-type coding cannot say "copy the part that is + inside the picture but not the black border." So the black border + will get copied inside too, and lots of bits will have to be spent + encoding the part of the picture that is supposed to be there. +</para> + +<para> + If the picture runs all the way to the edge of the encoded area, + MPEG has special optimizations to repeatedly copy the pixels at the + edge of the picture when a motion vector comes from outside the + encoded area. This feature becomes useless when the movie has black + borders. Unlike problems 1 and 2, aligning the borders at multiples + of 16 does not help here. +</para> +</listitem> + +<listitem> +<para> + Despite the borders being entirely black and never changing, there + is at least a minimal amount of overhead involved in having more + macroblocks. +</para> +</listitem> +</orderedlist> + +<para> + For all of these reasons, it is recommended to fully crop black + borders. Further, if there is an area of noise/distortion at the edge + of the picture, cropping this will improve encoding efficiency as + well. Videophile purists who want to preserve the original as close as + possible may object to this cropping, but unless you plan to encode at + constant quantizer, the quality you gain from cropping will + considerably exceed the amount of information lost at the edges. +</para> +</sect2> + + +<sect2 id="menc-feat-dvd-mpeg4-crop"> +<title>Cropping and Scaling</title> + +<para> + Recall from the previous section that the final picture size you + encode should be a multiple of 16 (in both width and height). + This can be achieved by cropping, scaling, or a combination of both. +</para> + +<para> + When cropping, there are a few guidelines that must be followed to + avoid damaging your movie. + The normal YUV format, 4:2:0, stores chroma (color) information + subsampled, i.e. chroma is only sampled half as often in each + direction as luma (intensity) information. + Observe this diagram, where L indicates luma sampling points and C + chroma. +</para> + +<informaltable> +<?dbhtml table-width="40%" ?> +<?dbfo table-width="40%" ?> +<tgroup cols="8" align="center"> +<colspec colnum="1" colname="col1"/> +<colspec colnum="2" colname="col2"/> +<colspec colnum="3" colname="col3"/> +<colspec colnum="4" colname="col4"/> +<colspec colnum="5" colname="col5"/> +<colspec colnum="6" colname="col6"/> +<colspec colnum="7" colname="col7"/> +<colspec colnum="8" colname="col8"/> +<spanspec spanname="spa1-2" namest="col1" nameend="col2"/> +<spanspec spanname="spa3-4" namest="col3" nameend="col4"/> +<spanspec spanname="spa5-6" namest="col5" nameend="col6"/> +<spanspec spanname="spa7-8" namest="col7" nameend="col8"/> + <tbody> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + <row> + <entry spanname="spa1-2">C</entry> + <entry spanname="spa3-4">C</entry> + <entry spanname="spa5-6">C</entry> + <entry spanname="spa7-8">C</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + <row> + <entry spanname="spa1-2">C</entry> + <entry spanname="spa3-4">C</entry> + <entry spanname="spa5-6">C</entry> + <entry spanname="spa7-8">C</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + </tbody> +</tgroup> +</informaltable> + +<para> + As you can see, rows and columns of the image naturally come in pairs. + Thus your crop offsets and dimensions <emphasis>must</emphasis> be + even numbers. + If they are not, the chroma will no longer line up correctly with the + luma. + In theory, it is possible to crop with odd offsets, but it requires + resampling the chroma which is potentially a lossy operation and not + supported by the crop filter. +</para> + +<para> + Further, interlaced video is sampled as follows: +</para> + +<informaltable> +<?dbhtml table-width="80%" ?> +<?dbfo table-width="80%" ?> +<tgroup cols="16" align="center"> +<colspec colnum="1" colname="col1"/> +<colspec colnum="2" colname="col2"/> +<colspec colnum="3" colname="col3"/> +<colspec colnum="4" colname="col4"/> +<colspec colnum="5" colname="col5"/> +<colspec colnum="6" colname="col6"/> +<colspec colnum="7" colname="col7"/> +<colspec colnum="8" colname="col8"/> +<colspec colnum="9" colname="col9"/> +<colspec colnum="10" colname="col10"/> +<colspec colnum="11" colname="col11"/> +<colspec colnum="12" colname="col12"/> +<colspec colnum="13" colname="col13"/> +<colspec colnum="14" colname="col14"/> +<colspec colnum="15" colname="col15"/> +<colspec colnum="16" colname="col16"/> +<spanspec spanname="spa1-2" namest="col1" nameend="col2"/> +<spanspec spanname="spa3-4" namest="col3" nameend="col4"/> +<spanspec spanname="spa5-6" namest="col5" nameend="col6"/> +<spanspec spanname="spa7-8" namest="col7" nameend="col8"/> +<spanspec spanname="spa9-10" namest="col9" nameend="col10"/> +<spanspec spanname="spa11-12" namest="col11" nameend="col12"/> +<spanspec spanname="spa13-14" namest="col13" nameend="col14"/> +<spanspec spanname="spa15-16" namest="col15" nameend="col16"/> + <tbody> + <row> + <entry namest="col1" nameend="col8">Top field</entry> + <entry namest="col9" nameend="col16">Bottom field</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + </row> + <row> + <entry spanname="spa1-2">C</entry> + <entry spanname="spa3-4">C</entry> + <entry spanname="spa5-6">C</entry> + <entry spanname="spa7-8">C</entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + </row> + <row> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + </row> + <row> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry spanname="spa9-10">C</entry> + <entry spanname="spa11-12">C</entry> + <entry spanname="spa13-14">C</entry> + <entry spanname="spa15-16">C</entry> + </row> + <row> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + </row> + <row> + <entry spanname="spa1-2">C</entry> + <entry spanname="spa3-4">C</entry> + <entry spanname="spa5-6">C</entry> + <entry spanname="spa7-8">C</entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + </row> + <row> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + <row> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + </row> + <row> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry spanname="spa9-10">C</entry> + <entry spanname="spa11-12">C</entry> + <entry spanname="spa13-14">C</entry> + <entry spanname="spa15-16">C</entry> + </row> + <row> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry></entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + <entry>L</entry> + </row> + </tbody> +</tgroup> +</informaltable> + +<para> + As you can see, the pattern does not repeat until after 4 lines. + So for interlaced video, your y-offset and height for cropping must |