Communitygithub.com

Moosphan/cinematic-shortfilm

Spécifications complètes et flux de travail pour la production de courts métrages scientifiques à sensation cinématographique (70–300 secondes). Inclut le script/la narration (voix masculine Qwen3-TTS VoiceDesign), le système visuel Remotion + Canvas particules/SVG, la composition musicale par code, le mixage externe et la livraison en 4K, la vérification des faits et le package de publication. Chargez-le lorsque vous réalisez des films comme *Sapiens : un autoportrait de l'univers* ou *Vers le bas : DESCENTE*, ou lorsque vous souhaitez réutiliser leurs spécifications.

Qu'est-ce que cinematic-shortfilm ?

Ce skill fournit un standard de production unifié pour la création de courts métrages scientifiques à sensation cinématographique, d'une durée de 70 à 300 secondes. Il couvre l'ensemble du pipeline, de l'écriture du scénario à la livraison finale, en passant par la génération de la narration, la composition musicale par code et le rendu visuel. Basé sur les retours d'expérience de productions réelles comme *Sapiens : un autoportrait de l'univers* et *Vers le bas : DESCENTE*, il intègre des règles strictes pour éviter les erreurs courantes (par exemple, synchronisation audio/visuelle, rendu inefficace, artefacts visuels). Le skill utilise Qwen3-TTS pour la narration masculine, Remotion pour le rendu vidéo avec des particules Canvas 2D et des SVG pour les visuels, et numpy pour la composition musicale. Il exige une vérification rigoureuse des faits et propose un processus de rendu optimisé (rendu muet + mixage externe) pour éviter les problèmes de performance. Il est idéal pour les développeurs et les créateurs de contenu souhaitant produire des vidéos éducatives de haute qualité avec un workflow reproductible et fiable.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moosphan/hulk-skills/tree/HEAD/skills/cinematic-shortfilm

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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)

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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).
  7. Avant le rendu, npx tsc --noEmit doit être propre ; sinon, le rendu produira de mauvaises images et il faudra recommencer.
  8. 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, champs id / 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, avec mx.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 augmenter repetition_penalty à 1.12).
  • Vérification secondaire par ASR : passer par mlx_whisper pour 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é → ffmpeg trim/concat en trois segments → -c:v copy pour 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 ; AbsoluteFill avec 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 + Grain statique (0,04, doit être animate={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 filmHaut éclairéMilieuBasCouleur d'accentuation
Univers / TempsFond #050506Crème #F3E7D0—Ambre #E8B06A
Océan / ProfondeurSurface #1E7C93#07232E#01050ACyan #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). Utiliser expand(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 feTurbulence superposé 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, ÉTIQUETTE 8,5 px / VALEUR 13–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 ligne Nombre / 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èneCause racineCorrection
Rendu bloqué au prétraitement audioLong fichier WAV + <Audio>Rendu muet, mux externe
Texte illisible sur les particulesPas de fond + opacité 0,4–0,5Fond + 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'imageexpand() multiplier par 2,4–3,2
Scintillement des lignes fines/des montagnesFilm grain dynamiqueGrain animate={false}
Baleine/poisson « nage à l'envers »Tête et queue inversées, œil à la queueReconstruire en vue latérale : tête en +x
Montagne ressemblant à un graphiqueChemin L ... Z avec une ligne de base horizontaleBord inférieur en dehors de l'image
Transition coupant le regardBalayage / longue dissolutionFondu enchaîné court ou mouvement continu
Musique « boum boum »Basses continues de 27 à 80 HzPasse-haut 85–100 Hz, supprimer le drone grave
Désynchronisation audio/visuelleRythme visuel ne correspondant pas au contenu de la narrationCourbe profondeur/temps réorganisée selon le contenu de la narration
Piste TTS de 600 sBoucle de dégradation du modèleSupprimer et regénérer, repetition_penalty 1.12
Reprise 4K trop lenteRendu complet du filmNe 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).

Skills associés