web-dev-qa-db-fra.com

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

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

Certaines recherches en ligne m'ont amené à utiliser des convertisseurs vidéo et à ré-encoder le film dans un nouveau fichier. Cela me semble vraiment exagéré. De plus, je risque de perdre les sous-titres précédents et une certaine qualité d'image en cours de route.

25
nute

Supprimer les sous-titres:

mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers

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

Extraire les 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.

36
Lri

Il existe deux méthodes de base pour afficher les sous-titres. Vous pouvez encoder les pixels dans la vidéo elle-même. Cela s'appelle "hardsubbing". L'avantage ici est la simplicité du lecteur vidéo, il ne s'agit que d'un flux vidéo. Les inconvénients sont que vous avez dû recoder la vidéo, ce qui prend du temps et entraîne une perte de fidélité. Si vous obtenez une meilleure traduction, eh bien, il s'agit de pixels dans la vidéo. Et vous ne pouvez avoir qu'une seule langue.

Ce qui est un peu mieux, c'est le "softsubbing", qui consiste à avoir un fichier texte quelque part, séparé du flux vidéo. Il existe de nombreux formats de fichiers de sous-titres différents, mais à la base, ils ont tous "le texte, démarrer quelle heure, supprimer quelle heure" à leur base. Certains ont des fonctionnalités supplémentaires telles que les couleurs et l'orientation sur l'écran. L'avantage est que vous pouvez utiliser 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, désactivez-les simplement.

Les softsubs peuvent être des fichiers séparés - la plupart des lecteurs rechercheront automatiquement les sous-titres portant le même nom (extension différente) que la vidéo principale. Certains formats de fichiers conteneurs (tels que MKV) peuvent également être intégrés. Vérifiez MKVtoolnix (il existe un port Mac) pour les outils de fichier MKV. Cela devrait vous permettre d'intégrer des softsubs sans reencodage.

Notez que tous les joueurs ne peuvent pas supporter 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 conviennent. VLC jouera n'importe quoi, s'il est supporté sur votre plate-forme.

4
Rich Homolka

Je réalise que c’est une vieille question et que la réponse de user495470 a été acceptée à partir de 2013, mais une partie de la question concerne l’ajout de sous-titres aux fichiers, Je voulais ajouter cette nouvelle addition.

Fondamentalement, je devais fusionner des dizaines de sous-titres .ass dans des fichiers MKV portant le même nom. Par conséquent, exécuter cette commande à la fois ne le supprimait pas. J'ai donc créé ce simple script Bash qui va chercher dans le répertoire courant depuis lequel il est exécuté des fichiers .ass, puis les fusionner 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 tant que tels, mais cela peut être ajusté manuellement en fonction des besoins; le gros problème de la fusion automatique des sous-titres avec le MKV est résolu par un script simple comme celui-ci.

0
JakeGould