Le script analysera tous les fichiers AVI et MP4 du dossier courant, puis créera un fichier MKV pour chacun contenant la vidéo et les éventuels fichiers SRT (sous-titres).
S'il y a seulement un .srt, on le prend, sinon on prend .en.srt, .fr.srt, ...

#!/bin/sh
#
# Requiert mkvtoolnix.
#

reencode() {
    # Réencodage des sous-titres si nécessaire
    [ "$(file "$1" | grep -o ISO-8859)-prout" = "ISO-8859-prout" ]   && recode l1..u8 "$1"
    [ "$(file "$1" | grep -o Non-ISO)-prout" = "Non-ISO-prout"  ]    && recode l1..u8 "$1"
    [ "$(file "$1" | grep -o 'with BOM')-prout" = "with BOM-prout" ] && tail --bytes=+4 "$1" >"$1.ok" && rm "$1" && mv "$1.ok" "$1"
}

mkv() {
    # Créer le fichier MKV
    name=$(echo "$1" | sed "s/.$2$//")
    subs=""
    if test -f "$name.srt"; then
        reencode "$name.srt"
        subs="--language 0:fre -s 0 -D -A \"$name.srt\""
    else
        if test -f "$name.fr.srt"; then
            reencode "$name.fr.srt"
            subs="$subs --language 0:fre --default-track 0:yes -s 0 -D -A \"$name.fr.srt\""
        fi
        if test -f "$name.en.srt"; then
            reencode "$name.en.srt"
            subs="$subs --language 0:eng -s 0 -D -A \"$name.en.srt\""
        fi
        if test -f "$name.es.srt"; then
            reencode "$name.es.srt"
            subs="$subs --language 0:spa -s 0 -D -A \"$name.es.srt\""
        fi
    fi
    echo mkvmerge -q -o \"$name.mkv\" \"$name.$2\" $subs >>todo.sh
}

echo "#!/bin/sh" >todo.sh
for movie in *.avi; do
    [ -f "$movie" ] && mkv "$movie" avi
done
for movie in *.mp4; do
    [ -f "$movie" ] && mkv "$movie" mp4
done

sh todo.sh && rm todo.sh