Que fait captions ?
Transcription locale au niveau du mot, stylisation et incrustation de légendes pour formats courts.
Les scripts se trouvent dans scripts/ :
| Script | Fonction |
|---|---|
transcribe.py | faster-whisper avec word_timestamps=True vers words.json (mis en cache) |
make-captions.mjs | words.json vers ASS (stylisé, mise en évidence du mot actif) et SRT |
burn.mjs | Incruste ASS/SRT avec libass (filtre ass/subtitles) |
snap-to-words.mjs | Déplace les points de coupe vers l'espace le plus proche entre les mots |
Workflow
- Transcrire (une fois par source ; le résultat est mis en cache) :
Le premier téléchargement télécharge le modèle depuis Hugging Face. Si celui-ci est bloqué, le script se termine avec le code 4 et un message JSONpip install faster-whisper # une fois python3 scripts/transcribe.py --input clip.mp4 --out edit/clip.words.json --model small --language enfixau lieu d'une trace ; il n'écrit jamais de transcription factice. Pointez--modelvers un dossier de modèle CTranslate2 local pour travailler hors ligne. - Générer les légendes :
Le style provient du pack de marque (blocnode scripts/make-captions.mjs --words edit/clip.words.json --out-ass edit/clip.ass --out-srt edit/clip.srtcaptions: taille, marge, contour, mise en évidence ;colors.accentest la couleur du mot actif). - Incruster comme toute dernière étape visuelle :
Utiliseznode scripts/burn.mjs --input edit/clip-hook.mp4 --subs edit/clip.ass --out edit/clip-captioned.mp4--fonts-dirlorsque la police des légendes est un fichier plutôt qu'une police installée. - Vérifier avec une planche de contrôle
render-qc: lisible, à l'intérieur de la zone de sécurité, pas au-dessus de la plaque d'accroche.
Règles
- Ne jamais couper à l'intérieur d'un mot. Avant de diviser la parole, ajustez les coupes aux espaces entre les mots :
node scripts/snap-to-words.mjs --words edit/clip.words.json --markers edit/cuts.json --out edit/cuts.json - Les légendes se mettent en dernier : après les coupes, les incrustations et la colorimétrie. Si vous rognez le clip après la
transcription, passez
--offset -<secondes rognées>àmake-captions.mjs. - 1 à 3 mots par bloc pour les courts métrages (
maxWords,maxChars). Les blocs se coupent sur la ponctuation et les pauses. - Gardez les légendes hors des ~15 % inférieurs (interface utilisateur de la plateforme) et loin de la plaque d'accroche : réglez
captions.marginV. - Les transcriptions sont mises en cache : réexécutez avec
--forceuniquement lorsque l'audio a changé. - Vérifiez ponctuellement les mots par rapport à l'audio ; Whisper peut mal entendre les noms et le jargon. Corrigez
words.jsonà la main si nécessaire.
Sans libass dans ffmpeg
Si burn.mjs signale qu'aucun filtre ass n'est disponible, la version de ffmpeg ne possède pas libass. Installez une
version complète (la plupart des gestionnaires de paquets en fournissent une), ou téléchargez le SRT en tant que piste de
sous-titres séparée au lieu de l'incruster.