R
rabadag
Mitglied
Hallo Linux Freunde.
Ich hab mir ein kleines Skript gebastelt, das mir MKV file die DTS Spur in AC3 umwandelt und automatisch wider zusammen baut.
Das Skript funktioniert auch einwandfrei mit einem MKV File das 1 DTS spur enthält. Sind aber 2 oder mehr DTS Spuren vorhanden, Ignoriert mein Skript die 2,3,4,5 Spur.
kann mir da einer helfen wie man das abändern muss, damit das Skript alle DTS Spuren umwandelt und wider einbindet.
wenn ich mit | grep -m 5 "audio (A_DTS)" | wird nur die erste Spur umgewandelt.
Hier noch die Ausgabe von mkmerge aussehen
Ich hab mir ein kleines Skript gebastelt, das mir MKV file die DTS Spur in AC3 umwandelt und automatisch wider zusammen baut.
Das Skript funktioniert auch einwandfrei mit einem MKV File das 1 DTS spur enthält. Sind aber 2 oder mehr DTS Spuren vorhanden, Ignoriert mein Skript die 2,3,4,5 Spur.
kann mir da einer helfen wie man das abändern muss, damit das Skript alle DTS Spuren umwandelt und wider einbindet.
wenn ich mit | grep -m 5 "audio (A_DTS)" | wird nur die erste Spur umgewandelt.
Code:
#!/bin/bash -x
IFS=$'\t\n'
for i in `find $1 -name '*.mkv'`
do
DIRPATH=`dirname "$i"`
VNAME=`basename $DIRPATH`
FNAME=`basename $i`
MKV=$DIRPATH/$FNAME
if [[ "$FNAME" == *.mkv ]] ; then
TESTMKV=`/usr/bin/mkvinfo $MKV | grep 'Codec ID' | grep DTS`
#echo "V_MPEG4/ISO/AVC, "$MKV", insertSEI, contSPS, track=1, lang=ger" > /Daten1/Filme/meta.meta
#echo "A_DTS, "$MKV", track=2, lang=ger" >> /Daten1/Filme/meta.meta
#echo "A_AC3, "$MKV", track=4, lang=ger" >> /Daten1/Filme/meta.meta
if [[ "$TESTMKV" == *A_DTS ]] ; then
MKVDTS="1"
else
MKVDTS="0"
fi
fi
if [[ "$MKVDTS" == 1 ]] ; then
## Used to time execution
STARTDECODE=$(date +%s)
DEST=$DIRPATH
WD=$DEST
MKVFILE=$DIRPATH/$FNAME
NAME=$(basename "$MKVFILE" .mkv)
## Get the track number for the DTS track 1
DTSTRACK=$(mkvmerge -i "$MKVFILE" | grep -m 1 "audio (A_DTS)" | cut -d: -f1 | cut -d" " -f3)
VIDEOTRACK=$(mkvmerge -i "$MKVFILE" | grep -m 1 "video" | cut -d: -f1 | cut -d" " -f3)
## Setup temporary files
DTSFILE="$WD/$NAME.dts"
AC3FILE="$WD/$NAME.ac3"
DSTFILE="$WD/$NAME.ac3.mkv"
VIDFILE="$WD/$NAME.video.mkv"
## Extract the DTS track
mkvextract tracks "$MKVFILE" $DTSTRACK:"$DTSFILE"
## Extract the Video track
#mkvextract tracks "$MKVFILE" $VIDEOTRACK:"$VIDFILE"
## Convert DTS to AC3
dcadec -o wavall "$DTSFILE" | aften - "$AC3FILE"
## Remux AC3 into original file (retaining DTS)
mkvmerge -o "$DSTFILE" "$MKVFILE" "$AC3FILE"
## Delete our temporary files
#rm -f "$DTSFILE" "$AC3FILE"
## Move the newly created file over the old one
#mv "$DSTFILE" "$MKVFILE"
## Display total execution time
END=$(date +%s)
echo "Total processing time: $(($END - $STARTDECODE)) seconds."
fi
done
Hier noch die Ausgabe von mkmerge aussehen
Code:
mkvmerge -i file.mkv
File 'dfd-despereaux-1080p-sample.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_DTS)
Track ID 3: audio (A_DTS)
Track ID 4: subtitles (S_TEXT/UTF8)