Come estrarre i sottotitoli dal video usando ffmpeg?


34

Sto cercando di estrarre i sottotitoli dal video come .srtfile, ho usato il seguente comando:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Ma ho ricevuto un errore come opzione non riconosciuta. codec:s:0:1 Quindi, puoi dirmi il comando esatto e come estrarre un sottotitolo come .srtfile nel video?


umair: me lo dirai al prompt dei comandi
vijay

Ho lo stesso problema. Hai capito che alla fine funzionerà?
Maxime Labelle,

Risposte:


51

Semplice:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / percorso del file di input.
  • -map : designare uno o più flussi di input come sorgente per il file di output.
  • s: 0 : seleziona il flusso di sottotitoli.

2
Questo ha funzionato per me con un file MP4 con sottotitoli incorporati.
Rubens Mariuzzo,

11
Ciò scaricherà la prima traccia dei sottotitoli. Se ce ne sono diversi, utilizzare 0:s:1per scaricare il secondo, 0:s:2per scaricare il terzo e così via.
Fabien Snauwaert,

5
@ jm3 Ti capita di conoscere un modo per estrarre automaticamente tutti i flussi di sottotitoli da un file, nominandoli in base al loro identificatore della lingua (ad esempio eng, fre, dut ecc.)?
P.

perché è così lento quando si estrae da un grande contenitore MKV (~ 4 gb)?
user25

Per estrarre più sottotitoli contemporaneamente devi duplicare i -mapparametri per ciascun file. Inoltre includono -c copyin modo che solo estrae il file senza cercare di elaborarlo: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. Comunque ci vorrà molto tempo perché ffmpeg deve leggere l'intero file video per trovare tutte le parti dei flussi di sottotitoli.
Radek Pech,

8

-codec:s:0:1non è corretto. Se usi -codec:s:0allora ffmpeg utilizzerà il codec indicato per il primo flusso di sottotitoli passato all'output, se lo usi -codec:s:1lo utilizzerà per il secondo flusso di sottotitoli, ecc.

È inoltre possibile utilizzare -codec:sper selezionare tutti i flussi di sottotitoli di output o -codec:2per selezionare il terzo flusso di output, indipendentemente da quale sia.

Probabilmente sei confuso perché l' -mapopzione si comporta in modo diverso: lì devi selezionare da quale input proviene il flusso selezionato. (quindi, -map 0:s:0prenderebbe il primo flusso di sottotitoli dal primo input e lo invierebbe all'output). Tuttavia, -mapserve per selezionare quali flussi vuoi prendere dagli input; mentre la maggior parte delle altre opzioni che usano la mappatura dello stream sono da utilizzare sugli stream dopo che sono stati selezionati (quindi non è necessario specificare da quale file di input provengono), poiché vengono passati all'output.


evilsoup: vorrei usare il seguente comando E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ routine.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, sembra un errore i ottenuto Impossibile trovare un formato di output adatto per 'srt', puoi dirmi il comando per estrarre un sottotitolo nel video ...
vijay

2
Prova: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg dovrebbe rilevare che vuoi i sottotitoli srt dal nome del file di output)
evilsoup

Ho usato: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtche dovrebbe copiare tutti i sottotitoli nel file srt.
Stuart,

@Stuart non estrae tutti i sottotitoli
user25

1
@evilsoup -codec:sè uguale a -codec:s:0quindi non seleziona tutti i sottotitoli ... estrarrà la prima traccia di testo
user25
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.