Ripowanie płyt DVD do AVI
Trudno mi było znaleźć program do ripowania płyt DVD do formatu AVI. Po wielu próbach postanowiłem skorzystać z programu
mplayer zawierającego koder do formatu
avi, o nazwie
mencoder. Obsługa
tego programu z linii poleceń jest męcząca i dlatego napisałem prosty skrypt powłoki, który dobrze spełnia swoją rolę. Zastosowałem w
nim kodowanie w jednym przebiegu, lecz mimo to jakość pliku końcowego jest dobra. Domyślne ustawienia to
wysoka jakość
kodowania, dźwięk w formacie
mp3 i bitrate
96, skalowanie
720:405, filtr ramki obrazu
oraz nagrywanie foni lub tekstu po polsku. Skrypt można pobrać
stąd, a jego zawartość (dla
ripowania pojedyńczego) jest zamieszczona poniżej. W paczce jest sześć skryptów, z czego dwa są do ripowania podwójnego.
Ze względu na
czytelność strony długie linie skryptu
są złamane, co zaznaczyłem napisem
łam w nawiasach.
#!/bin/sh
set -x
a=/home/andrzej
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --cr-wrap \
--title "DVDriper do formatu AVI" --clear \
--inputbox \
"Podaj numer utworu:" 0 0 2> /tmp/numer
retval=$?
case $retval in
0)
mencoder dvd://`cat /tmp/numer` -sws 2 -o $a/film.avi -oac mp3lame -lameopts cbr:br=96 -ovc lavc (łam)
-lavcopts vcodec=mpeg4:vhq:vbitrate=750 -vop scale=720:405,crop=708:568:8:8 -alang pl,en -slang pl;;
1)
exit;;
255)
exit;;
esac
rm -f /tmp/file*
rm -f /tmp/numer
Poniżej podam kilka zrzutów z pracy skryptu.
Skrypt został opracowany pod kątem maksymalnej prostoty eksploatacji. Aby dopasować skrypt do swoich wymagań należy
zmienić zmienną a. Można także zwiększyć wartość bitrate dźwięku przy filmach muzycznych do wartości
128. Możemy też manipulować wartości bitrate obrazu, która jest ustalana doświadczalnie, po nagraniu kilku
minut filmu. Widać na zrzucie, że przy wartości 750 wielkość filmu będzie wynosiła 749 MB. Film taki musimy
wypalić na płycie 800 MB. Jeżeli zależy nam na dobrej jakości filmu to musimy wypalić go na dwóch płytach, co daje bitrate
(u mnie) około 1200. Można także ustalić ją na 659 i filmy będzie można nagrywać na płycie
700 MB, ale z gorszą jakością. Ja mam ustawione na płytę 800 MB. Wymiary obrazu są ustalone na
720:405 z filtrem obwódek. Opcja -alang pl,en szuka i nagrywa fonię polską, a gdy jej nie ma to
fonię angielską. Następna opcja -slang pl szuka tekstu polskiego, w przypadku braku
polskiej foni i wczytuje ją do pliku AVI. Zostało poczynione założenie, że polska fonia
nie będzie występowała wraz z polskim tekstem. Dlatego też, gdy film jest po polsku to brak tekstu jest
ignorowany. Jeżeli fonia jest po angielsku, to polski tekst zostanie samoczynnie wyszukany i nagrany.
Jak do tej pory ripowanie płyt DVD do formatu AVI jest czynnością prostą, lecz czasochłonną. Zdarzaja
sie czasami płyty, które po otwarciu wywołują efekt "zawieszenia się" skryptu, lecz po określonym czasie (nawet do pół godziny)
zaczynają się ripować. Plik film.avi zwieksza swoją objetość, a wszystkie cyfry wyświetlane przez skrypt stoją na zerze. Mimo
tego film się ripuje i daje normalnie odtwarzać. Na koniec
kilka słów o zainstalowanych pakietach. Ja mam wgrane: mplayer, xine, libdvdcss, lame, oraz mpeg2dec. Czasami właściwy
film ma inny numer niż 1. Uruchamiam wtedy Mplayer-a (klikając prawym klawiszem myszki na okno obrazu),
wybieram DVD-Zamontuj dysk i sprawdzam numer filmu. Aby wykluczyć przypadek wystepowania na raz polskiej
foni i tekstu należy stworzyć dwa skrypty. W pierwszym ostatnia opcja to -alang pl, a w
drugim -slang pl. Razem ze skryptami dołączyłem dwa inne skrypty do sprawdzania kodeków audio i
video. Zdarzył mi się również przypadek, że na płycie język polski był zakodowany jako
fiński. Należy wtedy zmienić w skrypcie
litery pl na fi.
Dla osób, którym zależy na jeszcze lepszej jakości obrazu jest opracowana metoda konwersji dwu oraz trój stopniowej. Ja sprawdziłem
metodę dwustopniową i ją opiszę. W pierwszej fazie odczytu jest zapisywany dźwięk i obraz oraz jest tworzony plik
divx2pass.log, w którym są zapisywane nagłe zmiany akcji obrazu i koloru. W drugiej fazie korzystając z danych z
powyższego pliku kodek video (w czasie akcji) zmienia wartość bitrate na większą, przez co poprawia sie jakość obrazu. Z własnych
obserwacji stwierdziłem, że zmiana bitrate dźwięku na br=64 nie pogarsza fonii filmu, a znacząco zmniejsza jego
objętość. Dzięki temu filmy mieszczą się na płycie 800 MB. Wada podwójnego ripowania jest dwukrotne odtwarzanie płyty z filmem, przez co
ripowanie trwa dwa razy dłużej niż przy ripowaniu jednostopniowym. Jednakże jakość płyty to wynagradza.
Dla wygody opracowałem graficzne gui z programem Xdialog, które pozwala obsługiwać polecenia mencodera w prosty sposób, co pokazują zrzuty ekranu:
Program pozwala wybrać poszczególne pliki do ripowania, co w niektórych przypadkach można uznać za zaletę. Zastosowano w nim kodowanie dwustopniowe, a paczkę ze skryptem można pobrać
z tego miejsca. Jedyne co należy zmienić to katalogi domowe użytkowników. Jakość uzyskanych filmów jest dobra i dla większości zastosowań wystarczająca. A oto kod skryptu, którego niektóre linie zostały "złamane", a powinien być w jednej linii:
#!/bin/sh
#set -x
Xdialog --title "Wybierz film do ripowania" --fselect /home/andrzej/Warp 0 0 2> /tmp/.odczyt_dvd
Xdialog --title "Zapisz film jako" --fselect /home/andrzej/Warp 0 0 2> /tmp/.zapis_dvd
Xdialog --title "Podaj bitrate dźwięku" --inputbox "Domyślnie 128" 0 0 128 2> /tmp/.dźwięk_dvd
Xdialog --title "Podaj bitrate obrazu" --inputbox "Domyślnie 1100" 0 0 1100 2> /tmp/.obraz_dvd
Xdialog --title "Wybierz rozmiary ekranu" --inputbox "Domyślnie\n640:480\n720:405" 0 0 640:480 2> /tmp/.rozmiar_dvd
Xdialog --title "Podaj język napisów" --inputbox "Domyślnie pl" 0 0 pl 2> /tmp/.napisy_dvd
mencoder `cat /tmp/.odczyt_dvd` -sws 2 -o `cat /tmp/.zapis_dvd` -oac mp3lame -lameopts cbr:br=`cat /tmp/.dźwięk_dvd` -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vhq:vbitrate=`cat /tmp/.obraz_dvd` -vop scale=`cat /tmp/.rozmiar_dvd` -alang pl,en -slang `cat /tmp/.napisy_dvd`
mencoder `cat /tmp/.odczyt_dvd` -sws 2 -o `cat /tmp/.zapis_dvd` -oac mp3lame -lameopts cbr:br=`cat /tmp/.dźwięk_dvd` -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vhq:vbitrate=`cat /tmp/.obraz_dvd` -vop scale=`cat /tmp/.rozmiar_dvd` -alang pl,en -slang `cat /tmp/.napisy_dvd`
rm -f /tmp/.odczyt_dvd
rm -f /tmp/.zapis_dvd
rm -f /tmp/.dźwięk_dvd
rm -f /tmp/.obraz_dvd
rm -f /tmp/.napisy_dvd
rm -f /tmp/.rozmiar_dvd
rm -f /home/andrzej/divx2pass.log
do góry