Révision d'extraits de prise de parole face caméra
Transformez des rushes de parole face caméra en sélections approuvées sans que personne ne doive les visionner manuellement. L'agent transcrit, aligne et suggère. Une personne approuve sur une page. L'agent assemble ensuite exactement ce qui a été approuvé.
La transcription reste sur la machine. Les vidéos sources ne sont jamais modifiées.
Règles strictes
- Ne jamais modifier, déplacer ou ré-exporter les vidéos sources. Tout se résume à des points d'entrée/sortie et des fichiers dérivés.
- Ne jamais supprimer les rushes de l'utilisateur ni vider la corbeille. Si l'espace disque est insuffisant, prévenez et laissez l'utilisateur agir.
- Travaillez dans un dossier temporaire. Seuls les aperçus, les affiches, la page de révision et les sélections accompagnent les médias.
- N'inventez pas de formulation. Le texte des extraits provient de la transcription. Les corrections facultatives de phrases vivent dans un fichier JSON passé avec
--fix(voirreferences/term-corrections.example.json). N'appliquez pas le fichier d'exemple. - Vérifiez les faits prononcés face caméra (heures, chiffres, « il y a 10 minutes ») par rapport à l'enregistrement réel avant de les sélectionner.
- Pas de regards vers le moniteur, de chocs sur le micro, de clics ou de bruits de respiration dans un segment conservé. Relancez le regard (étape 5) et écoutez chaque point de montage après toute ré-édition, pas seulement lors de la première sélection. Coupez ou atténuez le bruit, jamais le mot adjacent.
- Les reprises et les lignes ré-enregistrées doivent correspondre au ton, au niveau sonore et à l'environnement de la prise principale (même micro, gain, distance, égalisation et débruitage). Signalez une ligne qui semblera étouffée ou enfermée au lieu de la livrer.
- Utilisez des traits d'union (pas des tirets longs) dans tout ce que vous écrivez pour l'utilisateur.
- Les limites de mots sont des contraintes absolues, même lorsqu'une instruction demande des coupes serrées ou des coupures de regard. Les extraits reçoivent un pré-rouleau de 0,15s et une queue de 0,25s autour des temps de mots de Whisper (ses bords de mots sont souvent en avance ou en retard), limités pour ne jamais empiéter sur un mot voisin. Les coupures de pause et de regard ne coupent que dans les espaces entre les mots et conservent au moins 0,1s à côté de chaque mot. Si un regard détourné chevauche un mot parlé, gardez le mot et signalez-le (
away_words, bordure rouge dans le stringout), ne le coupez jamais. Utilisezbuild_review.py --gaze-trimpour les coupures de bord au lieu d'écrire votre propre script de coupure. Lesexact_spansdéfinis manuellement sont également repoussés aux bords des mots.
Configuration (une fois par machine)
Exécutez scripts/check_deps.sh. Il nécessite ffmpeg, ffprobe, python3 et un backend Whisper. Swift est facultatif pour l'étape de regard. Étapes d'installation : references/setup.md.
Structure
TRAVAIL/ dossier temporaire, par exemple ./talk/
tx/<prise>.wav|json|txt audio 16 kHz mono, JSON Whisper avec mots, transcription lisible
picks.json beats + candidats (édité par l'agent)
picks_resolved.json plages précises aux mots, texte, durées (généré)
pose.json intervalles de regard détourné (facultatif, macOS)
REVISION/ à côté des médias, par exemple ./review/
previews/<prise>.mp4 copies 540p H.264 pour la page
posters/<beat>-<i>.jpg
"<Titre> - prise review.html"
"<Titre> - stringout des extraits (540p).mp4"
SELECTIONS/ selections.json, selections.csv, selections.edl, selections.mp4
Nommez l'épisode d'après le sujet, par exemple launch-01. Gardez les clés de prise courtes (A, B, C) et mappez-les aux noms de fichiers dans picks.json.
Étapes
- Inventaire.
ffprobechaque prise (durée, taille, fps, rotation). Les vidéos de téléphone sont souvent à débit variable et en portrait. Les aperçus et les rendus normalisent cela. Demandez quels fichiers sont les exports étalonnés à couper, et lesquels sont les originaux de la caméra à ignorer. - Transcrire.
python3 scripts/transcribe.py --out TRAVAIL/tx PRISE.... Utilisez l'interpréteur signalé parcheck_deps.shsi le package Whisper n'est pas sur lepython3par défaut. Si les fichiers sont encore en cours d'export, utilisez--watch DOSSIER --expect Nen arrière-plan : il attend que chaque fichier n'ait plus grossi pendant 30s. Modèle préféré sur Apple Silicon :mlx-community/whisper-large-v3-turbo, horodatage des mots, aveccondition_on_previous_textdésactivé. Définissez--langlorsque la parole n'est pas en anglais. - Ébaucher les sélections.
- Mode (a), prises d'un script : écrivez
TRAVAIL/script.txtavec une ligne ou un point de discussion par ligne (id | nom | textesi vous voulez des identifiants). Exécutezpython3 scripts/segment.py takes --tx TRAVAIL/tx --script TRAVAIL/script.txt --out TRAVAIL/picks.json A=prise-a B=prise-b .... Il trouve chaque tentative de chaque ligne dans chaque prise (correspondance floue par fenêtre de mots, donc les redémarrages apparaissent comme des candidats distincts) et pré-coche la plus fluide. - Mode (b), une seule longue vidéo :
python3 scripts/segment.py single --tx TRAVAIL/tx --out TRAVAIL/picks.json A=longue-prisecoupe aux pauses de 1,2s ou plus et aux fins de phrase, en extraits de 4 à 40s. - Ensuite, lisez vous-même les transcriptions
.txt. Corrigez les points d'entrée/sortie, ajoutezcut: [[a,b]]pour les redémarrages et les défauts, fusionnez ou divisez les beats, et écrivez unwhyréel par candidat (propre, redémarrage, mauvais mot, correspond à l'enregistrement d'écran). Privilégiez la prise qui a été filmée avec l'enregistrement d'écran correspondant. Le score automatique ne départage que les ex æquo.
- Mode (a), prises d'un script : écrivez
- Construire la page.
python3 scripts/build_review.py --work TRAVAIL --media SRC --out REVISION --title "launch-01" --stringout. Les plages sont divisées aux espaces entre mots de plus de 0,6s et resserrées avecsilencedetect -35dB / 0.35s. Ajoutezkeep_pauses: truesur un candidat pour ignorer cela. Indicateurs de marge :--pre 0.15 --tail 0.25 --guard 0.1. Passez--fix chemin/vers/corrections.jsonuniquement lorsque vous avez un véritable dictionnaire de phrases. Ouvrez le HTML dans le navigateur. Les vidéos se chargent au clic, donc la page s'ouvre rapidement. - Facultatif, macOS : regard.
python3 scripts/gaze.py --work TRAVAIL --review REVISION, puis relancez l'étape 4 avec--stringout --gaze-trim. Les images de regard détourné obtiennent une bordure rouge dans le stringout. Couvrez-les plus tard avec des images d'écran et conservez l'audio. - Révision humaine. Dites à l'utilisateur quoi faire : Lire, Utiliser/Ignorer, notes, puis « Sauvegarder les décisions (JSON) ». Cela télécharge
<slug>-decisions.json. « Copier comme texte » est la solution de repli. Les cartes non touchées conservent la suggestion. - Appliquer les notes. Lisez le JSON des décisions. Transformez chaque note en modifications de
picks.json:cut,in/out,audio_only: true,grade: "eq=gamma=1.28:brightness=0.03",optional: true. Faites d'abord une sauvegarde (cp picks.json picks.before-notes.json). Relancez l'étape 4 et résumez chaque note et ce que vous avez fait. - Assembler.
python3 scripts/assemble.py --work TRAVAIL --media SRC --decisions /chemin/vers/<slug>-decisions.json --out SELECTIONS --render. Vous obtenez unselects.mp4en pleine résolution, précis à l'image, unselects.edlCMX3600 (importable dans Premiere, Resolve, Final Cut),selects.csvetselects.jsonavec les plages de regard détourné et les notes. - Vérifier. Écoutez chaque point de montage (pas de première ou dernière syllabe coupée, pas de regard, pas de bruit).
ffprobela durée du rendu par rapport à la somme dansselects.json, et créez une planche contact :ffmpeg -i selects.mp4 -vf "fps=1/6,scale=180:-1,tile=10x3" -frames:v 1 sheet.jpg. Visualisez-la, puis rapportez la durée, ce qui a changé et ce qui nécessite encore l'utilisateur.
Format de picks.json
{"episode":"launch-01","mode":"takes","takes":{"A":"prise-a","B":"prise-b"},
"beats":[{"id":"01a","name":"Accroche","script":"...","cands":[
{"take":"B","in":0.82,"out":21.2,"pick":true,"why":"Propre, correspond à l'écran.","cut":[[51.4,53.82]],
"note":"","audio_only":false,"grade":null,"optional":false,"signals":{"dur":20.1,"wpm":162,"fillers":0,"repeats":0}}]}]}
Conseils
- Vérifiez ponctuellement tout timing de mot avec le JSON de transcription. Un dump de
mot@début-finautour d'une note est le moyen le plus rapide de placer une coupe. - Si ffmpeg n'a pas
drawtext, marquez les images avecdrawboxouhue, pas de texte. - Gros rendus : vérifiez d'abord l'espace disque libre. Les prises 4K s'accumulent vite.