Extraire les sous-titres d'une vidéo
La première exécution télécharge le moteur de sous-titres — environ 31 Mo, servi par ce site et mis en cache par le navigateur ensuite. La vidéo elle-même ne quitte jamais cet onglet.
Cette page prend un fichier vidéo et vous rend les pistes de sous-titres qu'il contient déjà, un fichier par piste, nommé d'après la langue de la piste. Un fichier Matroska avec une piste anglaise SDH, une piste chinoise et une piste d'images PGS ressort en trois fichiers : un .srt, un autre .srt et un .sup. Le conteneur est démultiplexé plutôt que réencodé, donc une piste texte est copiée avec les octets qui étaient déjà dans le fichier — ni retapée depuis un écran, ni recadencée.
Le travail se fait dans l'onglet. La vidéo est lue par une compilation de ffmpeg compilée en WebAssembly que ce site sert lui-même, et la seule requête réseau concerne ce moteur : environ 31 MB au premier usage, puis mis en cache par le navigateur. La vidéo elle-même n'est jamais envoyée, ce qui est la règle de toutes les autres pages du site et la raison pour laquelle celle-ci peut servir sur un matériel qui n'a pas le droit de quitter la machine.
Les sous-titres incrustés dans l'image ne peuvent pas être extraits, et aucun outil ne le peut, car il n'y a aucune piste à lire : ces mots sont des pixels. Si le fichier n'a aucune piste de sous-titres, la page le dit au lieu de produire un fichier vide, y compris dans le cas d'incrustation : une vidéo avec des sous-titres visibles mais sans piste sera signalée comme n'ayant rien à extraire.
La page énumère chaque piste de sous-titres trouvée avant d'écrire quoi que ce soit : index, codec, langue, titre, et si la piste est marquée par défaut ou forcée. Les pistes qui vivent déjà dans leur propre conteneur conservent leur format — ASS reste ASS, WebVTT reste WebVTT — parce que les convertir ici en SRT supprimerait le style sans le dire, et supprimer le style sans qu'on vous le demande est la seule chose que ce site ne fait pas. Une piste dont le codec n'a pas de conteneur autonome (la piste mov_text dans un MP4, par exemple) est réencodée en SRT, et la carte de résultat l'indique au lieu de la faire passer pour une copie.
Les pistes bitmap ressortent sous forme d'images, pas de texte : un flux PGS devient un .sup et un flux DVD un .sub. C'est délibéré — l'image est ce que contenait le fichier, et deviner son texte est un travail distinct, avec sa propre page et sa propre question de langue. Emmenez le .sup sur la page PGS si vous avez besoin de texte.
L'annulation arrête l'extraction en cours et termine le worker qui la mène, donc un fichier volumineux ne garde pas un cœur occupé après que vous avez décidé de ne pas attendre. Aucun fichier partiel n'est proposé au téléchargement : un sous-titre à moitié écrit qui paraît complet est pire que pas de fichier du tout.
Questions fréquentes
Quels conteneurs vidéo puis-je déposer ?
MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG et OGV. Cette liste est en réalité celle des démultiplexeurs présents dans la compilation de ffmpeg embarquée, pas une liste de codecs vidéo : quel que soit le contenu du conteneur, les pistes de sous-titres sont le même type de flux. Un fichier à l'extension inhabituelle mais au corps Matroska normal fonctionne généralement, car le démultiplexeur lit l'en-tête plutôt que le nom ; un téléchargement fragmenté ou incomplet échoue souvent, faute d'index à parcourir.
La vidéo quitte-t-elle mon ordinateur pendant la lecture ?
Non. Le seul téléchargement est le moteur ffmpeg lui-même, environ 31 MB, servi par ce site et mis en cache par le navigateur après le premier usage. Votre vidéo est montée dans le système de fichiers virtuel du moteur, dans l'onglet, et lue depuis là ; elle n'est jamais écrite dans le corps d'une requête. Vous pouvez le vérifier dans le panneau Réseau : pendant le traitement d'un fichier, aucune requête ne le transporte. Cette propriété est la raison d'être de la page : la plupart des extracteurs envoient d'abord, et un matériel sous obligation légale ou médicale ne peut pas être envoyé.
Pourquoi ai-je obtenu un fichier .sup au lieu d'un .srt ?
Parce que cette piste est stockée sous forme d'images, pas de texte. Les flux PGS (codec hdmv_pgs_subtitle) sont une suite d'images, et l'extraction honnête d'un flux d'images est un flux d'images : un .sup, exactement ce qu'attendent les lecteurs et les éditeurs de sous-titres. Le transformer en texte signifie reconnaître les lettres de chaque image, ce qui est une autre page, avec une question de langue et une étape de relecture. L'extracteur n'invente jamais un texte qu'il n'a pas lu.
Que fait l'outil d'une piste dont le format n'a pas de fichier autonome ?
Il réencode cette piste en SRT et marque le résultat comme réencodé. Le cas courant est mov_text, le codec de sous-titres qui vit dans MP4 : il n'a pas de format de fichier propre, donc copier le flux tel quel produirait des octets que rien ne pourrait ouvrir. Le réencodage n'est pas sans perte — le style et le positionnement que mov_text peut porter ne survivent pas — et la carte de résultat l'inscrit donc comme une perte plutôt que de présenter le fichier comme une copie intacte du conteneur. Les autres pistes, elles, sont copiées telles quelles : c'est la différence entre copie et transcodage, et elle est visible sur chaque ligne de résultat.
Comment les fichiers de sortie sont-ils nommés quand il y a plusieurs pistes ?
D'après le nom de la vidéo et le code de langue de la piste : un fichier documentary.mkv avec une piste anglaise donne documentary.eng.srt. Quand deux pistes partagent une langue — une piste anglaise normale et une piste anglaise SDH, ce qui est fréquent —, la seconde devient documentary.eng-2.srt au lieu d'écraser la première. Une piste sans étiquette de langue retombe sur son index de flux, de sorte qu'elle reste distinguable. Si vous obtenez plus d'un fichier, la page les propose en un seul zip, car les navigateurs bloquent le lancement de plusieurs téléchargements à la fois depuis une page.
Pourquoi la première exécution prend-elle plus de temps que la seconde ?
La première exécution télécharge le moteur ffmpeg, environ 31 MB. La ligne de progression couvre ce téléchargement puis l'extraction elle-même. Le navigateur met le moteur en cache, donc les exécutions suivantes sur la même page démarrent presque immédiatement ; c'est vrai aussi après un rechargement si le cache n'a pas été vidé. Le moteur est servi en quatre morceaux parce que la plateforme d'hébergement refuse les fichiers individuels de plus de 25 MiB, et la page les assemble en mémoire avant de commencer : cet assemblage fait partie de la même attente au premier usage.
Puis-je annuler une extraction qui prend trop de temps ?
Oui. Le bouton d'annulation arrête l'extraction en cours et termine le worker qui l'exécute, donc un gros fichier ne maintient pas un cœur occupé après votre décision. Annuler n'est pas une erreur : l'élément revient dans un état depuis lequel vous pouvez réessayer, et l'exécution suivante démarre un nouveau worker. Rien de partiel n'est proposé au téléchargement, car un fichier de sous-titres à moitié écrit qui semble complet est pire que pas de fichier.