Sous-titres automatiques (parole → sous-titres)
Reconnaît la parole dans un fichier audio/vidéo pour générer des sous-titres. Basé sur le script partagé skills/shared/scripts/asr.py (encapsulation de faster-whisper), paramètres déterminés et reproductibles, avec une coupure de phrases adaptée au chinois. Optionnellement, grave les sous-titres dans la vidéo (réutilise skills/shared/scripts/video_ops.py / filtre ffmpeg subtitles).
Ne fait que "parole → fichier de sous-titres (+ gravure optionnelle)". Pour le montage vidéo général, voir video-editing ; pour la réduction de bruit, voir audio-denoise ; pour le découpage intelligent + gravure de sous-titres de longues vidéos, voir clipify.
Entrée
| Champ | Obligatoire | Description |
|---|---|---|
| input_file | Oui | Chemin du fichier audio ou vidéo (la vidéo extrait automatiquement la piste audio) |
| format | Non | srt (par défaut) / ass / txt / json |
| language | Non | auto (par défaut) ou zh/en etc. (code ISO 639-1) |
| model | Non | tiny/base (par défaut)/small/medium/large-v3, plus c'est grand, plus c'est précis et lent |
| burn | Non | Graver ou non les sous-titres dans la vidéo (nécessite une entrée vidéo) |
Formats supportés : mp3/wav/m4a/aac/flac pour l'audio ; mp4/mkv/mov/webm pour la vidéo.
Sortie
- Les fichiers de sous-titres sont placés dans
outputs/nom_du_sujet/(SRT/ASS/TXT/JSON) - Si gravure : vidéo avec sous-titres incrustés (
*-sub.mp4) - Rapport : langue reconnue, nombre de sous-titres, modèle utilisé, chemins de sortie
Prérequis
- La première exécution télécharge le modèle depuis HuggingFace, nécessite un proxy externe. Le script lit la variable d'environnement
EASEL_PROXYouhttp(s)_proxycomme proxy ; si aucune n'est définie, connexion directe. On peut aussi spécifier avecexport https_proxy=... http_proxy=.... - En environnement CPU, utiliser les valeurs par défaut
--device cpu --compute-type int8.
Étapes d'exécution
Chemins des scripts (relatifs à la racine du projet) : skills/shared/scripts/asr.py, skills/shared/scripts/video_ops.py.
1. Générer le fichier de sous-titres
# Vidéo → SRT (extraction automatique de la piste audio + détection automatique de la langue)
python skills/shared/scripts/asr.py transcribe \
-i input.mp4 -o outputs/nom_du_sujet/input.srt --language zh
# Vidéo → ASS (avec style, **taille de police/marge adaptées automatiquement à l'orientation de la vidéo**) : la saisie vidéo détecte automatiquement la largeur et la hauteur
python skills/shared/scripts/asr.py transcribe \
-i input.mp4 -o outputs/nom_du_sujet/input.ass --format ass --model small
# Audio seul → ASS : impossible de détecter les dimensions, portrait par défaut 1080x1920 ; paysage ajouter --res 1920x1080
python skills/shared/scripts/asr.py transcribe \
-i voice.mp3 -o outputs/nom_du_sujet/voice.ass --format ass --res 1920x1080
- Le style ASS s'adapte automatiquement aux dimensions de la vidéo cible : la taille de la police est basée sur le petit côté (min(w,h)*0.05, convient aussi bien au portrait qu'au paysage, plus de problème de taille excessive en paysage), la marge du bas est basée sur la hauteur, les marges gauche/droite sur la largeur,
PlayRes= largeur/hauteur réelles. La saisie vidéo détecte automatiquement ; pour l'audio seul, spécifier avec--res largeurxhauteur. Pour graver des sous-titres stylisés, privilégiez ce fichier ASS (section suivante), plus simple et adaptable que du SRT brut avec force_style saisi manuellement. - En chinois, par défaut environ 18 caractères par ligne, coupure automatique en cas de dépassement ; paramétrable avec
--max-line-chars. - Sans
-o, crée un répertoire projet basé sur le nom du fichier d'entrée, par exempletalk.mp4sort dansoutputs/talk/talk.srt; pour un projet existant, spécifier explicitement-o outputs/nom_du_sujet/<fichier>.<format>. - Voir les modèles/langues disponibles :
python skills/shared/scripts/asr.py info.
2. (Optionnel) Graver les sous-titres dans la vidéo
Quand l'utilisateur demande "sous-titres incrustés/graver dans la vidéo", utiliser les filtres ffmpeg subtitles (SRT) ou ass (ASS) :
# Graver SRT (style personnalisable)
ffmpeg -y -i input.mp4 \
-vf "subtitles=outputs/nom_du_sujet/input.srt:force_style='FontName=Noto Sans CJK SC,FontSize=20,PrimaryColour=&H00FFFFFF,OutlineColour=&H80000000,BorderStyle=1,Outline=2'" \
-c:a copy outputs/nom_du_sujet/input-sub.mp4
# Graver ASS (le style est déjà dans le fichier ASS, fidèle)
ffmpeg -y -i input.mp4 \
-vf "ass=outputs/nom_du_sujet/input.ass" \
-c:a copy outputs/nom_du_sujet/input-sub.mp4
- Si le chemin contient des caractères spéciaux, entourer la valeur de
subtitles=de guillemets simples et échapper les deux-points. - Pour des sous-titres logiciels (désactivables) plutôt qu'incrustés :
ffmpeg -i in.mp4 -i sub.srt -c copy -c:s mov_text out.mp4.
3. Résultats et rapport
- Les fichiers de sous-titres et la vidéo gravée sont écrits dans
outputs/nom_du_sujet/. - Rapporter à l'utilisateur : langue reconnue, nombre de sous-titres, modèle, chemins des fichiers ; suggérer de relancer avec
--model/--max-line-charssi nécessaire.
Règles
- La vidéo extrait d'abord la piste audio — le script extrait automatiquement un wav 16 kHz mono avec ffmpeg, sans modifier la vidéo originale.
- Coupure de phrases adaptée au chinois — coupe selon la ponctuation/longueur, évite les lignes trop longues.
- Ne jamais supprimer les fichiers originaux — crée seulement de nouveaux fichiers dans
outputs/. - Choix du modèle — Pour la rapidité, utiliser
base; pour la précision,small/medium; CPU utiliser int8. - La gravure nécessite une entrée vidéo — l'audio seul ne peut pas être gravé, seulement générer le fichier de sous-titres.
- Aucune dépendance de profil — la transcription ne nécessite pas de profil utilisateur.
Références
- SYSTRAN/faster-whisper — Inférence Whisper accélérée par CTranslate2
- openai/whisper — Modèle Whisper original et méthode ASR
- Filtres FFmpeg
subtitles/ass(gravure de sous-titres)