Dokładna instrukcja jak przerobić DVD na mp4
 
W kilkunastu prostych krokach:D
(z uzyskaniem maksymalnej jakości)
 
O tym jak stworzyć plik *.mp4
z video zakodowanym w h264/X264, audio w AAC,
z wmuxowanymi napisami i z zachowaniem informacji o rozdziałach,
oraz o tym jak odtworzyć plik mp4, jak zdekodować dźwięk LC lub HE AAC
oraz jak poprawnie zdekodować wideo h264/AVC (X264, nero digital).
Uwaga! Nie jest to opis jak stworzyć mp4
z wideo dla iPoda (lub innych "mpczwórek")!


Na podstawie www.doom9.org/mp4.htm
i http://megui.sourceforge.net/

Strona główna      Konfiguracja ffdshow
 


Wykaz przydatnych programów:


DVD decrypter - do ripowania dvd na hdd
x264 - do kodowania wideo
faac.exe - do kodowania dźwięku w AAC
faad.exe - do zamiany mp4 w aac
Ivan & Menno - front end do faac i faad
DGMpegDec - znany również jako DGIndex dekoder mpeg2
Avisynth i AVSedit - frameserving na bazie skryptów
MeGUI - następca virtual duba ;-)
yamb - do zamiany mp4 na strumień h264
mencoder - (wersja 1.0pre7) potrzebny w MeGUI i besweecie
besweet - (wersja 1.5) potrzebny w MeGUI
bse_faac.dll - potrzebne besweetowi do faac
(jest w paczce z betą 0.22 belight)

mp4box - potrzebny w MeGUI i yamb'ie do tworzenia mp4
mp4creator - (skompilowana przez Celtic Druida paczka MPEG4ip)
potrzebny w Ivan & Menno do zamiany mp4 w aac

...



Do dekodowania X264 potrzebne są:


Haali media splitter - po prawej w download, jako "matroska splitter"
Dobry player, np BSplayer
lub Media Player Classic
nowe ffdshow + postprocessing + audio (aac)

alternatywnie zamiast ffdshow:
coreAAC - filtr directshow do dźwięku aac
coreAVC - (link jest pod napisem "here")


A oto przykładowy plik (5MB)



Uwaga!
Jeśli szukasz jak odtworzyć plik *.mp4
to niestety muszę Cie trochę rozczarować:
mp4 jest containerem audio wideo.
(tak jak avi, matroska *.mkv i ogg *.ogm)
Oznacza to, że może on zawierać
kilkadziesiąt różnych typów strumieni wideo,
kilka ścieżek audio na raz,
a do tego napisy, menu, gry i inne:P
Na tej stronie nie opiszę co zrobić
by mp4 zaczęły działać
(bo gspot nie obsługuje jeszcze mp4),
ale za to mogę Wam podpowiedzieć,
że mp4 jest formatem wywodzącym się
z applowskiego formatu quicktime.
Tak więc quictime alternative
może okazać się pomocny
przy próbie otworzenia pliku *.mp4 *.3gpp



Spis treści:

0. konfiguracja i instalacja
1. Ripowanie na dysk
2. Dekodowanie
   3:2 pulldown i IVTC
3. Pisanie skryptów
4. Kompresja audio i wideo w megui
   X264
   FAAC
   Kompresja - zakładka queue
5. wyciąganie strumieni raw z audio (i wideo)
   mp4 -> aac
   mp4/avi -> h264
6. Muxowanie wszystkiego do mp4






0. Konfiguracja i instalacja


faac.exe i faad.exe wrzucamy (kopiujemy) do katalogów z besweetem
i frontendem do AAC (Ivan & Menno).

mp4creator umieszczamy w katalogu Ivan & Menno.

bse_FAAC.dll jest potrzebny besweetowi do faac.

Mencoder.exe, który znajduje się w katalogu mplayera po jego instalacji
wrzucamy do katalogu besweeta i MeGUI.

MP4Box.exe wrzucamy do katalogu Yamb'a i megui.

DGDecode.dll wrzucamy do katalogu plugins w katalogu avisyntha.

W megui wchodzimy w tools -> settings -> program paths
i ustawiamy ścieżki dostępu do besweeta, mp4boxa, mencodera, x264
a także do pozostałych programów które mamy (DGIndex, pluginy avisyntha).

W yambie ustawiamy ścieżkę do mp4boxa.

Nie jestem pewien, czy niektóre rzeczy nie są niepotrzebnie zwielokrotnione,
ale mi to nie działało dopóki tak nie zrobiłem.
Wersja mencodera była ważna - dev-CVS nie chodziły jak należy.



1. Ripowanie na dysk

Robimy to za pomocą DVD decryptera.
W menu tools wchodzimy w setting i w zakładce IFO mode
zaznaczamy w polu create additional files:
chapter informaion - OGG
Z tego co wiem megui podczas muxowania mp4 właśnie takie pliki przyjmuje



2. Dekodowanie

Uruchamiamy DGMpegDec i wczytujemy wszystkie voby naszego filmu.

W przypadku materiału, który podejrzewamy o bycie materiałem NTSC
(na przykład svcd, albo dvd ze stanów) należy dany plik otworzyć Gspotem
i popatrzeć na pola Pics/sec Frms/sec, a także na znaczek 3:2 po prawej.
3:2 pulldown to technika "pomnażania" 24 klatek na sekundę (celuloid)
do 30 klatek na sekundę w telewizorach systemu NTSC.

Mimo iż wejściowy materiał jest progresywny* - bez przeplotu,
to po tej operacji, która polega na tym, że co druga klatka
jest wyświetlana jako półtorej klatki. Co druga linia
następnej klatki jest z poprzedniej klatki, a następna klatka
ma połowę swoich linii tej i w następnej klatce.
Rezultatem jest że jak oglądamy materiał klatka po klatce,
np. w virtual dub mod, to widzimy trzy klatki bez przeplotu
i po nich dwie klatki z przeplotem (stąd właśnie 3:2 pulldown)

* - materiał jest w rzeczywistości zapisany z przeplotem,
co się objawia znacznikiem I/L w gspocie, ale obydwa pola
parzyste i nieparzyste pochodzą z tej samej progresywnej klatki
i podczas wyświetlania tworzą jedną klatkę, bez charakterystycznych
dla przeplotu artefaktów w postaci ząbków.

W strumieniach mpeg można dodać specjalne flagi,
które zwykły strumień 23,976fps przerobią odpowiednio na 29,970fps.
Dzięki temu mamy zapisane wszystkie klatki progresywnie
i bez zdublowanych pól. Jednak podczas ripowania takiego strumienia
np. z karty TV (gdzie leci 29,970fps) nie mamy tych flag,
przez co strumień wydaje się być materiałem z przeplotem.

Poniżej znajduje się obraz tego jak wygląda w gspocie prawidłowy strumień:

Gspot: 3:2 pulldown z flagami


i strumień nieprawidłowy:

Gspot: brak informacji o powielonych polach


A co to oznacza dla nas?
Jeśli materiał ma w sobie flagi pulldown (jest prawidłowy)
ustawiamy w DGMpegDec video -> field operation ->
ignore pulldown flags lub forced film.
Dzięki temu na wyjściu otrzymamy 23,976 progresywnych klatek na sekundę.
Jeśli zaś wybierzemy honor pulldown flags to dekoder
zdubluje dla nas odpowiednie pola tworząc materiał 3:2 29,970fps.

W zakładce audio wybieramy odpowiednią ścieżkę audio (polska bywa druga),
lub zamiast "demux track" wybieramy "demux all tracks" - jesli np.
chcemy stworzyć mp4 z kilkoma ścieżkami audio:D
W przypadku plików dwukanałowych zdekoduje nam to dźwięk do wav'a,
a w przypadku dźwięku wielokanałowego otrzymamy nie ruszany plik ac3.

Następnie zostaje nam już tylko stworzenie (zapisanie) projektu d2v.

Uwaga: Przy wybieraniu vobów do dekodowania
należy zwrócić szczególną uwagę na to co otrzymujemy.
W przypadku filmu "imię róży" po wybraniu vobów z filmem
od voba 1 do ostatniego na początku oprócz filmu było
jeszcze jakieś 4 minuty wstępu - i dodatkowy oddzielny plik ac3.
Bez usunięcia tego zbędnego początkowego śmiecia
(przyciski "<" i ">" przeskakują o około 10 klatek,
przyciski "[" i "]" zaznaczają początek i koniec
fragmentu do zdekodowania)
synchronizacja audio nie była by taka prosta.
W przypadku filmu "madagascar" na początku pierwszego voba
były trzy krótkie puste komórki cells
(film i dźwięk zaczynał się od cell ID 4,a vob od cell ID 1),
co powodowało, że na początku filmu uzyskałem około 2,5s
czarnego obrazu mimo, że dźwięk już poszedł i się wszystko rozjechało:(



3. Pisanie skryptów.

AVSEdit jest wygodnym edytorem skryptów do avisyntha.
Jest tutaj help do każdego parametru, a jak klikniemy po lewej stronie linii
to w oknie po prawej pojawiają się opcje danego parametru.
Jest tam też przycisk help i np. crop editor,
jeśli zaznaczymy linię z cropem:)

Poniżej zamieszczam dwa przykładowe skrypty.
Pierwszy jest standardowym skryptem jaki będziemy używać:

LoadPlugin ("D:\Program Files\DGMpegDec\DGDecode.dll")
MPEG2Source("E:\projekt.d2v")
Crop(left,top,right,bottom)
Lanczos4Resize(640,272)

Oczywiście ścieżki wybieramy własne.
W przypadku cropa wchodzimy w crop editor po prawej na dole
i ustawiamy odpowiednie obcięcia (zasłaniamy czarne pasy).

Co do docelowej rozdzielczości, to mam nadzieję umiecie już ją ustawiać
i potraficie wyliczyć właściwe aspect ratio:D Tutaj jest ustawiona
rozdzielczość dla filmów panavision - 2,35:1

W opcjach MPEG2Source możemy ustawić cpu=6 dla pełnego postprocessingu,
oraz iPP=true jeśli mamy materiał z przeplotem i stosujemy postprocessing.
Postprocessing warto włączyć jeśli w źródle są widoczne bloki,
lub jest ogólnie niskiej jakości.
Powinno to wyglądać tak:

MPEG2Source("projekt.d2v",cpu=6,iPP=true)

Drugi skrypt jest przydatny w przypadku źródeł z zepsutym pulldownem.
DGmpegDec w przypadku materiałów z przeplotem może być źródłem przebarwień
na tych obszarach, więc jako źródło wykorzystamy dekoder libmpeg2 z ffdshow

DirectShowSource("E:\plik.m2v",23.976)
LoadPlugin ("D:\Program Files\AviSynth 2.5\plugins\decomb.dll")
Telecide()
Decimate()
#Crop(left,top,right,bottom)
Lanczos4Resize(640,480)
ConvertToYUY2()
TemporalSoften(2,3,6,scenechange=15)
SpatialSoften(1,3,6)
SpatialSoften(6,2,2)
#Sharpen(0.2)
ConvertToYV12()

Jak widzicie ten skrypcik jest ciut bardziej rozbudowany:D
decomb.dll oraz funkcja Telecide() służą do usuwania zdublowanych pól.
(nazywa się to invert telecine, IVTC lub 3:2 pulldown removal)
Stąd mimo iż nasz materiał wejściowy ma 29.970fps ustawiamy 23.976fps.

Funkcja Decimate() służy do usuwania zdublowanych klatek,
które zostały po telecide, ale raz stwierdziłem,
że bez tego zostało tyle klatek ile trzeba,
natomiast potem robiąc to samo zostawały:P
Można to wyłączyć poprzez dodanie # przed linią.

ConvertToYUY2() - format YUY2 jest potrzebny filtrom wygładzającym poniżej.

TemporalSoften(2,3,6,scenechange=15) - wygładzanie czasowe.
2 oznacza ze będzie działało w promieniu dwóch klatek.
3 i 6 są to wartości progowe poniżej jakich (mniejsze wartości - mniej rozmyte!)
filtr ma działać. Pierwsza odnosi się do różnicy w jasności, druga do koloru.
scenechange=15 - aby nie mieszało ze sobą klatek pochodzących z różnych scen.
Wartość standardowa (bez tego parametru) jest też ok.

Potem w skrypcie znajdują się filtry wygładzające sąsiednie piksele:
SpatialSoften(1,3,6)
SpatialSoften(6,2,2)
pierwszy rozmywa dość mocno (3,6) piksele w promieniu 1 piksela,
a drugi ostrożnie i delikatnie (2,2) wygładza większe powierzchnie (6 pikseli)

Kombinacje tych trzech filtrów opracowałem do konwersji
pewnego przekompresowanego SVCD. Efekt był w miarę ok,
ale polecam wam samemu dobrać swoje optymalne własności.
Jedna rada: im mniej tym lepiej:D
(te trzy filtry na raz dadzą Wam "mydło":)

#Sharpen(0.2) - wyostrzanie jest wyłączone, bo po w/w filtrach
i przy kolejnej rekompresji materiału daje nieciekawe efekty:/
Jako że jest to zwykły filtr wzmacniający wysokie częstotliwości
nie należy spodziewać się po nim cudów.

ConvertToYV12() - MeGUI przyjmie wideo tylko w tym formacie,
więc nie zapomnijcie go zmienić z powrotem!



4. kompresja audio i wideo w MeGUI :D

Wczytujemy skrypt avs i w podglądzie sprawdzamy
czy jest wszystko ok (zwłaszcza z wygładzaniem i IVTC)

Wybieramy nazwę pliku wyjściowego,
jego format (RAW!), oraz kodek - AVC.

Wadą strumienia raw jest to, że nijak nie da się go podejrzeć,
dlatego do testów jakości kompresji polecam zaznaczyć kawałek voba
w DgMpegDec ("[" i "]") zapisać jako d2v i podmienić ten plik w avs'ie,
a następnie skompresować go do mp4



Klikamy config...

... i ustawiamy enkoder x264:D

(jeśli zawiesimy kursor nad jakimś parametrem pojawi się jego opis oraz
zalecane i domyślne jego ustawienia, ich wpływ na jakość oraz szybkość kodowania)

Włączamy turbo, automated 2pass i wpisujemy wyliczony
jakimś kalkulatorem bitrate. Włączamy deblocking.
Wymaga to odpowiedniego ustawienia postprocessingu w ffdshow,
ale daje niesamowite rezultaty w postaci wideo wolnego od bloków
i pełnego szczegółów przy niskich bitratach! (czasem przy Qf= 0,1 bit/px!)

W zakładce rate control włączamy chroma M.E.
M.E. range możemy zwiększyć do 24 (zwłaszcza w przypadku dynamicznych scen)
M.E. algorithm wybieramy hexagon lub wolniejszy, ale lepszy multi hex.
Subpixel refinement ustawiamy na 6 - RDO lub 7 RDO level 2.
RDO, czyli rate distortion optimization, to znane nam już z xvida VHQ :)

Zakładka Quantization:
W części "quantizers" zostawiamy standardowe wartości.
Macroblock options -wybieramy all, co daje najlepsze efekty,
ale wymusza użycia H264 high profile zamiast main profile,
a nie wiem jak to będzie z przyszłymi odtwarzaczami...
Ustawiamy następnie 2-3 klatki B i zaznaczamy te pięć opcji co jest pod spodem.
Zostawiamy bias na 0 (chyba że chcemy mniej lub więcej klatek B) i temporal mode.
Włączamy trellisa na opcje 1 - Final MB.
Zaznaczamy no fast P-skip, jeśli mamy czas;) i chcemy,
żeby nasze wideo było naprawdę wolne od bloków,
lub mamy z nimi problem (bo się pojawiają)
Koniecznie używamy kompresji typu CABAC - jest 30% wolniejsza,
ale znacznie wydajniejsza od CAVLC.
Ustawiamy mixed references i ich liczbę na około 5.
Quantization matrix zostawiamy standardowo - none.

W zakładce zones możemy dodać strefy, gdzie film będzie mocniej kompresowany
np. napisy końcowe: ustawiamy im weight 20% lub quantizer powyżej 30
(max to 51, standardowo uzyskujemy q~25)

Klikamy ok.

PS: w zasadzie konfiguracja X264 przez jego interface vfw
jest identyczna z drobnymi wyjątkami:
nie ma ustawień fast P-skip,
nie ma własnych macierzy kwantyzacji:  flat, custom i JVT,
nie da się ustawić stref - zones,
nie da się ustawić dwóch przebiegów na raz,
ani obliczyć PSNR...
Cóż CLI jest lepsze:P


Ustawienia audio:

Ładujemy ścieżkę audio, wybieramy nazwę pliku
(uwaga! będziemy robić na razie oddzielny plik audio i wideo!)
i kodek FAAC.
Klikamy config. wybieramy stereo, lub jeśli mamy wielokanałowy dźwięk
to wybieramy 5.1 lub dolby pro logic lub dolby pro logic II,
jeśli celujemy z całością w 1CD, a nasz amplituner obsługuje te formaty.
Increase volume automaticly znormalizuje nam poziom głośności.
Wybieramy albo stały bitrate (np. 128 lub 320 dla dźwięku 5.1)
albo stałą jakość (VBR). 100% zachowa nam teoretycznie wszystko
co jesteśmy w stanie usłyszeć. Praktycznie tnie to częstotliwości powyżej 16kHz.
75% to wg mnie takie rozsądne minimum, a 150% daje nam pełną jakość do 22kHz.

Mimo iż to CBR to jest w zasadzie ABR, to jednak polecałbym VBR=100.
Klikamy ok i klikamy queue przy audio.
Po zakodowaniu audio możemy sprawdzić ile zajęło, jaki ma bitrate
(Ivan & Menno, foobar2000) i wyliczyć bitrate dla wideo.


Kompresja - zakładka queue

Następnie przechodzimy do zakładki queue i klikamy start.
Potem można zakolejkować wideo i wykonać pozostałe dwie operacje tj.
pierwszy i drugi przebieg kodowania wideo.
Przy opisanych tu ustawieniach na bartonie 2500+ (1833MHz)
osiągam prędkość około 2,5 klatek na sekundę, czyli film 2 godziny
będzie się kodował około 40 godzin :O



5. wyciąganie strumieni raw z audio (i wideo)

Niestety sporą wadą MeGUI jest to, że nie udało mi się
go zmusić do stworzenia bezpośrednio mp4 z audio i wideo razem:/
Kolejną wadą MeGUIi jest to, że do muxowania mp4 wymaga
"czystych" strumieni raw, a nie mp4, m4a, avi czy co tam jeszcze...

mp4 -> aac

Do tej zamiany posłuży nam frontend do faac i faad - Ivan & Menno.
Wczytujemy nasz plik mp4 z audio. Przechodzimy do zakładki mp4creator.
Opcja list tracks in mp4/m4a files wyświetli nam ifo
o ścieżkach zawartych w mp4, oraz m.in. bitracie audio i fps wideo.
Nas interesuje opcja convert mp4/m4a to aac mpeg4.
Trwa to kilka sekund i mamy plik aac.

mp4/avi -> h264

Do tego służy nam yamb.
W zakładce extract wczytujemy plik z wideo.
Wybieramy albo extract video, albo
extract track ID 1 in raw format i klikamy extract.
Potem zmieniamy rozszerzenie otrzymanego pliku z h464 na 264.

Oczywiście jeśli wcześniej wybraliśmy format raw
jako nasz produkt wyjściowy po kompresji
to nic takiego nie musimy robić.


6. Muxowanie wszystkiego do mp4

Wracamy do MeGUI, gdzie z zakładki tools wybieramy muxer -> mp4 muxer.
Podajemy ścieżkę do naszego pliku 264 i wybieramy jego fps.
Podajemy też ścieżkę do pliku aac z audio i wybieramy jego język.
Można wybrać dwie ścieżki audio.
I pięć ścieżek z napisami w formacie srt:)
I do tego wyeksportowane wcześniej DVD decrypterem info o rozdziałach (chapter).
Potem ustawiamy jak ma się nazywać plik wyjściowy i na jakie kawałki go podzielić.
Klikamy queue i w zakładce queue klikamy start,
aby zacząć tworzenie naszego finalnego pliku :D


Powodzenia!


Wstępnie napisano dnia 4 lutego 2006 roku, godzina 4:38 rano:P



Get Firefox! Valid HTML 4.01! Document made with Nvu