Torna al blog

Come aggiungere sottotitoli a file MKV e MP4 senza ricodificare

Aggiungere sottotitoli a MKV e MP4 senza ricodifica: MKVToolNix e FFmpeg, più lingue in un file, flag predefinito e forzato, e perché le tracce non compaiono.

3 ottobre 2026
Sablate Team

Per aggiungere sottotitoli a un MKV senza ricodificare, fai il mux dei sottotitoli come traccia separata: MKVToolNix lo fa da un'interfaccia grafica, FFmpeg con un solo comando, ed entrambi copiano il video senza toccarlo in più o meno il tempo necessario a copiare il file. Anche l'MP4 può contenere tracce di sottotitoli, ma solo come testo semplice.

Qui sotto trovi i due strumenti passo per passo, più lingue in un solo file con i tag di lingua giusti, che cosa fanno allo spettatore il flag predefinito e quello forzato, e i motivi più comuni per cui una traccia muxata non compare mai.

Perché aggiungere sottotitoli a un MKV non richiede una ricodifica

Un file video è un contenitore che tiene insieme stream separati, e aggiungere i sottotitoli significa solo aggiungere un altro stream. Immagine e audio sono stati compressi una volta sola, quando il video è stato creato. Il muxing — abbreviazione di multiplexing — intercala uno stream aggiuntivo nel contenitore senza decodificare nulla di ciò che c'è già, quindi il risultato è lo stesso video, bit per bit, con una traccia di sottotitoli accanto.

Imprimere i sottotitoli nel video è l'operazione opposta. Il testo va disegnato in ogni fotogramma, quindi ogni fotogramma viene decodificato, ridipinto e compresso di nuovo. Costa tempo e un po' di qualità, ed è comunque la scelta giusta quando una piattaforma ignora le tracce di sottotitoli; la guida all'impressione dei sottotitoli tratta quel percorso. Se non hai ancora deciso quale dei due ti serve, hardsub vs softsub è la versione breve di quella decisione.

Matroska (.mkv) è stato progettato per la via dei sottotitoli soft. Può contenere un numero qualsiasi di tracce video, audio e sottotitoli, più allegati come i font, e ogni traccia porta con sé i propri metadati:

  • Lingua — un codice come eng o spa, che i player usano per etichettare le tracce e sceglierne una in automatico.
  • Nome — testo libero mostrato nel menu del player, come «English» o «English (SDH)».
  • Flag predefinito (default) — la traccia che il player attiva quando lo spettatore non ne ha scelta una.
  • Flag forzato (forced) — una traccia mostrata anche quando lo spettatore ha disattivato i sottotitoli, pensata per i dialoghi in lingua straniera.

Impostare bene queste quattro cose è la maggior parte del lavoro. Il mux in sé è la parte facile.

Si può aggiungere una traccia di sottotitoli a un MP4?

Sì, ma l'MP4 porta i sottotitoli solo come mov_text, un formato di testo temporizzato semplice. FFmpeg converte un SRT in questo formato mentre lo inserisce, e font, colori e posizionamento non sopravvivono. Questo fa della scelta del contenitore una vera decisione e non una questione di preferenza:

MKVMP4
Formati di sottotitoli che contieneSRT, ASS, PGS e altriSolo mov_text
Stile (font, colori, posizione)Mantenuto nelle tracce ASSPerso
File di font allegati al videoSìNo
Più lingue in un solo fileSìSì, come testo semplice
Si apre nei player integrati di AppleNon in modo affidabileSì
Si apre in VLC e mpvSìSì
Ricodifica necessaria per aggiungere una tracciaNoNo

La riga che di solito decide la scelta è quella su Apple. QuickTime non apre affatto l'MKV e le app native dell'iPhone lo gestiscono in modo inaffidabile, mentre entrambi mostrano bene le tracce mov_text, quindi un file destinato ai dispositivi Apple dovrebbe essere un MP4, anche se i suoi sottotitoli saranno semplice testo. VLC, mpv, Plex e Kodi riproducono l'MKV con lo stile e i font allegati intatti. I browser sono il terzo caso: i loro player video in genere ignorano le tracce di sottotitoli incorporate e si aspettano un file WebVTT separato, ed è per questo che il confronto tra i formati tratta il VTT come il formato del web.

I tre modi per aggiungere tracce di sottotitoli

  1. MKVToolNix — gratuito, con interfaccia grafica, per Windows, macOS e Linux. Lo strumento migliore quando i file di sottotitoli esistono già.
  2. FFmpeg — gratuito, un solo comando, e l'unico dei tre che scrive MP4. Lo strumento migliore per script e lavori in batch.
  3. Sablate — per quando i sottotitoli non esistono ancora: trascrivi, traduci per livelli ed esporta un unico MKV con una traccia per lingua.

Anche Subtitle Edit può fare il mux, dal menu Video → Add/remove embedded subtitles, e per farlo usa FFmpeg sotto il cofano.

Metodo 1: aggiungere sottotitoli a un MKV con MKVToolNix

MKVToolNix è il toolkit di riferimento per i file Matroska, e la sua interfaccia grafica riduce tutto il lavoro a quattro passaggi:

  1. Installalo da mkvtoolnix.download. La versione 102.0 è uscita il 14 settembre 2026; la build per macOS richiede macOS 13 Ventura o successivo.
  2. Apri MKVToolNix GUI, resta nella scheda Multiplexer e trascina il video e ogni file di sottotitoli nell'area Source files. Ogni file di sottotitoli compare come traccia a sé.
  3. Clicca su ogni traccia di sottotitoli e compila i campi Language e Track name. Attiva il flag Default track sull'unica traccia che deve partire per prima e disattivalo sulle altre. Lascia Forced display disattivato, a meno che la traccia non copra solo i dialoghi in lingua straniera.
  4. Imposta il nome del file di destinazione in basso e clicca sul pulsante Start multiplexing.

Non viene codificato nulla, quindi anche un film di due ore finisce in più o meno il tempo necessario a copiare il file. Lo stesso lavoro da riga di comando, che è il modo per eseguirlo in batch:

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

Le opzioni valgono per il file che le segue, e 0 è l'ID della traccia dentro ogni SRT, che ne contiene sempre una sola. Se i caratteri accentati escono illeggibili, l'SRT non è in UTF-8: metti --sub-charset 0:windows-1252 (o la codifica reale del file) davanti a quel file, oppure salvalo prima di nuovo in UTF-8.

Per cambiare i flag in un secondo momento senza rifare il mux, mkvpropedit modifica il file esistente sul posto:

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

track:s1 è la prima traccia di sottotitoli. Poiché modifica l'intestazione del file invece di scrivere un file nuovo, è quasi istantaneo anche su un film di grandi dimensioni.

Metodo 2: aggiungere tracce di sottotitoli con FFmpeg (MKV e MP4)

FFmpeg fa lo stesso mux con un solo comando, ed è lo strumento da usare quando l'output deve essere un MP4. Per un MKV con tracce in inglese e in spagnolo:

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

Leggilo da sinistra a destra: tre input; -map prende video e audio dal film, poi ogni file di sottotitoli in ordine; -c copy copia ogni stream invece di codificarlo; -metadata:s:s:0 etichetta il primo stream di sottotitoli dell'output; e le due opzioni -disposition segnano l'inglese come predefinito e tolgono il flag alla traccia spagnola.

L'elenco esplicito di -map è importante. Un semplice -map 0 includerebbe anche qualsiasi traccia di sottotitoli che la sorgente ha già, e una traccia mov_text di un MP4 non può essere copiata in un MKV, quindi il comando si ferma con un errore prima di scrivere alcunché.

Per l'MP4, converti i sottotitoli in mov_text e copia tutto il resto:

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

Video e audio restano intatti; solo il testo dei sottotitoli viene riscritto nel formato dell'MP4. Se il tuo input è un file .ass con stile, è in questo passaggio che lo stile scompare.

I sottotitoli ASS con stile vanno nell'MKV, con il font allegato, così il player li disegna con il font che hai scelto e non con un font di ripiego qualsiasi:

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 documentazione di FFmpeg dice in modo esplicito che gli allegati Matroska richiedono quel tag mimetype. mpv e VLC caricano i font allegati quando renderizzano i sottotitoli ASS, quindi lo stile viaggia con il file. Quale font allegare è una questione a parte: la guida ai font per i sottotitoli spiega quali font si leggono bene e quali font da didascalia molto popolari non riescono a disegnare certi script.

Metodo 3: creare i sottotitoli e l'MKV in un solo passaggio

MKVToolNix e FFmpeg danno per scontato che i file di sottotitoli esistano già. Spesso non è così: hai una registrazione, ti servono l'inglese più tre traduzioni, e il mux occupa solo gli ultimi secondi di un lavoro molto più lungo. È il caso per cui è pensato Sablate, e l'intero percorso resta in un'unica app:

  1. Trascrivi il video sul tuo computer con Whisper.
  2. Correggi la trascrizione nell'editor.
  3. Aggiungi ogni lingua come livello di traduzione sulle stesse tempistiche.
  4. Esporta Video with switchable subtitles (.mkv).

Quello che finisce nel file è ciò che il Metodo 2 costruisce a mano. Video e audio vengono copiati in stream, quindi l'esportazione dura più o meno quanto la copia del file. Ogni livello linguistico diventa una traccia ASS a sé, nel tuo stile di didascalia, con il font sostituito da uno che sa disegnare lo script di quella lingua. Ogni traccia riceve un tag di lingua e un nome leggibile, la prima traccia viene segnata come predefinita e, quando lo stile usa uno dei font da didascalia inclusi in Sablate, quel file di font viene allegato, così lo stile sopravvive su un altro computer.

Tre limiti, detti senza giri di parole. L'esportazione in MKV fa parte di Pro, un unico pagamento di $29 indicato nella pagina dei prezzi. Sablate non scrive tracce di sottotitoli in un MP4, perché mov_text butterebbe via lo stile: esporta i file .srt ed esegui il comando FFmpeg per MP4 qui sopra, se te ne serve uno. E l'esportazione sostituisce le tracce di sottotitoli che il file sorgente aveva già invece di mantenerle, quindi se contano, aggiungile di nuovo con MKVToolNix.

Per la parte di trascrizione e traduzione, il flusso di lavoro multilingue la affronta passo per passo.

Quale metodo dovresti usare?

Scegli in base a ciò che hai già — file di sottotitoli o solo il video — e a dove il file deve essere riprodotto:

MKVToolNixFFmpegSablate
PrezzoGratisGratis$29 una tantum (Pro)
PiattaformeWindows, Mac, LinuxWindows, Mac, LinuxWindows e Mac
InterfacciaGrafica e riga di comandoRiga di comandoGrafica
Fa il mux di file di sottotitoli che hai giàSìSìIn parte, tramite importazione in un lavoro
Crea i sottotitoli dal parlatoNoNoSì
Scrive MP4 con tracce di sottotitoliNoSìNo
Tag di lingua e flag predefinitoSìSìSì, impostati in automatico
Flag forzatoSìSìNo
Allega i fontSìSìSì, font da didascalia inclusi
Cambia i flag senza rifare il muxSì, con mkvpropeditNoNo

«Ho già i file dei sottotitoli.» MKVToolNix. È gratuito, mostra ogni traccia e ogni flag prima di scrivere qualsiasi cosa, e il lavoro richiede due minuti.

«Ho una stagione di episodi da elaborare.» mkvmerge o FFmpeg in un ciclo. Entrambi i comandi qui sopra girano senza supervisione, una volta che i nomi dei file seguono uno schema.

«Deve funzionare su un iPhone o in QuickTime.» MP4 con FFmpeg, accettando sottotitoli in testo semplice.

«I miei sottotitoli sono ASS con stile.» MKV con il font allegato. L'MP4 elimina lo stile durante l'inserimento.

«Ho solo il video.» Sablate, se vuoi trascrizione, traduzione e MKV multitraccia in un unico posto. Subtitle Edit è la via gratuita se ti sta bene mettere insieme i passaggi per conto tuo.

«Va su YouTube.» Nessuno dei due contenitori. Piattaforme come YouTube accettano l'.srt o il .vtt come caricamento separato.

Perché i sottotitoli del mio MKV non compaiono?

La traccia c'è quasi sempre: è qualcos'altro a decidere di non mostrarla. Prima di tutto, elenca cosa contiene davvero il file:

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

Ogni traccia di sottotitoli stampa una riga con il codec, la lingua, il nome e i flag predefinito e forzato. Se le tracce sono elencate, scorri questa lista:

  1. Nessuna traccia ha il flag predefinito. Il player non ha nulla da attivare da solo. Imposta il flag con mkvpropedit, come nel Metodo 1.
  2. Vince la preferenza del player. VLC, Plex e molte TV memorizzano una lingua di sottotitoli preferita, oppure un'impostazione che li tiene spenti, e queste preferenze scavalcano i flag nel file. Controlla prima il player, poi il file.
  3. Una traccia completa ha il flag forzato. Gli spettatori che hanno disattivato i sottotitoli vedono comunque ogni battuta. Il flag forzato va solo sulle tracce parziali.
  4. La traccia dell'MP4 viene ignorata. Parecchi player ignorano mov_text senza avvisare. Se il file non deve per forza essere un MP4, rifai il mux in MKV.
  5. Le lettere accentate diventano simboli illeggibili. L'SRT di partenza è stato salvato in una codifica obsoleta. Salvalo di nuovo in UTF-8 e rifai il mux, oppure indica la codifica con --sub-charset in mkvmerge o con -sub_charenc davanti all'input dei sottotitoli in FFmpeg.
  6. Il testo con stile appare in un font semplice. La traccia ASS indica un font che il computer di riproduzione non ha. Allega il file del font, come nell'ultimo comando FFmpeg.

Il mux è la parte economica della consegna dei sottotitoli: un minuto in MKVToolNix, una riga in FFmpeg, nessuna ricodifica. La parte costosa è avere, prima di tutto, buoni file di sottotitoli in ogni lingua. Se li hai già, gli strumenti gratuiti qui sopra sono tutto ciò che ti serve. Se hai solo la registrazione, scarica Sablate per Windows o Mac, trascrivila e traducila, e lascia che sia l'esportazione a scrivere al posto tuo tracce, tag e flag.