Retour au blog

Comment ajouter des sous-titres à un MKV ou un MP4 sans réencodage

Ajoutez des sous-titres à un MKV ou MP4 sans réencodage : MKVToolNix, FFmpeg, plusieurs langues, indicateurs par défaut et forcé, et pourquoi une piste manque.

3 octobre 2026
Sablate Team

Pour ajouter des sous-titres à un MKV sans réencoder, vous les multiplexez comme une piste séparée : MKVToolNix le fait depuis une interface graphique, FFmpeg en une seule commande, et les deux copient la vidéo telle quelle, en un temps comparable à celui d’une simple copie du fichier. Le MP4 peut lui aussi porter des pistes de sous-titres, mais seulement en texte brut.

La suite couvre les deux outils pas à pas, plusieurs langues dans un seul fichier avec les bonnes balises de langue, ce que les indicateurs par défaut et forcé changent pour le spectateur, et les raisons habituelles pour lesquelles une piste multiplexée ne s’affiche jamais.

Pourquoi ajouter des sous-titres à un MKV ne demande aucun réencodage

Un fichier vidéo est un conteneur qui renferme des flux distincts, et ajouter des sous-titres revient simplement à ajouter un flux de plus. L’image et le son ont été compressés une seule fois, à la création de la vidéo. Le multiplexage — « muxing » dans le jargon — intercale un flux supplémentaire dans le conteneur sans rien décoder de ce qui s’y trouve déjà : le fichier obtenu contient donc la même vidéo, bit pour bit, avec une piste de sous-titres à côté.

L’incrustation des sous-titres est l’opération inverse. Le texte doit être dessiné dans chaque image : chaque image est donc décodée, peinte puis compressée à nouveau. Cela coûte du temps et un peu de qualité, et c’est pourtant le bon choix quand une plateforme ignore les pistes de sous-titres ; le guide de l’incrustation détaille cette voie. Si vous n’avez pas encore tranché entre les deux, hardsub vs softsub est la version courte de cette décision.

Matroska (.mkv) a été conçu pour la voie softsub. Il peut contenir autant de pistes vidéo, audio et de sous-titres que l’on veut, ainsi que des pièces jointes comme des polices, et chaque piste porte ses propres métadonnées :

  • Langue — un code comme eng ou spa, que les lecteurs utilisent pour nommer les pistes et en choisir une automatiquement.
  • Nom — un texte libre affiché dans le menu du lecteur, par exemple « English » ou « English (SDH) ».
  • Indicateur par défaut (default flag) — la piste qu’un lecteur active quand le spectateur n’en a choisi aucune.
  • Indicateur forcé (forced flag) — une piste affichée même quand le spectateur a désactivé les sous-titres, prévue pour les répliques en langue étrangère.

Bien régler ces quatre éléments, c’est l’essentiel du travail. Le multiplexage lui-même est la partie facile.

Peut-on ajouter une piste de sous-titres à un MP4 ?

Oui, mais le MP4 ne transporte les sous-titres qu’au format mov_text, un format de texte minuté brut. FFmpeg y convertit un SRT à l’entrée, et les polices, les couleurs et le positionnement ne survivent pas. Le choix du conteneur devient donc une vraie décision, pas une simple préférence :

MKVMP4
Formats de sous-titres pris en chargeSRT, ASS, PGS et d’autresmov_text uniquement
Style (polices, couleurs, position)Conservé dans les pistes ASSPerdu
Fichiers de police attachés à la vidéoOuiNon
Plusieurs langues dans un seul fichierOuiOui, en texte brut
S’ouvre dans les lecteurs intégrés d’ApplePas de façon fiableOui
S’ouvre dans VLC et mpvOuiOui
Réencodage nécessaire pour ajouter une pisteNonNon

La ligne qui tranche le plus souvent, c’est Apple. QuickTime n’ouvre pas du tout le MKV et les applications natives de l’iPhone le gèrent de façon peu fiable, alors que les deux affichent bien les pistes mov_text : un fichier destiné aux appareils Apple doit donc être un MP4, même si ses sous-titres seront en texte brut. VLC, mpv, Plex et Kodi lisent le MKV en conservant le style et les polices attachées. Les navigateurs forment le troisième cas : leurs lecteurs vidéo ignorent en général les pistes de sous-titres intégrées et attendent un fichier WebVTT séparé, ce qui explique pourquoi la comparaison des formats présente le VTT comme le format du web.

Les trois façons d’ajouter des pistes de sous-titres

  1. MKVToolNix — gratuit, avec une interface graphique, pour Windows, macOS et Linux. Le meilleur outil quand les fichiers de sous-titres existent déjà.
  2. FFmpeg — gratuit, une seule commande, et le seul des trois qui écrit du MP4. Le meilleur outil pour les scripts et les traitements par lots.
  3. Sablate — pour le cas où les sous-titres n’existent pas encore : transcrire, traduire en couches, et exporter un seul MKV avec une piste par langue.

Subtitle Edit sait aussi faire le multiplexage, depuis Video → Add/remove embedded subtitles, et utilise FFmpeg en arrière-plan pour cela.

Méthode 1 : ajouter des sous-titres à un MKV avec MKVToolNix

MKVToolNix est la boîte à outils de référence pour les fichiers Matroska, et son interface graphique ramène tout le travail à quatre étapes :

  1. Installez-le depuis mkvtoolnix.download. La version 102.0 est sortie le 14 septembre 2026 ; la version macOS nécessite macOS 13 Ventura ou une version plus récente.
  2. Ouvrez MKVToolNix GUI, restez sur l’onglet Multiplexer, puis faites glisser la vidéo et chaque fichier de sous-titres dans la zone Source files. Chaque fichier de sous-titres apparaît comme une piste à part.
  3. Cliquez sur chaque piste de sous-titres et renseignez ses champs Language et Track name. Activez l’indicateur Default track sur la seule piste qui doit s’afficher en premier et désactivez-le sur les autres. Laissez l’indicateur Forced display désactivé, sauf si la piste ne couvre que des répliques en langue étrangère.
  4. Indiquez le nom du fichier de destination en bas, puis cliquez sur Start multiplexing.

Rien n’est encodé : même un film de deux heures se termine à peu près dans le temps qu’il faut pour copier le fichier. Voici le même travail en ligne de commande, qui est la forme à utiliser pour un traitement par lots :

mkvmerge -o film.subtitled.mkv film.mp4 \
  --language 0:eng --track-name 0:English --default-track-flag 0:yes en.srt \
  --language 0:spa --track-name 0:Spanish --default-track-flag 0:no es.srt

Les options s’appliquent au fichier qui les suit, et 0 est l’ID de piste à l’intérieur de chaque SRT, qui ne contient jamais qu’une seule piste. Si les accents sortent en symboles illisibles, c’est que le SRT n’est pas en UTF-8 : placez --sub-charset 0:windows-1252 (ou l’encodage réel du fichier) devant ce fichier, ou réenregistrez-le d’abord en UTF-8.

Pour changer les indicateurs plus tard sans remultiplexer, mkvpropedit édite le fichier existant sur place :

mkvpropedit film.subtitled.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

track:s1 désigne la première piste de sous-titres. Comme la commande modifie l’en-tête du fichier au lieu d’écrire un nouveau fichier, elle est quasi instantanée, même sur un film volumineux.

Méthode 2 : ajouter des pistes de sous-titres avec FFmpeg (MKV et MP4)

FFmpeg fait le même multiplexage avec une seule commande, et c’est l’outil à utiliser quand la sortie doit être un MP4. Pour un MKV avec des pistes en anglais et en espagnol :

ffmpeg -i film.mp4 -i en.srt -i es.srt \
  -map 0:v -map 0:a -map 1 -map 2 -c copy \
  -metadata:s:s:0 language=eng -metadata:s:s:0 title=English \
  -metadata:s:s:1 language=spa -metadata:s:s:1 title=Spanish \
  -disposition:s:0 default -disposition:s:1 0 \
  film.subtitled.mkv

Lisez la commande de gauche à droite : trois entrées ; -map prend la vidéo et l’audio du film, puis chaque fichier de sous-titres dans l’ordre ; -c copy copie chaque flux au lieu de l’encoder ; -metadata:s:s:0 renseigne la première piste de sous-titres de la sortie ; et les deux options -disposition marquent l’anglais par défaut et retirent l’indicateur sur l’espagnol.

La liste -map explicite est importante. Un simple -map 0 reprendrait aussi toute piste de sous-titres que la source contient déjà, et la piste mov_text d’un MP4 ne peut pas être copiée dans un MKV : la commande s’arrête alors sur une erreur avant d’avoir écrit quoi que ce soit.

Pour un MP4, convertissez les sous-titres en mov_text et copiez tout le reste :

ffmpeg -i film.mp4 -i en.srt -i es.srt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -c:v copy -c:a copy -c:s mov_text \
  -metadata:s:s:0 language=eng -metadata:s:s:1 language=spa \
  film.subtitled.mp4

La vidéo et l’audio restent intacts ; seul le texte des sous-titres est réécrit au format du MP4. Si votre entrée est un fichier .ass stylé, c’est à cette étape que le style disparaît.

Les sous-titres ASS stylés ont leur place dans un MKV, avec la police attachée pour que le lecteur les dessine dans la police que vous avez choisie plutôt que dans une police de substitution :

ffmpeg -i film.mp4 -i en.ass \
  -map 0:v -map 0:a -map 1 -c copy \
  -attach Montserrat-ExtraBold.ttf -metadata:s:t:0 mimetype=application/x-truetype-font \
  -metadata:s:s:0 language=eng \
  film.subtitled.mkv

La documentation de FFmpeg est explicite : les pièces jointes Matroska ont besoin de cette métadonnée mimetype. mpv et VLC chargent les polices attachées quand ils rendent des sous-titres ASS, si bien que le style voyage avec le fichier. Quelle police attacher est une question à part — le guide des polices de sous-titres explique ce qui se lit bien et quelles polices de sous-titrage répandues ne savent pas dessiner quelles écritures.

Méthode 3 : créer les sous-titres et le MKV d’une seule traite

MKVToolNix et FFmpeg partent du principe que les fichiers de sous-titres existent déjà. Souvent, ce n’est pas le cas : vous avez un enregistrement, il vous faut l’anglais plus trois traductions, et le multiplexage ne représente que les dernières secondes d’un travail bien plus long. C’est le cas pour lequel Sablate est conçu, et tout le parcours reste dans une seule application :

  1. Transcrivez la vidéo sur votre propre machine avec Whisper.
  2. Corrigez la transcription dans l’éditeur.
  3. Ajoutez chaque langue comme couche de traduction sur les mêmes minutages.
  4. Exportez Video with switchable subtitles (.mkv).

Ce qui arrive dans le fichier, c’est ce que la méthode 2 construit à la main. La vidéo et l’audio sont copiés en flux, donc l’export prend à peu près le temps de copier le fichier. Chaque couche de langue devient sa propre piste ASS dans votre style de sous-titres, avec la police remplacée par une police capable de dessiner l’écriture de cette langue. Chaque piste reçoit une balise de langue et un nom lisible, la première piste est marquée par défaut, et quand le style utilise l’une des polices de sous-titrage fournies avec Sablate, ce fichier de police est attaché pour que le style survive sur une autre machine.

Trois limites, énoncées sans détour. L’export MKV fait partie de Pro, un paiement unique de $29 indiqué sur la page des tarifs. Sablate n’écrit aucune piste de sous-titres MP4, parce que mov_text ferait disparaître le style — exportez les fichiers .srt et lancez la commande FFmpeg pour MP4 ci-dessus si vous avez besoin d’une telle piste. Et l’export remplace les pistes de sous-titres que le fichier source contenait déjà au lieu de les conserver ; si elles comptent pour vous, rajoutez-les avec MKVToolNix.

Pour la partie transcription et traduction de ce travail, le flux de travail multilingue le détaille pas à pas.

Quelle méthode choisir ?

Choisissez selon ce que vous avez déjà — des fichiers de sous-titres, seulement la vidéo, ou la contrainte d’un appareil Apple :

MKVToolNixFFmpegSablate
PrixGratuitGratuit$29 en une fois (Pro)
PlateformesWindows, Mac et LinuxWindows, Mac et LinuxWindows et Mac
InterfaceInterface graphique et ligne de commandeLigne de commandeInterface graphique
Multiplexe les fichiers de sous-titres que vous avez déjàOuiOuiPartiel, via l’import dans une tâche
Crée les sous-titres à partir de la paroleNonNonOui
Écrit un MP4 avec des pistes de sous-titresNonOuiNon
Balises de langue et indicateur par défautOuiOuiOui, réglés automatiquement
Indicateur forcéOuiOuiNon
Attache des policesOuiOuiOui, polices de sous-titrage fournies
Modifie les indicateurs sans remultiplexerOui, avec mkvpropeditNonNon

« J’ai déjà les fichiers de sous-titres. » MKVToolNix. Il est gratuit, il montre chaque piste et chaque indicateur avant d’écrire quoi que ce soit, et le travail prend deux minutes.

« J’ai une saison d’épisodes à traiter. » mkvmerge ou FFmpeg dans une boucle. Les deux commandes ci-dessus tournent sans surveillance dès que les noms de fichiers suivent un schéma.

« Ça doit se lire sur un iPhone ou dans QuickTime. » Un MP4 via FFmpeg, en acceptant des sous-titres en texte brut.

« Mes sous-titres sont en ASS stylé. » Un MKV avec la police attachée. Le MP4 supprime le style à l’entrée.

« Je n’ai que la vidéo. » Sablate, si vous voulez la transcription, la traduction et le MKV multipiste au même endroit. Subtitle Edit est la voie gratuite si vous acceptez d’assembler les étapes vous-même.

« La vidéo part sur YouTube. » Aucun des deux conteneurs. Des plateformes comme YouTube prennent le .srt ou le .vtt en envoi séparé.

Pourquoi mes sous-titres MKV ne s’affichent-ils pas ?

La piste est presque toujours là ; quelque chose choisit de ne pas l’afficher. Commencez par lister ce que le fichier contient réellement :

ffprobe -v error -select_streams s -show_entries stream=index,codec_name:stream_tags=language,title:stream_disposition=default,forced -of compact=p=0 film.subtitled.mkv

Chaque piste de sous-titres affiche une ligne avec son codec, sa langue, son nom, ainsi que ses indicateurs par défaut et forcé. Si les pistes sont bien listées, parcourez cette liste dans l’ordre :

  1. Aucune piste n’est marquée par défaut. Le lecteur n’a rien à activer de lui-même. Réglez l’indicateur avec mkvpropedit, comme dans la méthode 1.
  2. La préférence du lecteur l’emporte. VLC, Plex et de nombreuses télévisions gardent une langue de sous-titres préférée, ou un réglage « désactivé », qui prend le pas sur les indicateurs du fichier. Vérifiez le lecteur avant le fichier.
  3. Une piste complète est marquée forcée. Les spectateurs qui ont désactivé les sous-titres reçoivent quand même toutes les répliques. L’indicateur forcé est réservé aux pistes partielles.
  4. La piste du MP4 est ignorée. De nombreux lecteurs sautent mov_text en silence. Si le fichier n’a pas besoin d’être un MP4, remultiplexez-le en MKV.
  5. Les accents arrivent en symboles illisibles. Le SRT source a été enregistré dans un ancien encodage. Réenregistrez-le en UTF-8 et refaites le multiplexage, ou indiquez l’encodage avec --sub-charset dans mkvmerge, ou avec -sub_charenc devant l’entrée de sous-titres dans FFmpeg.
  6. Le texte stylé s’affiche dans une police ordinaire. La piste ASS réclame une police que la machine de lecture n’a pas. Attachez le fichier de police, comme dans la dernière commande FFmpeg.

Le multiplexage est la partie la moins coûteuse de la livraison de sous-titres : une minute dans MKVToolNix, une ligne dans FFmpeg, rien de réencodé. La partie coûteuse, c’est d’avoir de bons fichiers de sous-titres dans chaque langue au départ. Si vous les avez déjà, les outils gratuits ci-dessus suffisent. Si vous n’avez que l’enregistrement, téléchargez Sablate pour Windows ou Mac, transcrivez-le et traduisez-le, et laissez l’export écrire les pistes, les balises et les indicateurs à votre place.