Stylisation des légendes
Une légende se lit en environ deux secondes, sur un téléphone, son coupé, par-dessus des images en mouvement, sous les boutons d'une application. Chaque valeur par défaut ci-dessous sert ce lecteur. Travaillez dans l'éditeur de l'utilisateur s'il en a un ; les chiffres sont les mêmes partout. En l'absence d'éditeur, utilisez les recettes ffmpeg dans references/ffmpeg-burn-in.md.
Valeurs par défaut
Utilisez ces valeurs sauf si l'utilisateur ou son guide de style indique le contraire.
| Réglage | Valeur par défaut | Pourquoi |
|---|---|---|
| Lignes par réplique | 2 au maximum | Une troisième ligne masque le sujet et n'est pas lue à temps. |
| Caractères par ligne | 42 en paysage 16:9 ; en vertical 9:16, ce qui tient dans la largeur de sécurité à votre taille : environ 32 à 64 px, 28 à 72 px (majuscules et minuscules) | Des lignes plus longues forcent le regard à se déplacer, et en vertical elles sortent du cadre. |
| Vitesse de lecture | 17 caractères par seconde au maximum (environ 160 à 180 mots par minute) | Pratique de diffusion ; WCAG ne fixe pas de vitesse, c'est donc la norme de travail. |
| Durée de la réplique | 1 s minimum, 6 s maximum | Moins d'1 s est un clignement ; plus de 6 s, les spectateurs relisent. |
| Intervalle entre répliques | 0 ou au moins 2 images | Un intervalle d'1 image donne l'impression d'un flash. |
| Position | Centre bas, à l'intérieur de la zone de sécurité ; sur 1080x1920, le texte reste au-dessus des 420 px du bas (22 % de la hauteur) | Cela évite à la fois TikTok et Reels. Déplacez en haut lorsque le tiers inférieur contient un visage, du texte incrusté ou une interface utilisateur d'application. |
| Taille, sous-titres de phrases | Paysage : 4,5 à 5 % de la hauteur du cadre (49 à 54 px en 1080p). Vertical : 64 à 72 px sur 1080x1920 | Lisibles à bout de bras, et les longueurs de ligne ci-dessus tiennent encore dans la largeur de sécurité de 900 px. |
| Taille, légendes courtes percutantes (1 à 3 mots) | Environ 140 à 150 px sur 1080x1920, au maximum environ 14 caractères par ligne en majuscules/minuscules, 11 en majuscules | Ce sont des éléments graphiques, pas des sous-titres. |
| Couleur | Blanc cassé #F2F2F2 sur un fond sombre opaque à 70–80 %, ou un contour sombre de 3 à 5 px plus une ombre douce | Le contraste sur des images en mouvement ne peut pas être mesuré image par image ; un fond garantit WCAG 4.5:1. |
| Polices | Un seul sans-serif gras (gras ou demi-gras) ; jamais plus de deux familles dans une vidéo | Les graisses fines disparaissent après compression. |
| Surbrillance des mots (karaoké) | Une couleur d'accent sur le seul mot actif, et elle doit également respecter le 4.5:1 | Une deuxième couleur pour « l'accentuation » oblige les spectateurs à chercher le sens. |
Vérification de l'ajustement avant le rendu. Un sans-serif gras de type Arial en majuscules/minuscules mesure en moyenne 0,44 de la taille de police par caractère (mesuré, espaces inclus) ; tout en majuscules, 0,55 ; les polices condensées, environ 0,35. Ainsi, une ligne fait environ caractères x facteur x police_px de large, et elle doit tenir dans la largeur de sécurité (900 px sur 1080x1920, 90 % de la largeur en paysage), pas dans le cadre. À 96 px, une ligne de 27 caractères en majuscules/minuscules fait environ 27 x 0,44 x 96 = 1 140 px : plus large que le cadre entier de 1080 px. Les facteurs sont des moyennes pour les polices sur lesquelles ils ont été mesurés (voir Pièges), confirmez donc avec un cadre rendu.
Les zones de sécurité des plateformes en pixels et comment dériver la boîte de sécurité pour n'importe quel format sont dans references/platform-safe-zones.md. Lisez-le avant de placer des légendes sur une vidéo verticale.
Workflow
-
Partez de timings réels. Les légendes ont besoin d'une transcription avec des temps par segment ou par mot. Sans transcription, il n'y a pas de légendes à créer : dites-le, ou transcrivez d'abord. N'inventez jamais de texte.
-
Recalibrer les temps sur le montage. Les transcriptions sont chronométrées par rapport au fichier source. Après un recadrage, une coupe ou un changement de vitesse, décalez et mettez à l'échelle chaque réplique sur la timeline (voir Pièges).
-
Segmentez en répliques. Coupez aux limites des propositions : après la ponctuation, avant les conjonctions et les prépositions. Ne séparez jamais un article de son nom, un prénom de son nom de famille, ni un nombre de son unité. Parmi deux coupes possibles, choisissez celle qui rend les deux lignes les plus proches en longueur.
-
Appliquez la vitesse de lecture. Une réplique de plus de 17 caractères par seconde est coupée ou prolongée dans le silence qui la suit. Ne réduisez jamais la police pour qu'elle tienne.
-
Marquez les intervenants et les sons. En cas de changement d'intervenant, commencez la ligne par
-(ou mettez leur nom entre crochets la première fois). Mettez les non-paroles significatifs entre crochets :[porte qui claque],[musique tendue]. Ne sous-titrez pas les mots de remplissage qui ont été coupés de l'audio. -
Stylisez et placez en utilisant les valeurs par défaut et la boîte de sécurité de ce format.
-
Vérifiez le fichier, puis corrigez chaque erreur signalée :
python scripts/check_captions.py captions.srt --fps 30 --max-chars 32Il vérifie le nombre de lignes, la longueur des lignes, les caractères par seconde, la durée, les intervalles et les chevauchements, et se termine avec un code d'erreur non nul en cas d'erreur. Ajoutez
--jsonpour un rapport lisible par machine. Sa limite de ligne par défaut est de 32 caractères, la valeur verticale et d'accessibilité ; passez--max-chars 42pour les sous-titres en paysage. -
Regardez les images rendues, pas les réglages : la première réplique, la plus longue et une réplique sur le fond le plus chargé. Confirmez que rien n'est rogné, que rien n'est sous l'interface utilisateur de l'application et que le texte est lisible à la taille d'un téléphone.
-
Livrez les deux : une version incrustée pour les réseaux sociaux et un fichier
.srtou.vttsidecar pour l'accessibilité et le téléchargement sur la plateforme, sauf si l'utilisateur n'en a demandé qu'un.
Pièges
- Les estimations de largeur mentent sur les polices condensées. Les estimations de largeur moyenne des glyphes ont été erronées de plus de 3 fois : un contrôle de débordement signalait une ligne dépassant de 127 px de chaque côté alors qu'elle s'affichait en réalité sur 270 px de large dans un cadre de 1080 px. Réduire la police pour satisfaire cette estimation a produit des légendes de 76 px sur 1080x1920 là où le style percutant demandait environ 150 px, bien trop petites pour être lues sur un téléphone. Rendez une image et mesurez.
- Les temps de transcription sont relatifs à la source. Si un clip commence 12,4 s après le début de sa source, soustrayez 12,4 s à chaque réplique et ajoutez le début de la timeline du clip. À une vitesse 2x, les durées sont divisées par deux, donc les répliques peuvent tomber sous 1 s ; re-segmentez plutôt que de conserver les anciennes limites de répliques.
- ffmpeg grave le SRT sur une grille de 288 lignes, pas en pixels. Avec
subtitles=file.srt:force_style=...,FontSizeetMarginVsont mesurés par rapport à un script de 384x288, doncFontSize=24s'affiche comme une police de 90 px sur une vidéo de 1080 lignes et de 160 px sur une vidéo de 1920 lignes. Convertissez avecFontSize = px * 288 / hauteur_cadre, ou écrivez un fichier ASS dontPlayResXetPlayResYsont égaux à la taille de la vidéo pour que les unités soient des pixels (la recette le fait). - Un fond dans ASS utilise OutlineColour. Avec
BorderStyle=3, la couleur de la boîte provient deOutlineColour, pas deBackColour, et les couleurs ASS sont&HAABBGGRRoù alpha00est opaque.&H40000000est du noir à 75 % d'opacité. - Les changements de couleur en ligne brisent un fond ASS. Un surlignage
{\c...}à l'intérieur d'une ligneBorderStyle=3dessine une boîte séparée pour chaque plage de couleur, et les boîtes semi-transparentes se chevauchent en formant des coutures sombres. Dessinez le fond comme sa propre couche avec du texte invisible et placez le texte visible sur une couche au-dessus (la recette montre comment). - Les polices manquantes échouent silencieusement. libass revient à une autre police sans erreur. Vérifiez la ligne
fontselect:dans le journal ffmpeg, ou passezfontsdir=. - Les chemins Windows brisent le filtre subtitles. Échappez le deux-points du lecteur :
subtitles='C\:/clips/subs.srt'. - Les paroles chantées sont chronométrées par phrase. La reconnaissance vocale sur de la musique omet des mots (un test en a perdu 4 sur 17) et renvoie des temps de phrase, pas des temps de mot. Ne construisez pas de karaoké mot par mot à partir de cela sans vérifier avec l'audio.
- Un préréglage peut colorer le mot actif à plusieurs endroits. Le préréglage néon d'un éditeur dessinait le surlignage à la fois à partir d'une couleur de surlignage et d'une lueur, donc le fait de remplacer uniquement un champ qui n'existait pas n'a rien changé, sans erreur. Remplacez chaque champ qui porte la couleur, par son vrai nom, et confirmez sur une image rendue.