Well, I recently started backing up my not-copyrighted DVDs to hard drive; however the language is sometimes mixed up. In some English is the first, in others it’s German. So, I’ve come up with this little script which fixes it - and puts each file into order.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| #!/bin/bash
[ -x /usr/bin/bc ] || exit 1
[ -x /usr/bin/mkvmerge ] || exit 1
[ -x /usr/bin/mediainfo ] || exit 1
for file in $1/*.mkv; do
# First, run mediainfo on the file.
TRACK_ORDER="$( mediainfo '--Output=Audio;%ID/String% %Language%x' $file |
grep -v '^$' )"
TRACK1_ID="$( echo $TRACK_ORDER | cut -dx -f1 | cut -d -f1 )"
TRACK1_LANG="$( echo $TRACK_ORDER | cut -dx -f1 | cut -d -f2 )"
TRACK2_ID="$( echo $TRACK_ORDER | cut -dx -f2 | cut -d -f1 )"
TRACK2_LANG="$( echo $TRACK_ORDER | cut -dx -f2 | cut -d -f2 )"
case $TRACK1_LANG in
"de") NEEDS_FIX=1 ;;
*) NEEDS_FIX=0 ;;
esac
if [ $NEEDS_FIX -eq 1 ] ; then
OPTS_1="--language $TRACK1_ID:ger --track-name $TRACK1_ID:German"
OPTS_2="--default-track $TRACK1_ID:no --forced-track $TRACK1_ID:no"
OPTS_3="--language $TRACK2_ID:eng --track-name $TRACK2_ID:English"
OPTS_4="--default-track $TRACK2_ID:yes --forced-track $TRACK2_ID:no"
OPTS_5="--track-order 0:1,0:$TRACK2_ID,0:$TRACK1_ID"
OPTS="$OPTS_1 $OPTS_2 $OPTS_3 $OPTS_4 $OPTS_5"
else
OPTS_1="--language $TRACK2_ID:ger --track-name $TRACK2_ID:German"
OPTS_2="--default-track $TRACK2_ID:no --forced-track $TRACK2_ID:no"
OPTS_3="--language $TRACK1_ID:eng --track-name $TRACK1_ID:English"
OPTS_4="--default-track $TRACK1_ID:yes --forced-track $TRACK1_ID:no"
OPTS="$OPTS_1 $OPTS_2 $OPTS_3 $OPTS_4"
fi
mkvmerge -o $file.new --language "1:eng" --default-track "1:yes"
--forced-track "1:no" --audio-tracks "$TRACK1_ID,$TRACK2_ID"
--video-tracks "1" --no-subtitles --no-track-tags
--no-global-tags $OPTS $file
done
|