Cortometraje Científico Cinematográfico · Norma de Producción Unificada v1
Fuente: Breve historia de la humanidad: Autorretrato del cosmos (4K / 4'58" / 14 escenas) y Hacia abajo: DESCENT (2K / 1'30" / perfil vertical de 90 segundos). Las especificaciones, el flujo de trabajo, el estilo y los errores cometidos de ambas obras están recogidos aquí. Para una nueva obra, lee primero las secciones 0 y 1, luego la sección relacionada con el proyecto actual.
0. Reglas de Hierro (infringir cualquiera obliga a rehacer)
- Primero el sonido, luego la imagen. Genera la narración frase por frase → mide su duración → deduce los fotogramas de cada escena a partir de esa duración. Nunca montes la imagen antes de tener el audio.
- La narración y los datos deben coincidir: los números, unidades y órdenes de magnitud que aparecen en la obra deben verificarse uno a uno contra la tabla de hechos; si la narración dice 98, la imagen no puede mostrar 90. Un error de unidad (p. ej., atmósferas ↔ t/m²) es diez veces más grave que un error de color.
- Un plano, una idea: cada escena permite solo un tema principal + un máximo de 3 lecturas numéricas; la información adicional debe ir en la narración.
- El texto siempre debe ser legible: cualquier texto debe tener un fondo o un oscurecimiento debajo; los nombres de capa ≥ 30 px, las lecturas ≥ 13 px; la opacidad del texto pequeño no debe ser inferior a 0.6.
- No se permiten cortes bruscos: las transiciones entre escenas deben ser fundidos encadenados, respiros de negro o movimiento continuo; una misma obra solo puede usar un lenguaje de transición.
- Renderizado silencioso: todos los
<Audio>en Remotion deben desactivarse con{false && ...}. El audio se incorpora externamente con ffmpeg (un WAV largo hará que el renderizado se atasque en el preprocesado de audio). - Antes de renderizar, debe ejecutarse
npx tsc --noEmitsin errores, de lo contrario se renderizarán muchos fotogramas defectuosos y habrá que repetir. - Tres comprobaciones antes de entregar: verificación de la duración total, verificación del primer y último fotograma, y verificación de las transiciones clave fotograma a fotograma (3–6 fotogramas cada una).
1. Flujo de Trabajo Estándar (en orden, sin saltos)
script.json ──► Generación de VO ──► Post-procesado de VO ──► Tabla de duraciones ──► Línea de tiempo
│
└──► Música (numpy) ──► Mezcla ──► master.m4a
Imagen (Remotion) ──► Renderizado silencioso ──► ffmpeg mux ──► Entrega
1.1 Guión
- Cada obra tiene un archivo:
script.json, con los camposid / act / text / caption. - Narración en chino ≈ 4.2 caracteres/segundo; una obra de 60 segundos ≈ 200–230 caracteres, 90 segundos ≈ 300–340 caracteres.
- Los números deben escribirse con su lectura china (p. ej., «三千六百八十八»), de lo contrario el TTS los leerá mal; en la imagen se usarán números arábigos.
1.2 Narración (Qwen3-TTS VoiceDesign, voz masculina documental)
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)
- Modelo
mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16, semilla fijamx.random.seed(11). - Tras cada generación, verifica la duración inmediatamente con
ffprobe: si alguna pista supera los 30 segundos o presenta repeticiones completas, el TTS se ha degradado; bórrala y regenérala (cambia la semilla o aumentarepetition_penaltya 1.12). - Revisión con ASR: pasa
mlx_whisperpara verificar números y caracteres poco comunes (p. ej., hidrógeno→qīng, silicio→guī, hierro→tǐ).
1.3 Post-procesado de Audio (cadena unificada, no se permiten diferencias entre pistas)
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
Luego, recorta el silencio inicial y final según la envolvente de energía de 20 ms, comprime las pausas superiores a 0.34 s a 0.34 s, y aplica fundidos de entrada/salida de 12 ms / 50 ms.
1.4 Línea de Tiempo
frames = round(seconds * 24); el desfase de la narración = inicio de la escena + lead (generalmente 18–24 fotogramas).- Cada escena:
lead + vo + tail, con tail de 16–90 fotogramas (suficiente para el cierre). - Genera
timeline.ts(generado automáticamente, no lo modifiques a mano), con los campos{ id, from, dur, voAt, voDur }.
1.5 Música (sintetizada puramente con código, numpy)
- Debe tener estructura, no debe ser un relleno continuo: escribe «eventos» basados en el código de tiempo, no una única pista de fondo.
- Armonía: cambia cada 12–18 segundos, con fundidos cruzados en las transiciones; el bajo solo debe mantener tonos sostenidos por encima de 55 Hz.
- Sin zumbidos graves: el público lo describirá como «ruido sordo» o «demasiado molesto». Corta las frecuencias bajas por debajo de 85–100 Hz; usa ondas sinusoidales puras para los tonos largos, sin armónicos de octava.
- Prioriza la sutileza: el nivel de la música debe estar aproximadamente −20 a −27 dB por debajo de la narración; cuando aparezca la narración, reduce la música un 40–70 % (sidechain ducking).
- Volumen final de la mezcla: documental −18 a −24 LUFS (no −14, que es para música pop en streaming).
- El «diseño de sonido» didáctico (chapoteos al entrar al agua, sónar, chirridos metálicos) solo se añade si el cliente lo solicita explícitamente; ha sido rechazado una vez, por defecto no se usa.
1.6 Imagen (Remotion)
Ver sección 2.
1.7 Renderizado y Mezcla
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 = diseño 1920×1080 +
transform: scale(2); 2K =scale(2560/1920). Escribe solo un diseño. - Reparaciones locales: renderiza solo el intervalo de fotogramas modificado →
ffmpegtrim/concatpara unir tres segmentos →-c:v copysolo para cambiar la pista de audio; si hay que cambiar la imagen, recodifica los tres segmentos y únelos (aproximadamente 5–10 minutos).
2. Sistema Visual
2.1 Lienzo
- Lienzo 1920×1080, 24 fps; fondo de
AbsoluteFillcasi negro (#01050A/#010407), nunca negro puro #000. - Estructura de tres capas: degradado de fondo → luz volumétrica / partículas → capa de información (texto, escala de profundidad, lecturas).
- Cierre unificado:
Vignette+Grainestático (0.04, obligatorioanimate={false}; el granulado dinámico hará que las líneas finas parpadeen).
2.2 Fuentes
- Títulos / versos:
Songti SC(serif), interletraje 0.4–0.6 em, tamaño grande (90–250 px). - Datos / lecturas:
SF Mono, 8–14 px, interletraje 0.16–0.36 em. - Explicaciones:
PingFang SC, 14–19 px, opacidad 0.55–0.7.
2.3 Paleta de Colores (el «color del mundo» de cada obra)
| Tipo de obra | Superior brillante | Medio | Inferior | Color de énfasis |
|---|---|---|---|---|
| Espacio / Tiempo | Fondo #050506 | Crema #F3E7D0 | — | Ámbar #E8B06A |
| Océano / Profundidad | Superficie #1E7C93 | #07232E | #01050A | Cian #4FE0C0 |
Regla: una misma obra usa solo un color de énfasis; las excepciones como bioluminiscencia / fuentes hidrotermales permiten un máximo de dos, y cada uno debe estar vinculado a una magnitud física específica.
2.4 Motor de Partículas (Canvas 2D)
- Aleatoriedad determinista (hash), el mismo fotograma siempre da el mismo resultado; tipos de nube:
ball / filament / disk / globe-surface / sphere-shell / figure / city / helix / neuron / glyph / single / text / timeline. - Dos pasadas de dibujo: primero, radio grande y baja opacidad para el resplandor; luego, radio pequeño y alta opacidad para el núcleo;
globalCompositeOperation = 'lighter'. - El límite de la nube de puntos debe estar fuera del cuadro:
makeCloud('text', n)crea una caja de 3×1.2, y al proyectarse aparecerán bordes rectangulares (el error más señalado por el público). Usaexpand(cloud, kx, ky, kz)para escalarlo 2.4–3.2 veces.
2.5 Criaturas y Terreno (SVG)
- Siempre en vista lateral, con la cabeza hacia la dirección del movimiento; al menos 4 detalles anatómicos visibles (ojos, aletas, línea de la boca, pliegues de la garganta, percebes, etc.), de lo contrario parecerá una textura pegada.
- Silueta con luz de borde (opacidad 0.2–0.35); no uses
feTurbulencesuperpuesto al cuerpo (se volverá granítico). - Terreno: polilíneas con múltiples segmentos + líneas de estratos + escombros + sedimentos, sin triángulos; las montañas no deben tener una línea base (se convertirán en un gráfico).
- Las apariciones de criaturas deben estar vinculadas a la «profundidad / tiempo»; no más de tres tipos diferentes al mismo tiempo.
2.6 Capa de Información (HUD)
- Placa identificativa de capa: fondo degradado oscuro (0.72→0) + barra vertical izquierda de 2 px del color de énfasis + texto chino blanco puro de 30–35 px.
- Lecturas: 2–3 grupos por capa,
LABELde 8.5 px /VALUEde 13–14.5 px. - Escala graduada: líneas de graduación + valor actual en negrita; el valor actual debe calcularse en tiempo real, no debe estar fijo (si está fijo, entrará en conflicto con el puntero).
- Todos los números deben llevar unidad; las unidades deben separarse con un espacio (
1,093 atm).
2.7 Transiciones
- Primera opción: movimiento continuo (plano secuencia): la profundidad / el tiempo son magnitudes continuas, y el contenido entra y sale del cuadro con ellas.
- Segunda opción: fundido encadenado corto (4–6 fotogramas, solo el nuevo plano aparece con fundido, el antiguo permanece opaco y es cubierto) — el brillo no se desploma y el HUD no superpone texto.
- Prohibidas: barrido diagonal de luz, disolución cruzada larga, empuje vertical (dejará bordes oscuros), corte brusco tras negro (a menos que tenga una motivación física como «entrar al agua»).
3. Hechos y Datos
- Crea un archivo
facts.md: por cada dato,Número / Unidad / Rango de fuente / Cómo se escribe en la obra. - Los tres errores más comunes: ① Conversión de unidades (1 atm ≈ 10.3 t/m² ≈ 1.03 kgf/cm²); ② Confundir «promedio» con «extremo» (promedio 3,688 m vs. máximo 10,935 m); ③ Simplificaciones engañosas (90 vs. 98 elementos).
- Toda la obra debe usar una única versión de precisión; la narración y la imagen deben tener la misma fuente.
4. Lista de Entregables
deliverables/
NombreObra-4K-ConNarración.mp4 # Versión principal
NombreObra-4K-SoloMúsica.mp4 # Si es necesario
Póster-4K.png / VistaPrevia-4K.png # Composición de fotogramas clave
Portada/ # 1920 PNG + 4K PNG + 1146×717 JPG
DeclaraciónDelDirector.md # Estructura, sonido, registro de cambios
TextoPublicación-Bilibili.md # Título / Descripción / Etiquetas / Comentario fijado / Sugerencias de portada
TablaDeHechos.md
El paquete de publicación debe incluir: declaración de generación por IA, división del trabajo (qué hizo el modelo, qué hizo la persona), y una versión de «números fáciles de confundir» como comentario fijado.
5. Registro de Errores (ordenados por frecuencia de aparición)
| Fenómeno | Causa Raíz | Solución |
|---|---|---|
| Renderizado atascado en preprocesado de audio | WAV largo + <Audio> | Renderizado silencioso, mux externo |
| Texto borroso sobre partículas | Sin fondo + opacidad 0.4–0.5 | Añadir fondo, texto blanco puro, aumentar tamaño |
| Aparecen rectángulos regulares (lo que más preguntan los espectadores) | Bordes de la caja de la nube de puntos entran en el cuadro | expand() para escalar 2.4–3.2× |
| Parpadeo de líneas finas / montañas | Granulado dinámico | Grain animate={false} |
| Ballena / pez «nadando al revés» | Cabeza y cola dibujadas al revés, ojo en la cola | Reconstruir en vista lateral: cabeza en +x |
| Montañas parecen gráficos | Ruta usa L ... Z con línea base horizontal | Hundir el borde inferior fuera del cuadro |
| Transición interrumpe la mirada | Barrido de luz / disolución larga | Fundido encadenado corto o movimiento continuo |
| Música «retumba» | Bajos continuos de 27–80 Hz | Filtro paso alto 85–100 Hz, eliminar sub-drone |
| Desincronización audio-imagen | El ritmo de la imagen no corresponde con el contenido de la narración | Reordenar la curva de profundidad/tiempo según el contenido de la narración |
| Una pista TTS de 600 s | Degradación del modelo en bucle | Eliminar y regenerar, repetition_penalty 1.12 |
| Rehacer 4K demasiado lento | Renderizar toda la obra | Renderizar solo el intervalo de fotogramas modificado + concat |
6. Ubicación de las Dos Obras de Referencia
- Breve historia de la humanidad: Autorretrato del cosmos:
~/dsh-video-remotion/film/src/scenes/*, 14 escenas, 4K, 4'58". - Hacia abajo: DESCENT:
~/dsh-video-remotion/film/src/ocean/*, 6 capas, 2K, 1'30"; narración y música en~/dsh-video-remotion/ocean/. - Ambas comparten
src/engine/particles.tsx(partículas),src/engine/atmos.tsx(Vignette/Grain),src/theme.ts(fuentes / paleta / easing).