Inhalt
Intro
Das ist ein Script, der Filme nach xvid wandelt. Dabei ist ein Bitrechner enthalten, dessen Werte man gleich übernehmen kann. Man kann die Bitrate aber auch voll händisch wählen. Es sind auch verschiedene Grössen des Videoformates möglich. Jedoch geben wir nur die Breite an. Die Höhe wird automatisch angepasst. Bei Unterschreiten einer Bitrate zu der Grösse wird man gewarnt. Man kann es aber doch aktzeptieren. Was ich nicht empfehle.
Es gibt immer Leute die dann sagen, macht doch ein 2 Pass Encoding. Ich hab schon das alles durch, auch x-pass Encoding, also x-fach durch. Aber schlussendlich kann man bei 2-pass nur 5% an qualität gewinnen, oder an der Grösse einspahren. Wie man es anschaut. Aber ich kauf mir lieber etwas mehr Harddisk, als mein Rechner wegen 5% mehr Qualität, zweimal - oder gar x-mal länger daran laufen zu lassen.
Der Codec ist so gut wie er ist, den wir verwenden. Da rettet ihm auch ein 2-Pass Verfahren nicht den Arsch!
Die oberste Zeile darf beim Speichern in eine Datei, kein Leerzeichen am Anfang haben!
#!/bin/bash # scriptname: movie2xvid # Wandelt Filme in das xvid Format # # Installieren: # chown root.root /usr/local/bin/movie2xvid # chmod 755 /usr/local/bin/movie2xvid # # Benötigte Programme, mencoder libavcodec lame #(http://wiki.ubuntuusers.de/mencoder) vers="Okt 2012" if [ -a "$1" ]; then cmd=do_xvid else cmd=nomovie fi if [ -z "$2" ]; then cmd=notarget fi if [ "$1" == "help" ]; then cmd=help fi if [ "$1" == "ff" ]; then cmd=fuel_folder fi #######Video Bitrate if [ "$cmd" != "nomovie" ]&&[ "$cmd" != "notarget" ]&&[ "$cmd" != "help" ];then b=loopit vbit='' while [ "$b" == "loopit" ] do clear echo echo " Bitrate wählen für xvid File" echo "----------------------------------------------------------------" echo " max. Auflösung möglich Breite pixel" echo " 1. 380kBit/s 320px" echo " 2. 470kBit/s 480px" echo " 3. 600kBit/s 533px" echo " 4. 830kBit/s 640px" echo " 5. 900kBit/s" echo " 6. 1000kBit/s 720px" echo " 7. 1250kBit/s" echo " 8. 1500kBit/s" echo " 9. 1750kBit/s 1280px" echo " 10. 2000kBit/s" echo " 11. 2250kBit/s" echo " 12. 2500kBit/s" echo " 13. 2750kBit/s" echo " 14. 3000kBit/s 1920px" echo " 15. 3250kBit/s" echo " 16. 3500kBit/s" echo " 17. 3750kBit/s" echo " 18. 4000kBit/s" echo " 19. 4250kBit/s" echo "----------------------------------------------------------------" echo " 20. Bitrate von Hand eingeben" if [ -n "$vbitman" ];then echo echo " ->Momentan von Hand eingegebene Bitrate: $vbitman kbit/s" echo fi echo " 21. Video Bitrate Calculator" if [ -n "$vbitcal" ];then echo echo " ->Momentan errechnete Bitrate: $vbitcal kbit/s" echo " ->Für Filmlänge $min Minuten und $fsize MByte Grösse" echo fi echo " 22. Bitrate übernehmen Hand/Calculator" echo "----------------------------------------------------------------" echo echo " Standardwert ist 850kbit/s: Ohne Eingabe bleibt 850!" echo echo -n " Ihre Wahl? ";read b echo if [ -n "$b" ];then if [ $b -ge 1 ] && [ $b -le 22 ];then case "$b" in 1) vbit=380 ;; 2) vbit=470 ;; 3) vbit=600 ;; 4) vbit=830 ;; 5) vbit=900 ;; 6) vbit=1000 ;; 7) vbit=1250 ;; 8) vbit=1500 ;; 9) vbit=1750 ;; 10) vbit=2000 ;; 11) vbit=2250 ;; 12) vbit=2500 ;; 13) vbit=2750 ;; 14) vbit=3000 ;; 15) vbit=3250 ;; 16) vbit=3500 ;; 17) vbit=3750 ;; 18) vbit=4000 ;; 19) vbit=4250 ;; 20) vbitman='' while [ -z "$vbitman" ] do clear echo echo " Bitrate von Hand eingeben" echo "---------------------------" echo echo -n " Bitte Bitrate angeben (nur Ganzzahl)kbit/s: ";read vbitman done vbit=$vbitman vbitcal='' b="loopit" ;; 21) min='' while [ -z "$min" ] do clear echo echo " Video Bitrate Calculator" echo "---------------------------" echo echo -n " Bitte Filmlänge angeben in Minuten (nur Ganzzahl): ";read min done fsize='' while [ -z "$fsize" ] do clear echo echo " Video Bitrate Calculator" echo "---------------------------" echo echo -n " Endgrössse der Ausgabedatei angeben in MegaByte (nur Ganzzahl): ";read fsize done asize=`expr "$min" \* 60 \* 128 \/ 8` tmp=`expr "$fsize" \* 1000 - "$asize"` tmp2=`expr "$min" \* 60 \/ 8` vbitcal=`expr "$tmp" \/ "$tmp2"` vbit=$vbitcal vbitman='' b="loopit" ;; 22) ;; esac else vbit=850 fi else vbit=850 fi done #######Videogrösse Breite b=loopit warn='' wsize='' while [ "$b" == "loopit" ] do clear echo echo " Videogrösse wählen xvid (nur die Breite, Höhe autom.)" echo "----------------------------------------------------------" echo " minimum Bitrate kbit/s" echo " 1. VHS/VCD 320px 380" echo " 2. SVCD 480px 470" echo " 3. S-VHS 533px 600" echo " 4. Laserdisc 640px 830" echo " 6. DVD 720px 1000" echo " 9. HDTV 720p 1280px 1750" echo " 14. HDTV 1080p 1920px 3000" echo echo " 5 / 7 8 und 10 bis 13 sind ohne Funktion" echo echo "----------------------------------------------------------" echo " 15. Wert von Hand eingeben" if [ -n "$wsizeman" ];then echo echo " ->Momentan von Hand eingegebene Grösse: $wsizeman Pixel" echo fi if [ -n "$warn" ];then echo " Ihre Wahl ist zu gross für die vorher gewählte Bitrate!" echo " Bitrate: $vbit kbit/s" echo echo " Sie können aber den Wert trotzedem mit Punkt 16 übernehmen." echo warn='' fi echo " 16. Wert von Hand übernehmen" echo "----------------------------------------------------------" echo echo " Standardwert ist 640px: Ohne Eingabe bleibt 640!" echo echo -n " Ihre Wahl? ";read b echo if [ -n "$b" ];then if [ $b -ge 1 ] && [ $b -le 16 ];then case "$b" in 1) if [ "$vbit" -le 379 ];then b=loopit warn=1 wsize=320 wsizeman=320 else wsize=320 fi ;; 2) if [ "$vbit" -le 469 ];then b=loopit warn=1 wsize=480 wsizeman=480 else wsize=480 fi ;; 3) if [ "$vbit" -le 599 ];then b=loopit warn=1 wsize=533 wsizeman=533 else wsize=533 fi ;; 4) if [ "$vbit" -le 829 ];then b=loopit warn=1 wsize=640 wsizeman=640 else wsize=640 fi ;; 5) b=loopit ;; 6) if [ "$vbit" -le 999 ];then b=loopit warn=1 wsize=720 wsizeman=720 else wsize=720 fi ;; 7) b=loopit ;; 8) b=loopit ;; 9) if [ "$vbit" -le 1749 ];then b=loopit warn=1 wsize=1280 wsizeman=1280 else wsize=1280 fi ;; 10) b=loopit ;; 11) b=loopit ;; 12) b=loopit ;; 13) b=loopit ;; 14) if [ "$vbit" -le 2999 ];then b=loopit warn=1 wsize=1920 wsizeman=1920 else wsize=1920 fi ;; 15) wsizeman='' while [ -z "$wsizeman" ] do clear echo echo " Videogrösse von Hand eingeben xvid" echo "-------------------------------------" echo echo -n " Bitte Breite in Pixel angeben (nur Ganzzahl): ";read wsizeman done wsize=$wsizeman b="loopit" ;; 16) ;; esac else wsize=640 fi else wsize=640 fi done fi case "$cmd" in do_xvid) mencoder "$1" -vf scale="$wsize":-10 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:bitrate="$vbit" -alang de -oac mp3lame -lameopts vbr=0:mode=1 -af volnorm=1 -ofps 23.976 -o "$2".avi ;; fuel_folder) count=0 countall=0 pwd0=`pwd` mkdir -p movie2output_xvid if [ -z "$2" ]; then format=*.* else format=*.$2 fi countall=`ls $format | wc -l` for file in $format; do if [ -d "$file" ]; then echo echo echo -n Nichts zu tun für Ordner "$pwd0"/"$file"; echo else if [ -e "$file" ]; then count=$[$count+1] echo echo echo -n Bearbeite "$count" von "$countall" Dateien: "$pwd0"/"$file"; echo echo output=`echo "$file" | sed s/\.[^\.]*$//` #Code mencoder -vf scale="$wsize":-10 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:bitrate="$vbit" -alang de -oac mp3lame -lameopts vbr=0:mode=1 -af volnorm=1 -ofps 23.976 -o movie2output_xvid/"$output".avi "$file" echo echo echo -n " ""$count". Decodierte Datei gespeichert in "$pwd0"/movie2output_xvid/"$output".mpg echo fi fi done ;; nomovie) echo echo " Keinen gültigen Film angegeben" echo " movie2xvid help" echo ;; notarget) echo echo " Keine Zieldatei angegeben" echo " movie2xvid help" echo ;; help) echo echo " Hilfe zu movie2xvid ""$vers" echo "=====================================================================" echo " Wandelt Filme in das xvid Format" echo echo " Normal Anwendung:" echo " movie2xvid QuellFilmdatei ZielFilmDatei" echo echo " Stapelanwendung:" echo " movie2xvid ff format" echo " Wandelt alle filme des Ordners nach Unterordner movie2output_xvid." echo " format kann leer bleiben, oder als Filter, welche gewandelt werden sollen nach xvid." echo ;; esac