Sous-titres
Les sous-titres sont calculés à partir de work/transcript.json mis en correspondance avec les segments de dialogue du montage (les mots supprimés disparaissent, les bruits de fond ne sont jamais sous-titrés), segmentés selon les règles de config/captions.styles.yaml, écrits sous forme de fichiers bruts et gravés par ffmpeg. Resolve n'est pas impliqué.
Commandes
ave captions <ep> --stage rough --style podcast # -> captions/rough.srt + .ass, NOUVEAU edits/rough.vN.json avec les sous-titres définis
ave captions <ep> --stage rough --name s2 # montage d'une session (identique à --stage rough:s2) -> captions/rough.s2.srt, NOUVEAU rough.s2.vN.json
ave captions <ep> --stage select:<name> --style short # clip vertical : karaoké ASS (\kf par mot), bloc à 65 % de hauteur
ave captions <ep> --stage final --burn [--video exports/final.mp4] # grave aussi dans le rendu -> <video>.captions.mp4
ave captions check <ep> captions/rough.srt # exit 1 + JSON des problèmes si une règle est violée (SRT ou ASS)
ave captions retranscribe <ep> exports/final.mp4 [--srt-out f.srt] [--asr whisper] [--diarize]
Styles : podcast (centré en bas, blanc, contour fin), short (gras, surbrillance du mot, zone de sécurité dégagée des 25 % inférieurs et des 120 px de droite en 1080 de large), minimal (petit, discret). Les tailles sont des fractions du canvas, donc le même style est correct à 1920x1080 et 1080x1920. Ajustez les nombres dans le YAML, ou remplacez-les par épisode dans <ep>/policy/captions.styles.yaml (fusion profonde).
Évaluation du résultat
- Lisez les
problemsdans le JSON. Types :line_too_long,too_many_lines,orphan_line,too_short,too_long,reading_speed,overlap,empty.reading_speedsur une zone de texte coincée entre deux autres est réel (parleur rapide) : dites-le à l'humain, ne le cachez pas. - Lisez le SRT. Vérifiez que les coupures tombent sur la ponctuation ou les propositions, pas au milieu d'une phrase (« la plu / part »). Si beaucoup sont mauvaises, ajustez
avoid_ending_with/clause_startersdans le YAML plutôt que d'éditer le fichier à la main. - REGARDEZ une image avec les sous-titres gravés (
ave framesur la vidéo gravée) : texte lisible sur des images chargées, dans la zone de sécurité, ne recouvrant pas un tiers inférieur. - Noms propres : ajoutez-les dans
episode.jsonglossaryet relancez. Soit{"glossary": {"open ai": "OpenAI"}}(faux -> vrai, mots multiples acceptés) soit une liste de noms correctement capitalisés["Maren", "Cloudflare"](correspondance insensible à la casse). Évitez de lister des noms qui sont aussi des mots courants. drop_fillers(euh, hum...) sont entendus mais pas sous-titrés par défaut ; définissezdrop_fillers: []pour une transcription textuelle.
Processus de rendu final
Le timing des sous-titres dépend du montage final. Après l'approbation du montage : effectuez le rendu, puis ave captions retranscribe sur le rendu et utilisez ce SRT comme fichier sidecar (mots et timing exacts tels qu'entendus). Le moteur ASR est FluidAudio Parakeet ; s'il n'est pas construit, la commande utilise whisper.cpp en repli et le mentionne dans warnings. Vérifiez les noms mal entendus dans le SRT retranscrit avant publication.
Modes de défaillance
- Le SRT retranscrit semble en minuscules, sans ponctuation, avec des zones de 5 s et des décalages de plusieurs secondes : c'est le repli vers whisper.cpp (FluidAudio introuvable ; dans un worktree, définissez
AVE_FLUIDAUDIO). Relancezave captions retranscribe ... --asr fluidaudio --srt-out <nouveau fichier>. Mesuré sur un épisode réel : whisper médiane 0,55 s en avance (p10 1,4 s), Parakeet à moins de 0,13 s. - Avertissement de police dans le JSON : la police préférée du style n'est pas installée ; le système utilise une police de repli (ne plante jamais). Regroupez une police OFL dans
motion-kit/brand/fontspour garantir un rendu identique sur toutes les machines. No speech falls inside this edit's dialogue: le montage ne contient que des bruits de fond ou la transcription est manquante ; exécutez d'abordave transcribe.- La taille de la vidéo gravée diffère du canvas du document (par exemple un proxy) : l'ASS est régénéré automatiquement à la taille réelle de la vidéo.
- N'écrasez jamais un montage existant : chaque exécution crée le
vNsuivant. Les fichiers de sous-titres danscaptions/sont dérivés et sont remplacés.
Point de contrôle
Arrêtez-vous et montrez à l'humain le choix du style et une image gravée avant de graver un fichier final complet ou de publier des vidéos courtes.