Short editorial (Fringe Lines)
El estilo está modelado a partir de los shorts de Greg Isenberg. Aplica lo siguiente a cada short:
- Nunca mantengas un primer plano de alguien hablando durante más de ~6 s.
- Un cambio gráfico o de diseño aterriza cada 3–5 s.
- Los subtítulos aparecen palabra por palabra, con algunas palabras clave en cursiva naranja.
- Los gráficos siguen lo que se está diciendo, de modo que un gráfico aterriza en la palabra que ilustra.
0. Requisitos previos (por máquina)
pipeline/setup.shinstala el entorno virtual~/.shorts-skilly los módulos de node de Remotion en~/.cache/fringe-lines-video.- Las transcripciones de los episodios deben existir:
work/<ep>/words-quinn.jsonywords-doom.json(depipeline/transcribe_verbatim.py). - Código fuente de Remotion:
pipeline/remotion/src/ShortV2.tsx(diseño) yGraphics.tsx(tipos de gráfico).
1. Elegir el momento (30–50 s)
- Busca en los archivos de palabras un fragmento autónomo que tenga:
- una frase de apertura contundente (afirmación, número o confesión);
- una idea;
- un remate o golpe de efecto cerca del final.
- Buenas señales:
- números concretos (porcentajes, cantidades en dólares, número de personas);
- empresas o productos nombrados;
- una opinión controvertida;
- un experimento personal ("Dejé que Codex…").
- Evita clips que dependan de contexto anterior ("como dije", "esa cosa").
- Se pueden unir varios
--range. Corta al final de las oraciones y comprueba que la costura no repite palabras.
2. Cortarlo
Añade una línea a work/<ep>/shorts.sh y ejecútala:
b --name short-NN --range START:END [--range ...] --replace "27=>27%" --replace "claude=>Claude"
build_short.pyhace lo siguiente:- elimina muletillas, tartamudeos y pausas largas;
- selecciona la cámara activa;
- escribe
work/<ep>/short-NN/clip.mp4yprops.json; - renderiza el short plano v1.
--replacecorrige el texto de los subtítulos. Un lado derecho vacío oculta esa palabra.- Corrige siempre: números ("27"→"27%"), nombres de producto (Claude, Codex, Descript, GTM, SQL) y errores de transcripción de Whisper.
- Para obtener los tiempos exactos de salida y escribir la especificación, imprímelos:
python3 -c "import json;p=json.load(open('work/<ep>/short-NN/props.json'));print(' '.join(f\"{w['text']}@{w['startMs']/1000:.1f}\" for w in p['words']))"
3. Escribir la especificación de estilo: work/<ep>/short-NN/style.json
{
"hook": {"text": "Microsoft quiere que el *27%* de su plantilla renuncie", "end": 2.8},
"outro": {"text": "Crecer *sin* crecer en *plantilla*", "hold": 2.0},
"emphasis": ["microsoft", "27%", "renuncie"],
"scenes": [
{"at": 0.0, "mode": "full"},
{"at": 3.0, "mode": "graphic", "graphic": {"type": "stat", "kicker": "Oferta de compra de Microsoft", "value": 27, "suffix": "%", "label": "de empleados a los que se ofreció un pago para *irse*"}},
{"at": 6.2, "mode": "card"}
]
}
Los tiempos están en segundos dentro del clip cortado, tomados de los tiempos de las palabras del paso 2.
Reglas que mantienen la coherencia:
- Estructura:
- La escena 0 siempre es
full, con unhookde 4–8 palabras que termina en ~2.5–3 s. - Expresa la afirmación; no resumas el clip.
- La escena 0 siempre es
- Ritmo:
- Alterna modos como
full→graphic→card→graphic→card… con 3–6 gráficos en un short de 40 s. - Vuelve a usar
fullpara una reacción o risa contundente en la segunda mitad.
- Alterna modos como
- Tiempos:
- Inicia cada gráfico 0.1–0.3 s antes de la palabra que ilustra, y mantenlo visible 2.5–5 s.
- Dos gráficos pueden sucederse directamente, p.ej., una tarjeta de $20 y luego una de $100.
- Énfasis: elige 10–18 palabras clave: números, nombres y las palabras del remate. La coincidencia distingue mayúsculas de minúsculas e ignora la puntuación.
- Acentos: en cualquier campo de texto,
*palabra*se renderiza en cursiva naranja. Usa una o dos por cadena. - Outro: una tarjeta final de 2 s con una línea corta que replantee la conclusión, o una pregunta al espectador.
- Honestidad:
- Los números en pantalla deben coincidir con lo dicho en el programa.
- Los gráficos son esquemáticos: usa
linescon formas, nunca ejes o valores inventados. - Atenúa con "aproximadamente" o "~" cuando el hablante lo haga.
Tipos de gráfico (Graphics.tsx):
| tipo | campos | uso para |
|---|---|---|
stat | kicker, prefix, value (número, cuenta ascendente), decimals, suffix, label | un número destacado |
people | kicker, value (cadena), label, filled (0–1) | número de personas / proporción de personas |
lines | kicker, series: [{label, shape: up|flat|down}], caption | tendencia frente a tendencia |
quote | text, by? | el remate, dicho en pantalla |
headline | source, title, highlight | noticias, anuncios, un "veredicto" |
list | title, items[] | pasos, productos, lo que salió mal |
Si se necesita un nuevo tipo de gráfico, agrégalo a Graphics.tsx y a su tipo unión. Mantén el estilo de tarjeta: tarjeta blanca o de tinta, radio de 36px, entrada elástica y una animación que se ejecute en su marco local f.
4. Renderizar
~/.shorts-skill/bin/python pipeline/style_short.py --ep <ep> --name short-NN --spec work/<ep>/short-NN/style.json
- El seguimiento facial (
pipeline/face_track.py, YuNet) se calcula una vez y se guarda en caché enshort-NN/faces.json. Mantiene el PiP redondo y la tarjeta centrados en la cara; borra el archivo si el clip se vuelve a cortar. - Los efectos de sonido se sintetizan: un whoosh en cada cambio de escena y un pop cuando aterriza un gráfico. Se mezclan a
--sfx-db -20. - Sonoridad: −14 LUFS.
- Salida:
out/shorts/<ep>-short-NN-v2.mp4.
5. QA (siempre, antes de informar)
Extrae fotogramas y míralos:
for t in 1.5 5 10 15 20 25 30 35 40; do ffmpeg -v error -y -ss $t -i out/shorts/<ep>-short-NN-v2.mp4 -frames:v 1 -vf scale=270:-1 /tmp/q_$t.png; done
Comprueba cada uno de los siguientes puntos:
- Gancho: legible y que no cubra la cara.
- Gráficos: no se superponen con el bloque de subtítulos, que se sitúa en y≈1340–1600. Ningún texto se desborda de una tarjeta. Los valores de estadísticas largos como "+$500K" se reducen automáticamente.
- PiP: la cara está centrada en el círculo.
- Subtítulos: sin
*sueltos; las palabras clave se renderizan en naranja. - Sonoridad:
ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:"marca aproximadamente −14.
Informa al usuario:
- De qué trata el short y su duración.
- Cualquier número que deba verificar.
- Si queda algún lenguaje explícito.