web-dev-qa-db-fra.com

Extraire les sous-titres des fichiers mkv

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?

38
vladmateinfo

Installez mkvtoolnix avec Sudo apt-get install mkvtoolnix.

Exécuter depuis le terminal: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>

Utilisez mkvinfo pour obtenir des informations sur les pistes.

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

57
Cornelius

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

Sauvegarder ce script nameyouwant.sh et le rendre exécutable

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

8
nux