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

j'ai vérifié la documentation FFMpeg et de nombreux forums et j'ai trouvé la bonne ligne de commande pour extraire les sous-titres de an .La 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 donne beaucoup de moi à la question de savoir si c'est possible:

erreur lors de l'ouverture de l'encodeur pour le flux de sortie #0:0 - peut-être des paramètres incorrects comme bit_rate, rate, width ou height

en utilisant ffmpeg -codecs, je peux le confirmer que ffmpeg devrait être capable d'encoder des sous-titres.

en utilisant ffmpeg -i video.mp4, je peux voir qu'il y a deux pistes de sous-titres intégrés 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 montrée dans les commentaires mais j'obtiens toujours la même erreur. un lien vers les détails de la sortie verbeuse à partir de l'exécution de la commande. J'ai aussi essayé de désactiver complètement les métadonnées et les chapitres dans les mais cela produit toujours la même erreur.

11
demandé sur Maxime Labelle 2013-12-19 12:41:08

3 réponses

j'ai trouvé pourquoi je n'ai pas réussi:

la ligne de commande spécifiée aurait été parfaitement correcte si les sous-titres de la vidéo source avaient été encodés dans une représentation textuelle. Cependant, comme on peut le voir dans la sortie de la ffmpeg -i commande en ligne, les sous-titres sont encodés dans le format" dvd_subtitle".

le format dvd_subtitle stocke des bitmaps pour chaque sous-titre de la vidéo. Par conséquent, il est impossible que ffmpeg soit en mesure de traduire des images bitmap dans le texte.

pour cette tâche, il faut recourir à un logiciel OCR qui aide l'utilisateur à 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 la plupart des lecteurs populaires. À toutes fins pratiques, ce sous-titre" mov_text " semble être un stabplaceholder, probablement un artefact de la conversion de l'original DVD)

22
répondu Maxime Labelle 2014-01-02 16:52:05

juste FYI, (Je ne peux pas encore commenter à cause de rep), mais extraire SRT à partir D'un MP4 se traduira par un fichier formaté comme MOV_Text pas le SRT régulier. Il sera encore ajouté et fonctionnera, mais c'est comme changer mp4 en m4v. Bien que cela fonctionne habituellement, les choses ne fonctionnent pas de la même façon dans le code. Mov_text est horrible pour régler manuellement la police / taille etc etc Le meilleur pari est de télécharger et de tester un SRT à partir du web!

cela fonctionnera, mais résultera en fichier SRT codé mov_text:

ffmpeg -i in.mp4 out.srt
4
répondu FreeSoftwareServers 2015-10-15 05:59:19

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

Syntaxe:

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

Puisqu'il y a deux streams de sous-titres dans votre vidéo, le premier sur 0:3 qui est dvdsubtitle donc ne peut pas être converti en srt donc nous allons convertir le second sous-titre sur 0:4 stream qui est mov_text et est la copie douce du sous-titre donc peut être facilement converti....

1
répondu Manthaar Janyaro 2017-02-04 07:35:19