Court métrage scientifique cinématographique · Norme de production unifiée v1
Source : Sapiens : un autoportrait de l'univers (4K / 4'58" / 14 scènes) et Vers le bas : DESCENTE (2K / 1'30" / 90 secondes, profil vertical). Les spécifications, le flux de travail, le style et les erreurs rencontrées pour les deux films se trouvent ici. Pour un nouveau film, lisez d'abord les sections 0 et 1, puis la section relative au sujet traité.
0. Règles absolues (toute violation entraîne une reprise)
- D'abord le son, ensuite l'image. Générer la narration phrase par phrase → mesurer la durée → en déduire le nombre d'images par scène. Ne jamais organiser les images avant d'avoir la piste audio.
- La narration et les données doivent être cohérentes : les chiffres, unités et ordres de grandeur apparaissant dans le film doivent être vérifiés un par un dans une table de faits ; si la narration dit 98, l'écran ne doit pas afficher 90. Une erreur d'unité (par exemple, pression atm ↔ t/m²) est dix fois plus grave qu'une erreur de couleur.
- Un plan, une information : chaque scène ne doit contenir qu'un seul sujet principal et au maximum 3 valeurs chiffrées ; les informations supplémentaires sont confiées à la narration.
- Le texte doit toujours être lisible : tout texte doit avoir un fond ou un assombrissement ; les noms de couche ≥ 30px, les valeurs ≥ 13px ; l'opacité des petits caractères ≥ 0,6.
- Pas de coupe franche : les transitions entre les scènes se font par fondu enchaîné / respiration sur fond noir / mouvement continu ; un seul langage de transition doit être utilisé dans un même film.
- Rendu muet : dans Remotion, désactiver
<Audio>avec{false && ...}; l'audio est intégré en externe par ffmpeg (un long fichier WAV peut bloquer le rendu lors du prétraitement audio). - Avant le rendu,
npx tsc --noEmitdoit être propre ; sinon, le rendu produira de mauvaises images et il faudra recommencer. - Trois vérifications avant la livraison : vérification de la durée totale, vérification de la première et de la dernière image, vérification image par image des transitions clés (3 à 6 images par transition).
1. Pipeline standard (dans l'ordre, ne pas sauter d'étape)
script.json ──► Génération VO ──► Post-traitement VO ──► Tableau des durées ──► Timeline
│
└──► Musique (numpy) ──► Mixage ──► master.m4a
Images (Remotion) ──► Rendu muet ──► ffmpeg mux ──► Livraison
1.1 Scénario
- Un fichier par vidéo :
script.json, champsid / act / text / caption. - Narration en chinois ≈ 4,2 caractères/seconde ; une vidéo de 60 secondes ≈ 200–230 caractères, 90 secondes ≈ 300–340 caractères.
- Écrire les nombres en toutes lettres en chinois (par exemple, « trois mille six cent quatre-vingt-huit ») pour éviter les erreurs de lecture du TTS ; utiliser ensuite des chiffres arabes à l'écran.
1.2 Narration (Qwen3-TTS VoiceDesign, voix masculine documentaire)
INSTRUCT = ("A deep, calm, authoritative male documentary narrator. Slow, deliberate, cinematic. "
"Low register, warm, intimate, restrained emotion, close-mic. Consistent, even pacing. Mandarin Chinese.")
generate_audio(text=..., model=model, lang_code="zh", instruct=INSTRUCT,
temperature=0.65, top_p=0.9, repetition_penalty=1.05,
output_path="vo_raw", file_prefix=id)
- Modèle
mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16, avecmx.random.seed(11)fixe. - Vérifier la durée immédiatement après chaque génération avec
ffprobe: si une piste dure plus de 30 secondes ou présente des répétitions, le TTS s'est dégradé ; la supprimer et la regénérer (changer la seed ou augmenterrepetition_penaltyà 1.12). - Vérification secondaire par ASR : passer par
mlx_whisperpour vérifier les chiffres et les caractères rares (par exemple, hydrogène → qīng, silicium → guī, fer → tǐ).
1.3 Post-traitement audio (chaîne unifiée, pas de variation par piste)
highpass=f=70,
asetrate=24000*0.912341, aresample=48000, atempo=1.096081, atempo=1.055,
equalizer=f=190:t=q:w=1.0:g=1.4, equalizer=f=3300:t=q:w=1.4:g=-1.8, equalizer=f=7200:t=q:w=1.8:g=-1.0,
acompressor=threshold=0.14:ratio=2.2:attack=10:release=200,
loudnorm=I=-20:TP=-3:LRA=7
Ensuite, couper le silence au début et à la fin en fonction de l'enveloppe d'énergie de 20 ms, réduire les pauses de plus de 0,34 s à 0,34 s, et appliquer des fondus d'entrée/sortie de 12 ms/50 ms aux deux extrémités.
1.4 Timeline
images = round(secondes * 24); décalage de la narration = début de la scène + lead (généralement 18–24 images).- Chaque scène :
lead + vo + tail, tail de 16 à 90 images (prévoir suffisamment pour la fin). - Générer
timeline.ts(généré automatiquement, ne pas modifier manuellement), champs{ id, from, dur, voAt, voDur }.
1.5 Musique (synthèse par code, numpy)
- Avoir une structure, ne pas remplir en continu : écrire des « événements » en fonction du code temporel, sans utiliser une seule piste du début à la fin.
- Harmonie : changer toutes les 12 à 18 secondes, avec un fondu enchaîné à la jonction ; les basses ne doivent être que des notes soutenues au-dessus de 55 Hz.
- Éviter les grondements graves : le public les décrira comme « boum boum » ou « trop fort ». Couper les basses à 85–100 Hz, utiliser des ondes sinusoïdales pures pour les notes longues, sans ajouter d'harmoniques d'octave.
- Priorité au calme : le niveau de la musique doit être d'environ −20 à −27 dB par rapport à la narration ; réduire encore de 40 à 70 % lorsque la narration apparaît (ducking side-chain).
- Loudness final du mix : documentaire −18 à −24 LUFS (pas −14, qui est pour la musique pop diffusée en streaming).
- Ajouter des « effets sonores » (bruit d'immersion, sonar, grincement métallique) uniquement si le client le demande explicitement ; cela a déjà été refusé une fois, donc par défaut, ne pas en inclure.
1.6 Images (Remotion)
Voir section 2.
1.7 Rendu et intégration
npx tsc --noEmit
npx remotion render Film4K out/silent.mp4 --codec=h264 --crf=18 --concurrency=7
ffmpeg -i out/silent.mp4 -i public/audio/master.m4a \
-map 0:v -map 1:a -c:v copy -c:a aac -b:a 320k -shortest -movflags +faststart out/final.mp4
- 4K = mise en page 1920×1080 +
transform: scale(2); 2K =scale(2560/1920). Une seule mise en page. - Reprise locale : ne rendre que l'intervalle d'images modifié →
ffmpegtrim/concaten trois segments →-c:v copypour ne changer que la piste audio ; si l'image doit être changée, réencoder et concaténer les trois segments (environ 5 à 10 minutes).
2. Système visuel
2.1 Fond
- Format 1920×1080, 24 ips ;
AbsoluteFillavec un fond quasi noir (#01050A/#010407), jamais de noir pur #000. - Structure en trois couches : dégradé de fond → lumière volumétrique/particules → couche d'information (texte, échelle de profondeur, valeurs).
- Fin unifiée :
Vignette+Grainstatique (0,04, doit êtreanimate={false}; un grain dynamique fera scintiller les lignes fines).
2.2 Polices
- Titres/poèmes :
Songti SC(serif), espacement des caractères 0,4–0,6 em, grande taille (90–250 px). - Données/valeurs :
SF Mono, 8–14 px, espacement des caractères 0,16–0,36 em. - Légendes :
PingFang SC, 14–19 px, opacité 0,55–0,7.
2.3 Palette de couleurs (les « couleurs du monde » de chaque film)
| Type de film | Haut éclairé | Milieu | Bas | Couleur d'accentuation |
|---|---|---|---|---|
| Univers / Temps | Fond #050506 | Crème #F3E7D0 | — | Ambre #E8B06A |
| Océan / Profondeur | Surface #1E7C93 | #07232E | #01050A | Cyan #4FE0C0 |
Règle : une seule couleur d'accentuation par film ; exceptions pour les lumières bioluminescentes ou les sources hydrothermales avec au maximum deux couleurs, chacune liée à une grandeur physique spécifique.
2.4 Moteur de particules (Canvas 2D)
- Aléatoire déterministe (hash) ; le même résultat pour la même image ; types de nuages :
ball / filament / disk / globe-surface / sphere-shell / figure / city / helix / neuron / glyph / single / text / timeline. - Deux passages de dessin : d'abord un grand rayon avec une faible opacité pour créer une lueur, puis un petit rayon avec une opacité élevée pour le noyau ;
globalCompositeOperation = 'lighter'. - Les bords du nuage de points doivent être en dehors du cadre :
makeCloud('text', n)crée une boîte 3×1.2, dont la projection donne des bords rectangulaires (le bogue le plus souvent signalé par le public). Utiliserexpand(cloud, kx, ky, kz)avec un facteur de 2,4 à 3,2.
2.5 Créatures et terrains (SVG)
- Toujours en vue latérale, la tête dans le sens du mouvement ; au moins 4 détails anatomiques (yeux, nageoires, ligne de la bouche, plis de la gorge, balanes, etc.), sinon l'image ressemble à une texture.
- Silhouette + lumière de bord (opacité 0,2–0,35) ; ne pas utiliser
feTurbulencesuperposé au corps (cela donnerait un aspect granitique). - Terrain : lignes brisées + lignes de strates + débris + sédiments, pas de triangle ; ne pas tracer de ligne de base pour les montagnes (cela ressemblerait à un graphique).
- L'apparition des créatures est liée à la « profondeur/temps » ; ne pas en montrer plus de trois à la fois.
2.6 Couche d'information (HUD)
- Plaque nominative de couche : fond dégradé foncé (0,72→0) + barre verticale de couleur d'accentuation de 2 px à gauche + texte chinois blanc pur de 30–35 px.
- Valeurs : 2 à 3 groupes par couche,
ÉTIQUETTE8,5 px /VALEUR13–14,5 px. - Échelle graduée : traits de graduation + valeur actuelle en gras ; la valeur actuelle doit être calculée en temps réel, non codée en dur (sinon elle contredira l'aiguille).
- Tous les nombres doivent être accompagnés d'unités ; les unités sont séparées par un espace (par exemple,
1 093 atm).
2.7 Transitions
- Mouvement continu privilégié (plan-séquence) : la profondeur/temps est une grandeur continue, le contenu entre et sort du champ avec elle.
- Fondu enchaîné court comme second choix (4 à 6 images, seule la nouvelle image apparaît, l'ancienne reste visible et est recouverte) — la luminosité ne s'effondre pas, les HUD ne se chevauchent pas.
- Interdites : balayage en diagonale, longue dissolution croisée, poussée verticale (elle laisse voir un bord sombre), coupe franche après un noir (sauf motivation physique comme une « entrée dans l'eau »).
3. Faits et données
- Créer un fichier
facts.md: chaque ligneNombre / Unité / Source / Comment l'écrire dans le film. - Trois erreurs les plus fréquentes : ① conversion d'unités (1 atm ≈ 10,3 t/m² ≈ 1,03 kgf/cm²) ; ② confusion entre « moyenne » et « extrême » (moyenne 3 688 m vs maximum 10 935 m) ; ③ simplification abusive (90 vs 98 éléments).
- Utiliser une seule version précise pour tout le film ; la narration et l'image doivent provenir de la même source.
4. Liste de livraison
deliverables/
Titre du film-4K-Version avec narration.mp4 # Version principale
Titre du film-4K-Version instrumentale.mp4 # Si nécessaire
Affiche-4K.png / Aperçu-4K.png # Compositing d'images clés
Couverture/ # 1920 PNG + 4K PNG + 1146×717 JPG
Note du réalisateur.md # Structure, son, historique des modifications
Texte de publication-Bilibili.md # Titre/description/tags/commentaire épinglé/suggestion de couverture
Table des faits.md
Le package de livraison doit obligatoirement inclure : une déclaration de génération par IA, une répartition du travail (ce que le modèle a fait, ce que l'humain a fait), et une version des « chiffres faciles à mal lire » dans un commentaire épinglé.
5. Registre des problèmes rencontrés (classés par fréquence)
| Phénomène | Cause racine | Correction |
|---|---|---|
| Rendu bloqué au prétraitement audio | Long fichier WAV + <Audio> | Rendu muet, mux externe |
| Texte illisible sur les particules | Pas de fond + opacité 0,4–0,5 | Fond + blanc pur + taille de police augmentée |
| Apparition de rectangles réguliers (question la plus fréquente du public) | Bord de la boîte du nuage de points dans l'image | expand() multiplier par 2,4–3,2 |
| Scintillement des lignes fines/des montagnes | Film grain dynamique | Grain animate={false} |
| Baleine/poisson « nage à l'envers » | Tête et queue inversées, œil à la queue | Reconstruire en vue latérale : tête en +x |
| Montagne ressemblant à un graphique | Chemin L ... Z avec une ligne de base horizontale | Bord inférieur en dehors de l'image |
| Transition coupant le regard | Balayage / longue dissolution | Fondu enchaîné court ou mouvement continu |
| Musique « boum boum » | Basses continues de 27 à 80 Hz | Passe-haut 85–100 Hz, supprimer le drone grave |
| Désynchronisation audio/visuelle | Rythme visuel ne correspondant pas au contenu de la narration | Courbe profondeur/temps réorganisée selon le contenu de la narration |
| Piste TTS de 600 s | Boucle de dégradation du modèle | Supprimer et regénérer, repetition_penalty 1.12 |
| Reprise 4K trop lente | Rendu complet du film | Ne rendre que l'intervalle modifié + concat |
6. Emplacement des deux films de référence
- Sapiens : un autoportrait de l'univers :
~/dsh-video-remotion/film/src/scenes/*, 14 scènes, 4K, 4'58". - Vers le bas : DESCENTE :
~/dsh-video-remotion/film/src/ocean/*, 6 bandes de profondeur, 2K, 1'30" ; narration et musique dans~/dsh-video-remotion/ocean/. - Ils partagent
src/engine/particles.tsx(particules),src/engine/atmos.tsx(Vignette/Grain),src/theme.ts(polices/palette/assouplissements).