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
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ń:
i strumień nieprawidłowy:

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