Hallo!
Ich habe mir ein kleines Skript gebastelt mit dem ich meine DVD-Sammlung ein bisschen reduzieren und auf meinem VDR speichern kann.
Das Skript nutzte lsdvd, ** und HandBrakeCLI.
Manche Hersteller machen es einem nicht ganz einfach und so kommt es ab und an vor, das kein Ton vorhanden ist oder sich der Film nicht starten läßt.
Derzeit gucke ich nach 1,5h ob sich die Datei, manuell, abspielen läßt um dann ggf. die Datei gleich zu löschen.
Aber wozu ein Skript basteln wenn es einem die lästige Arbeit nicht abnimmt?
Welche Möglichkeit habe ich nun mittels avconv (ffmpeg) zu gucken ob der Film spielt und Ton hat?
Derzeit frage ich ab, ob die Datei zu klein ist.
Das löst aber nur das Problem, wenn die Sicherung zwischendurch abbricht.
- Programmaufrufe die kritisch sein könnten, habe ich entfernt (Urheberrechtsverletzung)! Evtl. werden dadurch Variablen nicht gefüttert!
Gruß
Uwe
#!/bin/bash
clear
set -x
echo "Serien-DVD: Daten für Staffel und Folge werden abgefragt und ein Backup wird erstellt!"
echo "DVD-Verzeichnis: Daten konvertieren die nicht bei Serien-DVD bearbeitet wurden!"
echo "DVD-Direkt: Wie Serien-DVD aber ohne Backup!"
echo "Einzel-DVD: Spielfilme ohne Backup"
echo ""
# Start- / End-Datei, wo sich die Folgen befinden. Z.B Sammeldatei auf 1, dann sind die Folgen auf 1-5
# Disc und Season selbsterklärend
# Korrekturwert: Wenn die zweite Datei auf der DVD die folge ist, dann ist der Wert "1" (2-1=1)
# Temp-Verzeichnis erweitert die Temp-Datei Nummer um fortlaufende Zahl und Startwert des Zählers
# Daten der DVD auslesen und in Variablen schreiben
eject -t /dev/sr0 &&
lsdvd -x > /tmp/rip.tmp
film_title=$(grep -i "Disc " /tmp/rip.tmp | sed 's/Disc Title: //; s/_DVD.*//; s/_DISC.*//')
serien_title=$(grep -i "Disc " /tmp/rip.tmp | sed 's/Disc Title: //; s/_DVD.*//; s/_DISC.*//; s/_.*//')
tmp_nr_season=$(grep -oi "SEASON.*" /tmp/rip.tmp | sed 's/[A-Za-z:_]//g'| cut -c1)
nr_haupt=$(grep "Longest" /tmp/rip.tmp | sed 's/Longest track: //; s/0//')
nr_disc=$(grep -oi "Disc_.*" /tmp/rip.tmp | cut -c6)
#nr_disc=$(grep -oi "DISC.*" /tmp/rip.tmp |sed 's/DISC//; s/[ _-]//')
audio_de=$(grep "Deutsch, Format:" /tmp/rip.tmp | sed q |cut -c9)
audio_en=$(grep "English, Format:" /tmp/rip.tmp | sed q |cut -c9)
verz_out=("/srv/samba/filme")
tmp_zeit_wert_var=$(grep "Title: 01" /tmp/rip.tmp |sed 's/Chapter.*//; s/Length: //; s/Title: 0.,//')
function serie(){
# Weiterleitung zur nächsten Funktion
## Elseif für das Füttern der Variablen und dvdbackup
if
# Wenn leer dann Serien-DVD Backup
# Wenn Wert enthalten Serien-DVD direkt
[ -z "$tmp_var" ]
then
# read -p "Start-/ Endwert eingeben: " start_var end_var
# read -p "Nummer der Season eingeben: " tmp_nr_season
backup
else
serien-dvd
fi
}
function backup(){
# DVD
## Kontrolieren ob Verzeichnis Filme -> Serien -> Serienname vorhanden ist.
## Wenn nicht erstellen ansonsten überspringen!
## Dateiname für das tmp_Verzeichnis muss eingekürzt werden, sonst gibt
## die Abarbeitung ´des Verzeichnisses eine Fehlermeldung
# nr_haupt und T_dvdback_haupt vergleichen. Wenn gleich dann normaler Titel,
# wenn ungleich dann Titelzusammenstellung
# Vaiable "tmp_title_var" schaltet zwischen "-T" (Titelzusammenstellung) "-t" (Titel) um
for back_var in `seq $start_var $end_var`
do
if [ "$start_var" -a "$end_var" -eq "1" -a "$nr_haupt" == "$T_dvdback_haupt" ]
then
tmp_title_var=-t
tmp_block_var=m
# Hier steht ein Programmaufruf
elif [ "$start_var" -a "$end_var" -eq "1" -a "$nr_haupt" != "$T_dvdback_haupt" ]
then
tmp_title_var=-T
tmp_block_var=b
# Hier steht ein Programmaufruf
else
tmp_title_var=-t
tmp_block_var=b
# Hier steht ein Programmaufruf
fi
echo "Backupschleife läuft!"
# Nachdem die Datei auf die Festplatte geschrieben wurde, wird ueberprüft,
# ob mehrere VOB Dateien erstellt wurden. Wenn ja, dann führt "cat" die
# Dateien zusammen und kopiert die Datei um
for file in "t${nr_season}${nr_disc}${back_var}"
do verz_stg_back=$(find $file -name *_2.VOB);
if [ -z "$verz_stg_back" ];
then
echo "Keine mehrteilige Filmdatei gefunden, wird erstellt..."
# echo "Titelzusammenstellung wird bearbeitet!"
# tmp_title_var=-T
# tmp_block_var=m
# Hier steht ein Programmaufruf
# verz_back=$(dirname "$verz_stg_back")
else
echo "Datei wird geschnitten! Bitte Gedult!"
verz_back=$(dirname "$verz_stg_back")
dat=$(basename "$verz_stg_back")
## Es muss geguckt werden wie der NAME der VTS Datei ist
fi
cat "${verz_back}"/VTS_0*_{1,2,3,4,5,6,7,8}.VOB > "${verz_back}/VTS_${back_var}_${nr_season}${nr_disc}${back_var}.VOB"
cp -r "$verz_back"/VTS_${back_var}_${nr_season}${nr_disc}${back_var}.VOB "$verz_back/VTS_05_1.VOB"
done
done
eject
echo "...Kopieren auf Festplatte erfolgreich!"
nr_disc=1
sleep 8
verzeichnis
}
read -p "(S)erien-DVD -> DVD-(V)erzeichnis -> DVD-(D)irekt oder (E)inzel-DVD: " ausw_var
if [ $ausw_var == 'd' ]
# DVD-(D)irekt mit dvdb*
then
tmp_var=d
# serie_var=Serien/${serien_title}/
# title_nr_var=1
#
# tmp_title_var=-t
# tmp_title_var=-T
start_var=1
end_var=1
backup
elif [ $ausw_var == 'v' ]
# DVD-(V)erzeichnis nach dvdb*
then
tmp_var=v
tmp_nr_folge=1
start_var=1
end_var=1
verzeichnis
elif [ $ausw_var == 's' ]
# (S)erien-DVD
then
tmp_title_var="-t $back_var"
serie_var=Serien/${serien_title}/
title_nr_var=1
seriendvd
elif [ $ausw_var == 'e' ]
# (E)inzel-DVD
then
einzeldvd
else
echo "Fail"
fi
Display More