PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Créer un fichier MKV contenant une vidéo et des sous-titres

dimanche 27 octobre 2013 à 18:39
Tiger-222, le 27/10/2013 à 16:40
Un ptit script fait maison pour les séries ou films à sous-titrer.
Il faut installer les paquets mkvmerge et recode (je ne sais plus si ça fait partie du système de base).

Dans un dossier, lancez mkv() (faites un alias, plus pratique), il créera des MKV s'il y a des AVI/MP4 avec des fichiers SRT.
(Permalink)

detout, le 27/10/2013 à 18:39
a check

#!/bin/sh
#
# Créer un fichier MKV contenant une vidéo et des sous-titres.
# S'il y a seulement un .srt, on le prend, sinon on prend en.srt, fr.srt., ...
# Tiger-222, le 29 janvier 2013 (MàJ : 23 août 2013).
#

# Réencodage des sous-titres si nécessaire
reencoder() {
   [ "$(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"
}
# Créer le fichier MKV
mkv() {
   nom=$(echo "$1" | sed "s/.$2$//")
   soustitres=""
   if test -f "$nom.srt"; then
       reencoder "$nom.srt"
       soustitres="--language 0:fre -s 0 -D -A \"$nom.srt\""
   else
       if test -f "$nom.fr.srt"; then
           reencoder "$nom.fr.srt"
           soustitres="$soustitres --language 0:fre --default-track 0:yes -s 0 -D -A \"$nom.fr.srt\""
       fi
       if test -f "$nom.en.srt"; then
           reencoder "$nom.en.srt"
           soustitres="$soustitres --language 0:eng -s 0 -D -A \"$nom.en.srt\""
       fi
       if test -f "$nom.es.srt"; then
           reencoder "$nom.es.srt"
           soustitres="$soustitres --language 0:spa -s 0 -D -A \"$nom.es.srt\""
       fi
   fi
   echo mkvmerge -q -o \"$nom.mkv\" \"$nom.$2\" $soustitres >>a-faire.sh
}

echo "#!/bin/sh" >a-faire.sh
for fichier in *.avi; do
   [ -f "$fichier" ] && mkv "$fichier" avi
done
for fichier in *.mp4; do
   [ -f "$fichier" ] && mkv "$fichier" mp4
done
sh a-faire.sh
rm a-faire.sh
exit 0
(Permalink)