# Podstawy używania MEncodera

Pełna lista dostępnych opcji MEncodera oraz przykłady znajdują się na stronie man. W pliku encoding-tips znajduje się dużo przykładów i przewodników skompletowanych z wielu wątków listy dyskusyjnej MPlayer-users. W archiwum znajdziesz mnóstwo dyskusji o aspektach i problemach związanych z kodowaniem przy pomocy MEncodera.

## Wybieranie kodeka i formatu

Kodeki audio i video stosowane przy kodowaniu są wybierane odpowiednio opcjami `-oac` i `-ovc`. Napisz na przykład:

    mencoder -ovc help

by uzyskać listę wszystkich kodeków video obsługiwanych przez MEncodera na Twoim komputerze. Dostępne są następujące:

Kodeki audio:

Nazwa kodeka audio | Opis
--- | ---
mp3lame | kodowanie na MP3 VBR, ABR lub przy użyciu LAME
lavc | używa jednego z kodeków audio z libavcodec
faac | koder audio FAAC AAC
toolame | koder MPEG Audio Layer 2
twolame | koder MPEG Audio Layer 2 encoder oparty na tooLAME
pcm | nieskompresowany dźwięk PCM
copy | nie przekodowywuj, tylko przekopiuj zakodowane ramki

Kodeki video:

Nazwa kodeka video | Opis
--- | ---
lavc | używa jednego z kodeków video z libavcodec
xvid | Xvid, kodek MPEG-4 Advanced Simple Profile (ASP)
x264 | x264, MPEG-4 Advanced Video Coding (AVC), zwany kodekiem H.264
nuv | nuppel video, używany przez niektóre aplikacje czasu rzeczywistego
raw | nieskompresowane klatki video
copy | nie przekodowywuj, tylko przekopiuj zakodowane ramki
frameno | używany do kodowania trójprzebiegowego (nie zalecane)

Format wyjściowy wybiera się opcją `-of`. Napisz:

    mencoder -of help

by otrzymać listę wszystkich formatów obsługiwanych przez MEncodera na Twoim komputerze.

Formaty przechowywania:

Nazwa formatu | Opis
--- | ---
lavf | jeden z formatów obsługiwanych przez libavformat
avi | Audio-Video Interleaved (Przeplecione Audio-Video)
mpeg | MPEG-1 i MPEG-2 PS
rawvideo | surowy strumień video (bez muxowania - tylko jeden strumień video)
rawaudio | surowy strumień audio (bez muxowania - tylko jeden strumień audio)

Format AVI jest podstawowym formatem MEncodera, co oznacza że jest najlepiej obsługiwany i że MEncoder był projektowany z myślą o nim. Jak napisano wcześniej, można używać innych formatów, ale możesz napotkać przy tym problemy.

Formaty z libavformat:

Jeśli chcesz żeby libavformat dokonywał muksowania zbioru wyjściowego (przy użyciu opcji `-of lavf`), stosowny format zostanie ustalony na podstawie rozszerzenia pliku wyjściowego. Możesz wymusić konkretny format opcją `format` biblioteki libavformat.

nazwa formatu libavformat | Opis
--- | ---
mpg | MPEG-1 i MPEG-2 PS
asf | Advanced Streaming Format (Zaawansowany format strumieniowy)
avi | Audio-Video Interleaved
wav | Waveform Audio
swf | Macromedia Flash
flv | Macromedia Flash video
rm | RealMedia
au | SUN AU
nut | otwarty format NUT (eksperymentalny i jeszcze bez specyfikacji)
mov | QuickTime
mp4 | MPEG-4 format
dv | format Sony Digital Video

Jak widzisz, libavformat pozwala MEncoderowi tworzyć sporą ilość różnych formatów. Niestety, ponieważ MEncoder nie był tworzony z myślą o innych formatach niż AVI, powinieneś mieć paranoidalne podejście do wynikowych plików. Dokładnie sprawdź czy jest prawidłowa synchronizacja audio/video i czy plik może zostać prawidłowo odtworzony przez odtwarzacze inne niż MPlayer.

kodowanie do formatu Macromedia Flash

Tworzenie zbioru Macromedia Flash video, nadającego się do odtwarzania w przeglądarce sieciowej z wtyczką Macromedia Flash:

    mencoder wejście.avi -o wyjście.flv -of lavf \
        -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
        -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3

## Wybieranie źródłowego zbioru lub urządzenia

MEncoder może kodoważ ze zbiorów lub bezpośrednio z dysku DVD lub VCD. Po prostu podaj nazwę zbioru w wierszu poleceń żeby kodować ze zbioru, albo `dvd://`numertytułu lub `vcd://`numerścieżki by nagrywać z tytułu DVD albo ścieżki VCD. Jeśli już skopiowałeś DVD na twardy dysk (możesz na przykład użyć narzędzia takiego jak dvdbackup, dostępnego na większości systemów), wciąż powinieneś używać składni `dvd://`, razem z opcją `-dvd-device` po której następuje ścieżka do skopiowanego DVD. Opcji `-dvd-device` i `-cdrom-device` możesz też używać by podać własne ścieżki do węzłów urządzeń, jeśli domyślne `/dev/dvd` i `/dev/cdrom` nie są właściwe w Twoim systemie.

Przy kodowaniu z DVD, często pożądanym jest wybranie do kodowania rozdziału lub zasięgu rozdziałów. Możesz w tym celu użyć opcji `-chapters`, na przykład `-chapters` 1-4 zakoduje z DVD tylko rozdziały od 1 do 4. Jest to zwłaszcza użyteczne gdy robisz kodowanie do wielkości 1400 MB, przeznaczone na 2 CD, ponieważ możesz się upewnić że przerwa nastąpi dokładnie na granicy rozdziałów a nie w środku sceny.

Jeśli masz obsługiwaną kartę przechwytywania TV, możesz też kodować z jej urządzenia wejściowego. Użyj opcji `tv://`numerkanału jako nazwy pliku, a opcją `-tv` skonfiguruj rozmaite ustawienia przechwytywania. Podobnie działa wejście z DVB.

## Kodowanie dwuprzebiegowe MPEG-4 ("DivX")

Nazwa związana jest z faktem, iż przy użyciu tej metody plik kodowany jest dwa razy. Pierwsze kodowanie (dubbed pass) tworzy pliki tymczasowe (`*.log`) o rozmiarze kilku megabajtów, nie kasuj ich od razu (możesz natomiast skasować plik AVI a jeszcze lepiej nie tworzyć go w ogóle poprzez zapisywanie w `/dev/null`). W drugim przebiegu przy pomocy danych o bitrate z plików tymczasowych tworzony jest plik wyjściowy drugiego przebiegu. Plik końcowy będzie miał o wiele lepszą jakość w porównaniu ze standardowym 1-przebiegowym kodowaniem. Jeżeli pierwszy raz o tym słyszysz, powinieneś zajrzeć do któregoś z wielu przewodników dostępnych w sieci.

kopiowanie ścieżki dźwiękowej

Dwuprzebiegowe kodowanie DVD do MPEG-4 ("DivX") AVI z kopiowaniem ścieżki dźwiękowej.

    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -oac copy -o output.avi

kodowanie ścieżki dźwiękowej

Dwuprzebiegowe kodowanie DVD do MPEG-4 ("DivX") AVI z kodowaniem ścieżki dźwiękowej do MP3. Uważaj stosując tę metodę, ponieważ w niektórych przypadkach może zaowocować desynchronizacją audio/video.

    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -oac mp3lame -lameopts vbr=3 -o /dev/null
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -oac mp3lame -lameopts vbr=3 -o output.avi

## Kodowanie do formatu video Sony PSP

MEncoder obsługuje kodowanie do formatu video Sony PSP, ale, w zależności od wersji oprogramowania PSP, wymaga różnych ograniczeń. Powinieneś byś bezpieczny, jeśli respektujesz poniższe ograniczenia:

- Bitrate: nie powinno przekraczać 1500kbps, jednakże poprzednie wersje obsługiwały praktycznie dowolny bitrate jeśli tylko nagłówek twierdził że nie jest za wysokie.

- Wymiary: wysokość i szerokość filmu PSP powinny być wielokrotnościami 16, a iloczyn szerokość * wysokość musi być <= 64000. W niektórych okolicznościach może być możliwe że PSP odtworzy wyższe rozdzielczości.

- Audio: powinno mieć częstotliwość próbkowania 24kHz dla MPEG-4 i 48kHz dla H.264.

kodowanie dla PSP

    mencoder -ofps 30000/1001 -af lavcresample=24000 -vf harddup -oac lavc \
        -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=libfaac \
        -of lavf -lavfopts format=psp \
        wejściowe.video -o wyjście.psp

Możesz też ustawić tytuł filmu dzięki `-info name=TytułFilmu`.

## Kodowanie do formatu MPEG

MEncoder może tworzyć pliki formatu MPEG (MPEG-PS). Zazwyczaj, jeśli używasz filmu MPEG-1 albo MPEG-2, to jest tak ponieważ kodujesz na ograniczony format, taki jak SVCD, VCD albo DVD. Specyficzne ograniczenia tych formatów są wyjaśnione w przewodniku tworzenia VCD i DVD.

Aby zmienić wyjściowy format plików MEncodera, użyj opcji `-of mpeg`.

Przykład:

    mencoder wejscie.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \
        -oac copy inne_opcje -o wyjście.mpg

Tworzenie pliku MPEG-1, który można odtworzyć na systemach z minimalną obsługą multimedialną, taką jak domyślne instalacje Windows:

    mencoder wejscie.avi -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \
        -o wyjście.mpg -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
        -lavcopts vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3

To samo, ale używając muxera MPEG z libavformat:

    mencoder wejście.avi -o VCD.mpg -ofps 25 -vf scale=352:288,harddup -of lavf \
        -lavfopts format=mpg:i_certify_that_my_video_stream_does_not_use_b_frames \
        -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
        -lavcopts vcodec=mpeg1video:vrc_buf_size=327:keyint=15:vrc_maxrate=1152:vbitrate=1152:vmax_b_frames=0

Wskazówka:

Jeżeli z jakiegoś powodu nie satysfakcjonuje Cię jakość video z drugiego przebiegu, możesz ponownie uruchomić kodowanie swojego video z inną docelową szybkością transmisji (bitrate), zakładając, że zapisałeś statystyki pliku z poprzedniego przebiegu. Jest to możliwe, ponieważ głównym celem pliku ze statystykami jest zapamiętanie złożoności każdej z ramek, co nie zależy zbyt mocno od szybkości transmisji. Weź jednak pod uwagę, że uzyskasz najlepsze wyniki, jeżeli wszystkie przebiegi będą uruchomione z nieróżniącymi się za bardzo docelowymi szybkościami transmisji.

## Przeskalowywanie filmów

Często zachodzi potrzeba zmiany wielkości obrazu. Powodów tego może być wiele: zmniejszenie rozmiaru pliku, przepustowość sieci, itd. Większość ludzi stosuje przeskalowywanie nawet przy konwertowaniu płyt DVD, SVCD do DivX AVI. Jeżeli chcesz przeskalowywać, przeczytaj sekcję o zachowywaniu proporcji obrazu.

Proces skalowania obsługiwany jest przez filtr video `scale`: `-vf scale=szerokość:wysokość`. Jego jakość może być ustawiona parametrem `-sws`. Jeśli nie jest on podany MEncoder użyje wartości 2: bicubic.

Sposób użycia:

    mencoder wejscie.mpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
        -vf scale=640:480 -o wyjście.avi

## Kopiowanie strumieni

MEncoder obsługuje strumienie wejściowe na dwa sposoby: koduje lub kopiuje je. Ta sekcja jest o kopiowaniu.

- Strumień video (opcja `-ovc copy`): ładne rzeczy można wyczyniać:) Jak wstawianie (nie konwertowanie) FLI, VIDO lub MPEG-1 video w plik AVI! Oczywiście tylko MPlayer potrafi odtwarzać takie pliki :) I prawdopodobnie nie ma dla tego żadnego sensownego zastosowania. Poważniej: kopiowanie strumieni video może być przydatne wtedy, gdy np. tylko strumień audio ma być zakodowany (np. nieskompresowane PCM do MP3).

- Strumień audio (opcja `-oac copy`): prosto i przystępnie. Możliwe jest wmiksowanie zewnętrznego źródła (MP3, WAV) do strumienia wyjściowego. Użyj w tym celu opcji `-audiofile nazwa_pliku`.

Używanie `-oac copy` do kopiowania z jednego formatu przechowywania do innego może wymagać użycia `-fafmttag` żeby utrzymać znacznik formatu audio z oryginalnego zbioru. Na przykład jeśli konwertujesz zbiór NSV z audio zakodowanym AAC do formatu AVI, to znacznik formatu audio będzie nieprawidłowy i musi zostać zmieniony. Listę znaczników formatów audio znajdziesz w pliku `codecs.conf`.

Przykład:

    mencoder wejście.nsv -oac copy -fafmttag 0x706D \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o wyjście.avi

## Kodowanie z wielu wejściowych plików obrazkowych (JPEG, PNG, TGA itp.)

MEncoder jest w stanie stworzyć film z jednego lub wielu plików JPEG, PNG, TGA albo innych obrazków. Poprzez proste kopiowanie ramek może stworzyć pliki MJPEG (Motion (ruchomy - przypis tłumacza) JPEG), MPNG (Motion PNG) lub MTGA (Motion TGA).

Jak to działa:

1. MEncoder dekoduje wejściowy obrazek/obrazki z pomocą biblioteki libjpeg (w przypadku dekodowania PNG, skorzysta z libpng).

2. Potem MEncoder kompresuje zdekodowane pliki podanym kompresorem (DivX4, Xvid, FFmpeg msmpeg4, itd.).

Przykłady

Opis i sposób działania funkcji `-mf` znajdują się na stronie man.

Tworzenie pliku MPEG-4 ze wszystkich plików JPEG w aktualnym katalogu:

    mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc\
        -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o wyjście.avi

Tworzenie pliku MPEG-4 z niektórych plików JPEG w aktualnym katalogu:

    mencoder mf://ramka001.jpg,ramka002.jpg -mf w=800:h=600:fps=25:type=jpg \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o wyjście.avi

Tworzenie plików MPEG-4 z jawnie podanej listy plików JPEG (list.txt w aktualnym katalogu, zawiera listę plików, które mają zostać użyte jako źródło, po jednym w każdym wierszu):

    mencoder mf://@list.txt -mf w=800:h=600:fps=25:type=jpg \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o wyjście.avi

Możesz mieszać rózne typy obrazków, niezależnie od używanej metody — wymieniane pliki, znaki globalne czy plik z listą — o ile oczywiście wszystkie mają te same wymiary. Możesz więc n.p. zrobić klatkę tytułową z obrazka PNG a potem umieścić pokaz swoich zdjęć JPEG.

Tworzenie pliku Motion JPEG (MJPEG) ze wszystkich plików JPEG w aktualnym katalogu:

    mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc copy -ovc copy -o wyjście.avi

Tworzenie nieskompresowanego pliku ze wszystkich plików PNG w aktualnym katalogu:

    mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -o wyjście.avi

Informacja:

Szerokość musi być liczbą podzielną przez 4, takie są ograniczenia formatu RAW RGB AVI.

Tworzenie pliku Motion PNG (MPNG) ze wszystkich plików PNG w aktualnym katalogu:

    mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc copy -oac copy -o wyjście.avi

Tworzenie pliku Motion TGA (MTGA) ze wszystkich plików TGA w aktualnym katalogu:

    mencoder mf://*.tga -mf w=800:h=600:fps=25:type=tga -ovc copy -oac copy -o wyjście.avi

## Wydobywanie napisów z DVD do pliku VOBsub

MEncoder jest w stanie wyciągnąć napisy z DVD do pliku w formacie VOBsub. Tworzy je para plików z rozszerzeniem `.idx` i `.sub`, które są zazwyczaj spakowane do pojedyńczego archiwum `.rar`. MPlayer może je odtwarzać z opcjami `-vobsub` i `-vobsubid`.

Podajesz nazwę bazową (tzn. bez rozszerzenia `.idx` lub `.sub`) pliku wyjściowego opcją `-vobsubout` oraz indeks dla tego pliku opcją `-vobsuboutindex`.

Jeżeli źródłem nie jest DVD powinieneś użyć opcji `-ifo`, aby wskazać plik `.ifo` potrzebny do stworzenia pliku wynikowego `.idx`.

Jeżeli źródłem nie jest DVD i nie masz pliku `.ifo`, będziesz musiał użyć opcji `-vobsubid`, aby podać id języka, które będzie umieszczone w pliku `.idx`.

Każde uruchomienie dołączy do istniejących napisów, jeżeli pliki `.idx` i `.sub` istnieją. Powinieneś więc usunąć je przed uruchomieniem.

Kopiowanie dwóch napisów z DVD podczas dwu-przebiegowego kodowania

    rm napisy.idx napisy.sub
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -vobsubout napisy -vobsuboutindex 0 -sid 2
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -vobsubout napisy -vobsuboutindex 1 -sid 5

Kopiowanie francuskich napisów z pliku MPEG

    rm napisy.idx napisy.sub
    mencoder film.mpg -ifo film.ifo -vobsubout napisy -vobsuboutindex 0 \
        -vobsuboutid fr -sid 1 -nosound -ovc copy

## Utrzymywanie proporcji obrazu (aspect ratio)

Pliki DVD i SVCD (tzn. MPEG-1/2) zawierają informacje o proporcji obrazu, która opisuje, jak odtwarzacz ma skalować strumień video, żeby ludzie nie byli jajogłowi (np.: 480x480 + 4:3 = 640x480). Jednak przy kodowaniu plików AVI (DivX) musisz być świadom, że nagłówek AVI nie przechowuje tej wartości. Przeskalowywanie jest obrzydliwe i czasochłonne, musi być jakiś lepszy sposób!

Jest

MPEG-4 posiada unikalną cechę: strumień video może posiadać swoją wartość proporcji obrazu. Tak, dokładnie jak pliki MPEG-1/2 (DVD, SVCD) i H.263. Niestety, istnieje tylko kilka odtwarzaczy video, pomijając MPlayera, które obsługują tę cechę MPEG-4.

Możliwość ta może być jedynie używana z kodekiem mpeg4 z biblioteki libavcodec. Pamiętaj: chociaż MPlayer poprawnie odtworzy stworzone pliki, inne odtwarzacze mogą użyć złych proporcji obrazu (aspect ratio).

Z pewnością powinieneś wyciąć czarne pasy nad i pod obrazem. Zobacz jak używać filtrów cropdetect i crop na stronie man.

Sposób użycia:

    mencoder przykładowy-svcd.mpg -vf crop=714:548:0:14 -oac copy -ovc lavc \
        -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o wyjście.avi