Extraire les sous-titres des fichiers mkv


39

Le problème est que les vidéastes de Ubuntu ont un problème avec les sous-titres intégrés en Europe centrale. La solution consiste à les extraire. Est-ce que quelqu'un sait s'il y a une commande dans le terminal ou un programme pour extraire le sous-titre d'un fichier mkv?

Réponses:


58

Installer mkvtoolnixavec sudo apt-get install mkvtoolnix.

Courez depuis le terminal: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>

Utilisez mkvinfopour obtenir des informations sur les pistes.

En utilisant cet utilitaire, vous pouvez extraire n’importe quelle piste, même audio ou vidéo.


9
ne pas utiliser mkvinfocomme il est dit des choses comme "Numéro de piste: 2 (ID de piste pour mkvmerge & mkvextract: 1)" qui sont déroutants. utilisermkvmerge -i <filename>
— CGBC

Notez également que, comme spécifié dans la documentation , mkvextract détermine le format de sortie du fichier par type de piste, et non par l'extension donnée (vérifiez donc le type indiqué par mkvmerge -i <filename>).
— cartographe

les données (octets) des sous-titres sont-elles placées dans tous les conteneurs de fichiers? parce que plus le fichier vidéo est volumineux, plus cela fonctionne lentement ... (500 Mo, 1 Go, 4 Go fichier .mkv) Je pensais que cela fonctionnerait beaucoup plus vite et je pensais que les octets des sous-titres sont placés dans une partie spécifique du fichier conteneur vidéo, mais il semble que ffmpeg ou mkvextract lisent tous les fichiers et extraire les sous-titres seulement après avoir lu tous les fichiers (c'est très lent)
— user25

3
@gcb et comment est-il déroutant de savoir si, en anglais, l' identifiant de piste pour mkvmerge & mkvextract ? c'est facile, utilisez simplement cet identifiant de piste pour mkvextract ou mkvmerge. La longueur du tableau et l'index des éléments dans la programmation sont également déroutants pour vous?
— utilisateur25

Pourquoi exportez-vous tous les sous-titres en tant que "SRT"? Nous ne savons pas s’il s’agit de sous-titres graphiques et nous ne connaissons pas le format (SUP, SUB, etc.).
— mgutt

8

vous pouvez utiliser mkvtoolnix.

sudo apt-get install mkvtoolnix

Un autre conseil maintenant, car les fichiers mkv peuvent contenir de nombreux sous-titres. Ce script indique donc que vous pouvez rechercher la langue de votre choix. Ainsi, si vous souhaitez utiliser l'anglais, il ne téléchargera que l'anglais.

Script:

#!/bin/bash
# Extract subtitles from each MKV file in the given directory

# If no directory is given, work in local dir
if [ "$1" = "" ]; then
  DIR="."
else
  DIR="$1"
fi

# Get all the MKV files in this dir and its subdirs
find "$DIR" -type f -name '*.mkv' | while read filename
do
  # Find out which tracks contain the subtitles
  mkvmerge -i "$filename" | grep 'subtitles' | while read subline
  do
    # Grep the number of the subtitle track
    tracknumber=`echo $subline | egrep -o "[0-9]{1,2}" | head -1`

    # Get base name for subtitle
    subtitlename=${filename%.*}

    # Extract the track to a .tmp file
    `mkvextract tracks "$filename" $tracknumber:"$subtitlename.srt.tmp" > /dev/null 2>&1`
    `chmod g+rw "$subtitlename.srt.tmp"`


    # Do a super-primitive language guess: ENGLISH
    langtest=`egrep -ic ' you | to | the ' "$subtitlename".srt.tmp`
    trimregex=""



    # Check if subtitle passes our language filter (10 or more matches)
    if [ $langtest -ge 10 ]; then
      # Regex to remove credits at the end of subtitles (read my reason why!)
      `sed 's/\r//g' < "$subtitlename.srt.tmp" \
        | sed 's/%/%%/g' \
        | awk '{if (a){printf("\t")};printf $0; a=1; } /^$/{print ""; a=0;}' \
        | grep -iv "$trimregex" \
        | sed 's/\t/\r\n/g' > "$subtitlename.srt"`
      `rm "$subtitlename.srt.tmp"`
      `chmod g+rw "$subtitlename.srt"`
    else
      # Not our desired language: add a number to the filename and keep anyway, just in case
      `mv "$subtitlename.srt.tmp" "$subtitlename.$tracknumber.srt" > /dev/null 2>&1`
    fi
  done
done

Sauvegardez ce script nameyouwant.sh et rendez-le exécutable

Maintenant, dans le répertoire de changement de terminal dans le dossier de script et écrire ./nameyouwant.sh /pathtosave


Chose étrange, cela n’a pas fonctionné pour une vidéo mais en exécutant les commandes données dans la réponse acceptée, cela a fonctionné.
— Hunsu

Merci pour le script chouette. Pouvez-vous ajouter une explication sur la raison pour laquelle vous supprimez les crédits à la fin des sous-titres? Cette partie du script ne fonctionne pas pour moi et donne un fichier srt vide.
— m000

1
Cette réponse semble provenir de computernerdfromhell.com . La raison invoquée pour supprimer les crédits est: "Les sous-titreurs hollandais ont l’habitude d’inscrire leurs crédits ou leurs commentaires dans les dernières lignes des sous-titres. Rien de mal à cela, sauf si cela se produit juste après la dernière ligne prononcée dans le fichier. Le film peut durer encore 5 minutes, je ne veux pas que DaNoodleBrain donne la fin approchante en remerciement de BoogerGuzzler, je les retire donc avec une autre regex simple "
— Dror S.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.