Comment extraire les sous-titres d'une vidéo en utilisant ffmpeg?

34

J'essaie d'extraire les sous-titres de la vidéo sous forme de .srtfichier, j'ai utilisé la commande suivante:

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

Mais, j'ai une erreur en tant qu'option non reconnue codec:s:0:1 Alors, pouvez-vous me dire la commande exacte et comment extraire un sous-titre en .srtfichier vidéo?

vijay
la source
umair: devez-vous me le dire à l'invite de commande
vijay
J'ai le même problème. Avez-vous réussi à le faire finalement?
Maxime Labelle

Réponses:

51

Simple:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / chemin du fichier d'entrée.
  • -map : désigne un ou plusieurs flux d'entrée comme source pour le fichier de sortie.
  • s: 0 : sélectionnez le flux de sous-titres.
jm3
la source
2
Cela a fonctionné pour moi avec un fichier MP4 avec des sous-titres intégrés.
Rubens Mariuzzo
11
Cela téléchargerait la première piste de sous-titres. S'il y en a plusieurs, utilisez 0:s:1pour télécharger le second, 0:s:2pour télécharger le troisième, etc.
Fabien Snauwaert
5
@ jm3 Connaissez-vous un moyen d'extraire automatiquement tous les flux de sous-titres d'un fichier, en les nommant d'après leur identifiant de langue (par exemple eng, fre, dut etc.)?
Fr.
pourquoi est-il si lent lors de l'extraction à partir d'un gros conteneur MKV (~ 4 Go)?
user25
Pour extraire plus de sous-titres à la fois, vous devez dupliquer les -mapparamètres de chaque fichier. Inclure aussi de -c copysorte qu'il extrait juste le fichier sans essayer de le traiter: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. Quoi qu'il en soit, cela prendra du temps car ffmpeg doit lire le fichier vidéo entier pour trouver toutes les parties des flux de sous-titres.
Radek Pech
8

-codec:s:0:1est incorrect. Si vous utilisez -codec:s:0alors ffmpeg utilisera le codec indiqué pour le premier flux de sous-titres transmis à la sortie, si vous utilisez -codec:s:1alors il l'utilisera pour le second flux de sous-titres, etc.

Vous pouvez également utiliser -codec:spour sélectionner tous les flux de sous-titres en sortie ou -codec:2pour sélectionner le troisième flux de sortie, quel qu'il soit.

Vous êtes probablement confus parce que l' -mapoption se comporte d'une manière différente - là, vous devez sélectionner de quelle entrée provient le flux sélectionné. (donc, -map 0:s:0prendrait le premier flux de sous-titres de la première entrée et le transmettrait à la sortie). Cependant, -mapc'est pour sélectionner les flux que vous souhaitez prendre à partir des entrées; tandis que la plupart des autres options qui utilisent le mappage de flux doivent être utilisées sur les flux après leur sélection (il n'est donc pas nécessaire de spécifier de quel fichier d'entrée ils proviennent), car ils sont passés à la sortie.

evilsoup
la source
evilsoup: j'utiliserais la commande suivante E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ routine.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, il semble qu'une erreur i obtenu Impossible de trouver un format de sortie approprié pour 'srt', pouvez-vous me dire la commande pour extraire un sous-titre en vidéo ...
vijay
2
Essayez: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg devrait détecter que vous voulez des sous-titres srt à partir du nom du fichier de sortie)
evilsoup
J'ai utilisé: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtcela devrait copier tous les sous-titres dans le fichier srt.
Stuart
@Stuart il n'extrait pas tous les sous
user25
1
@evilsoup -codec:sest égal à -codec:s:0donc il ne sélectionne pas tous les sous-titres ... il extraira la première piste de texte
user25