... und hier die letzte Version, läuft jetzt auch auf Ubuntu ( ... -l dev/dvd )
Code
TitNum=1
KapVon=0
KapBis=0
SecVon=-1
SecBis=0
AudNum=0
ErgVlc='wav'
BitRat=256
TrnKap=0
TstMod=0
PreFix=""
DvdSim="D:"
UseAac=0
AddOpt=""
################################################################################
usage()
{
cat <<EOF
Gebrauch:
$0 [-t <Titel>] [-v <von>] [-b <bis>] [-V <von>] [-B <bis>] [-a <Audiospur>] [-m <Modus>] [-r <kbits/s>] [-p <prefix>] [-s] [-c] [-l <Laufwerk>] [-T]
t: Titelnummer, default ist ${TitNum}
v: Anfangskapitel, default ist ${KapBeg}
b: Endkapitel, default ist ${KapEnd}
V: Anfang in Sekunden (positioniert nicht zuverlässig)
B: Ende in Sekunden (positioniert nicht zuverlässig)
a: Audiospur, default ist ${AudNum}
m: code der Extraktion, default ist "${ErgVlc}"
pcm: [DVD] -> pcm -> wav -> mp3 (vbr)
wav: [DVD] -> wav -> mp3 (vbr)
ac3: [DVD] -> ac3 -> ac3/m4a (cbr)
dts: [DVD] -> dts -> ac3/m44 (cbr)
r : bitrate für ac3 in kbit/s, default ist ${BitRat}
l : Laufwerk, default ist "${DvdSim}"
p : prefix vor die generierten Dateinamen
s : trenne Kapitel in einzelne Dateien
c : verwende aac/m4a anstelle von mp3
T : Testmodus
EOF
}
################################################################################
while getopts "t:m:v:b:V:B:a:r:sThp:l:c" OptNam
do
case "${OptNam}" in
t) TitNum=${OPTARG};;
v) KapVon=${OPTARG};;
b) KapBis=${OPTARG};;
V) SecVon=${OPTARG};;
B) SecBis=${OPTARG};;
a) AudNum=${OPTARG};;
m) ErgVlc=${OPTARG};;
r) BitRat=${OPTARG};;
p) PreFix=${OPTARG};;
l) DvdSim=${OPTARG};;
s) TrnKap=1;;
c) UseAac=1;;
T) TstMod=1;;
*) usage;
exit 1;;
esac
done
#################################################################################
case "${ErgVlc}" in
pcm)
TraVlc='#transcode{acodec=s16l}:std{access=file,mux=raw'
;;
wav)
TraVlc='#transcode{acodec=s16l}:std{access=file,mux=wav'
;;
ac3)
TraVlc='#std{access=file,mux=raw'
;;
dts)
TraVlc='#std{access=file,mux=raw'
;;
*)
printf "\n\"%s\" is not a valid work mode\n\n" "${ErgVlc}"
usage
exit 1;;
esac
################################################################################
TstKom=""
if (( TstMod > 0 ))
then
TstKom="echo"
fi
# Sekundengrenzen müssen beide angegeben werden
SecIst=0
(( SecVon > 0 && SecBis > SecVon )) && (( SecIst = 1 ))
(( SecIst > 0 )) && AddOpt="${AddOpt} --start-time=${SecVon} --stop-time=${SecBis}"
# Grenzen werden mit führenden Nullen versehen
SecVon=$( printf "%04d" "${SecVon}" )
SecBis=$( printf "%04d" "${SecBis}" )
# Angabe nur einer Kapitelgrenze bedeutet nur dieses eine Kapitel
(( KapBis > 0 && KapVon == 0 )) && (( KapVon = KapBis ))
(( KapVon > 0 && KapBis == 0 )) && (( KapBis = KapVon ))
(( KapVonRun = KapVon ))
(( KapBisRun = KapBis ))
(( TrnKap > 0 )) && (( KapBisRun = KapVonRun ))
# wo steckt vlc ?
WheVlc=$(which vlc 2>/dev/null) || WheVlc='/cygdrive/c/Program Files (x86)/VideoLAN/VLC/vlc.exe'
# Schleife über die Kapitel
while (( KapBisRun <= KapBis ))
do
KapVonRunFil=$( printf "%02d" "${KapVonRun}" )
KapBisRunFil=$( printf "%02d" "${KapBisRun}" )
# bestimme den Dateinamen
FilNam="${PreFix}${ErgVlc}_spr_${AudNum}_tit_${TitNum}"
(( KapBisRun > 0 )) && FilNam="${FilNam}_kap_${KapVonRunFil}"
(( KapVonRun < KapBisRun )) && FilNam="${FilNam}-${KapBisRunFil}"
(( SecIst > 0 )) && FilNam="${FilNam}_sec_${SecVon}-${SecBis}"
# bestimme die DVD-Positions-Angabe
DvdSim="dvdsimple:///${DvdSim}#${TitNum}"
(( KapBisRun > 0 )) && DvdSim="${DvdSim}:${KapVonRun}-${TitNum}:${KapBisRun}"
printf "\n\"%s\" \"%s\"\n\n" "${FilNam}" "${DvdSim}"
(( TstMod == 0 )) && set -x
${TstKom} "${WheVlc}" -I dummy --no-sout-video --sout-audio "--audio-track=${AudNum}" --no-sout-rtp-sap --no-sout-standard-sap --no-sout-all --ttl=1 --sout-keep --sout "${TraVlc},dst=${FilNam}.${ErgVlc}}" "${DvdSim}" ${AddOpt} vlc://quit
echo
case "${ErgVlc}" in
pcm)
${TstKom} ffmpeg -hide_banner -f s16le -ar 48000 -ac 2 -i "${FilNam}.pcm" -ar 48000 -ac 2 "${FilNam}.wav"
if (( UseAac == 0 ))
then
${TstKom} lame --silent -b 32 -V 0 "${FilNam}.wav" "${FilNam}.mp3"
else
${TstKom} ffmpeg -hide_banner -i "${FilNam}.wav" -ac 2 -acodec aac -q:a 2 "${FilNam}.m4a"
fi
;;
wav)
if (( UseAac == 0 ))
then
${TstKom} lame --silent -b 32 -V 0 "${FilNam}.wav" "${FilNam}.mp3"
else
${TstKom} ffmpeg -hide_banner -i "${FilNam}.wav" -ac 2 -acodec aac -q:a 2 "${FilNam}.m4a"
fi
;;
ac3)
${TstKom} ffmpeg -hide_banner -i "${FilNam}.ac3" -ac 2 -acodec ac3 -b:a "${BitRat}k" "${FilNam}.m4a"
;;
dts)
${TstKom} ffmpeg -hide_banner -i "${FilNam}.dts" -ac 2 -acodec ac3 -b:a "${BitRat}k" "${FilNam}.m4a"
;;
esac
(( TstMod == 0 )) && set +x
echo
${TstKom} ls -l ${FilNam}.*
(( TrnKap == 0 )) && break
(( KapVonRun += 1 ))
(( KapBisRun += 1 ))
done
Alles anzeigen