40 votes

Comment ajouter et supprimer des sous-titres dans un fichier MKV?

J'ai un fichier MKV de bonne qualité qui propose plusieurs options de sous-titres. Je veux ajouter un fichier de sous-titres supplémentaire à la liste. J'utilise OSX.

Après quelques recherches en ligne, j'ai découvert que je devais utiliser des convertisseurs vidéo pour réencoder le film dans un nouveau fichier. Cela me semble vraiment excessif. De plus, je risque de perdre les sous-titres précédents et une partie de la qualité d'image en cours de route.

61voto

Dave Points 986

Suppression des sous-titres :

mkvmerge -o output.mkv input.mkv -S # supprimer toutes les pistes de sous-titres, notez la majuscule S
mkvmerge -o output.mkv input.mkv -s 3,4 # inclure uniquement les pistes de sous-titres 3 et 4
mkvmerge -o output.mkv input.mkv -s '!3' # inclure toutes les pistes de sous-titres sauf la 3
mkvmerge -i input.mkv # afficher les numéros de piste

Ajout de sous-titres :

mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt

Extraction de sous-titres :

mkvextract tracks input.mkv 3:subs.srt

for f in *.mkv; do
  sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
  [[ $sub ]] || continue
  [[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
  track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
  mkvextract tracks "$f" "$track:${f%mkv}$ext"
done

mkvmerge et mkvextract peuvent être installés avec brew install mkvtoolnix.

4voto

Lark Points 1640

Il existe deux façons de base d'afficher des sous-titres. Vous pouvez encoder les pixels directement dans la vidéo elle-même. Cela s'appelle "hardsubbing". L'avantage ici est la simplicité pour le lecteur vidéo, c'est juste un flux vidéo. Les inconvénients sont que vous devez réencoder la vidéo, ce qui prend du temps, et il y a une perte de fidélité. Si vous obtenez une meilleure traduction, eh bien, ce sont des pixels dans la vidéo. Et vous ne pouvez avoir qu'une seule langue.

Ce qui est un peu mieux est le "softsubbing", qui consiste à avoir un fichier texte quelque part, séparé du flux vidéo. Il existe de nombreux formats différents de fichiers de sous-titres, mais à leur base, ils ont tous "texte, début à quelle heure, fin à quelle heure" au cœur. Certains ont des fonctionnalités supplémentaires comme des couleurs et une orientation à l'écran. L'avantage de cela est que vous pouvez avoir plusieurs langues (pensez à un DVD, vous avez plusieurs langues disponibles) et vous pouvez corriger les fautes de frappe et autres dans le fichier. Et si vous n'avez pas besoin de sous-titres, eh bien, il vous suffit de les désactiver.

Les softsubs peuvent être soit des fichiers séparés - la plupart des lecteurs rechercheront automatiquement des sous-titres ayant le même nom (avec une extension différente) que la vidéo principale. Ou certains formats de fichier conteneur (comme le MKV) peuvent les intégrer à l'intérieur. Consultez MKVtoolnix (il existe un port pour Mac) pour les outils de fichier MKV. Cela devrait vous permettre d'intégrer des sous-titres sans réencoder.

Remarquez que tous les lecteurs ne peuvent pas prendre en charge tous les formats. D'après mon expérience, XBMC a des problèmes avec les fichiers SSA, mais les fichiers SRT beaucoup plus simples fonctionnent bien. VLC lira tout, s'il est pris en charge sur votre plateforme.

2voto

Giacomo1968 Points 48326

Je réalise que c’est une vieille question et la réponse de user495470 a été acceptée en 2013, mais étant donné que la question porte en partie sur l’ajout de sous-titres aux fichiers, je voulais ajouter cette nouvelle contribution.

En gros, j’avais besoin de fusionner des douzaines de sous-titres .ass dans des fichiers MKV portant des noms similaires, donc faire cela un par un ne fonctionnait pas. J’ai donc créé ce simple script Bash qui recherchera les fichiers .ass dans le répertoire actuel à partir duquel il est lancé et les fusionnera comme prévu.

find -E . -maxdepth 1 -type f -iregex '.*\.(ASS|SRT)$' |\
  while read FILEPATH
  do
    DIRNAME=$(dirname "${FILEPATH}");
    BASENAME=$(basename "${FILEPATH}");
    FILENAME="${BASENAME%.*}";
    EXTENSION="${BASENAME##*.}"
    mkvmerge -o "/Users/jake/${FILENAME}"-NEW.mkv "${FILENAME}".mp4 --language 0:eng --track-name 0:English "${FILENAME}"."${EXTENSION}"
  done

Bien sûr, ce script simple suppose que les sous-titres sont en anglais et les fusionne en conséquence, mais cela peut être ajusté manuellement en fonction des besoins ; le gros problème de fusion automatique des sous-titres avec le MKV est résolu par un script simple comme celui-ci.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X