web-dev-qa-db-fra.com

Est-il possible d'extraire des sous-titres SubRip (SRT) à partir d'une vidéo MP4 avec ffmpeg?

J'ai consulté la documentation de FFMpeg et de nombreux forums et trouvé la bonne ligne de commande pour extraire les sous-titres d'une vidéo .MP4 devrait ressembler à ceci:

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt

Cependant, j'obtiens l'erreur suivante, ce qui me permet de me demander si cela est réalisable:

Erreur lors de l'ouverture du codeur pour le flux de sortie n ° 0: 0 - paramètres incorrects tels que débit binaire, débit, largeur ou hauteur

En utilisant ffmpeg -codecs, je peux confirmer que ffmpeg devrait pouvoir encoder les sous-titres subrip.

En utilisant ffmpeg -i video.mp4, je peux voir qu'il y a deux pistes de sous-titres intégrées dans la vidéo:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
...
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:2(fra): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:3(eng): Subtitle: dvd_subtitle (mp4s / 0x7334706D)
Stream #0:4(und): Subtitle: mov_text (text / 0x74786574)

EDIT

J'ai testé avec la ligne de commande simplifiée indiquée dans les commentaires, mais j'obtiens toujours la même erreur. Voici un lien vers la sortie détaillée de l'exécution de la commande. J'ai également essayé de désactiver complètement les métadonnées et les chapitres dans la sortie résultante, mais cela produit toujours la même erreur.

11
Maxime Labelle

J'ai finalement compris pourquoi je n'avais pas réussi:

La ligne de commande spécifiée aurait parfaitement fonctionné si les sous-titres de la vidéo source avaient été codés dans une représentation textuelle. Toutefois, comme indiqué dans la sortie de la ligne de commande ffmpeg -i, les sous-titres sont codés au format "dvd_subtitle".

Le format dvd_subtitle stocke des bitmaps pour chaque sous-titre de la vidéo. Par conséquent, il n’existe aucun moyen pour ffmpeg de traduire les bitmaps en texte.

Pour cette tâche, il faut avoir recours à un logiciel basé sur OCR qui assiste un utilisateur dans la tâche d'identifier chaque sous-titre sous forme de texte à partir de sa représentation bitmap.

(Il y a un sous-titre secondaire basé sur du texte dans la vidéo source, mais je ne sais pas d'où il vient et n'est pas vu par les joueurs les plus populaires. À toutes fins pratiques, ce sous-titre "mov_text" semble être un espace réservé au talon , probablement un artefact de la conversion du DVD original)

22
Maxime Labelle

Juste pour info, (je ne peux pas commenter pour le moment à cause de la représentation), mais en extrayant SRT d'un MP4, le fichier sera au format MOV_Text et non en SRT normal. Il sera toujours ajouté et fonctionnera, mais c’est comme changer de mp4 en m4v. Bien que cela fonctionne habituellement, les choses ne fonctionnent pas de la même manière dans le code. Mov_text est horrible pour ajuster manuellement la taille/police de caractères, etc. Le mieux est de télécharger et de tester une SRT à partir du Web!

Cela fonctionnera, mais aboutira à un fichier srt codé par mov_text:

ffmpeg -i in.mp4 out.srt
4

Essayez d'utiliser l'option map ... s'il y a trop de flux dans les fichiers d'entrée ....

La syntaxe serait:

ffmpeg -i video.mp4 -map 0: 4 out.srt

Étant donné que votre vidéo contient deux flux de sous-titres, le premier sur 0: 3, qui est dvdsubtitle, ne peut pas être converti en srt. ...

1
Manthaar Janyaro