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