Extraire les sous-titres des fichiers mkv

33

Le problème, c’est que les sous-titres européens centraux ont un problème avec les lecteurs vidéo d’Ubuntu. 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?

    
posée vladmateinfo 21.04.2014 - 18:58
la source

2 réponses

51

Installez mkvtoolnix avec sudo apt-get install mkvtoolnix .

Exécuter à partir du terminal: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>

Utilisez mkvinfo pour obtenir des informations sur les pistes.

À l'aide de cet utilitaire, vous pouvez extraire n'importe quelle piste, même audio ou vidéo.

    
réponse donnée Cornelius 21.04.2014 - 19:06
la source
7

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 que vous pouvez rechercher la langue de votre choix. Ainsi, si vous voulez l'anglais, par exemple, 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

Enregistrez ce nom de script et vous le rendre exécutable

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

    
réponse donnée nux 21.04.2014 - 19:13
la source

Lire d'autres questions sur les étiquettes