Video Editor Full — Habilidad de postproducción de video full-stack
Integra 6 potentes capacidades en una habilidad unificada de postproducción de video. Desde la grabación de pantalla hasta la publicación del producto final, todo impulsado por IA.
Matriz de capacidades
| Módulo | Herramienta | Propósito | Dependencia |
|---|---|---|---|
| Transcripción | Whisper (base/small/medium) | Voz → subtítulos SRT | Python + openai-whisper |
| Eliminación de silencios | auto-editor | Jump cuts automáticos de pausas | Python + auto-editor |
| Edición precisa | ffmpeg filter_complex | Lupa PIP, títulos de capítulo, aceleración, resaltado drawbox | ffmpeg 7.0+ |
| Subtítulos | filtro subtitles de ffmpeg | Incrustación SRT (compatible con Microsoft YaHei) | ffmpeg + fuentes |
| Animación | Remotion | Cabeceras, transiciones, visualización de datos, gráficos dinámicos | Node.js 18+ + Remotion |
| Video de marca | HyperFrames | HTML/CSS → video, avatar digital | Node.js + clave API de HeyGen |
Resumen del flujo de trabajo
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Video original │────▶│ Análisis y │────▶│ Planificación │
└─────────────┘ └──────────────┘ └─────────────────┘
│
┌──────────────────────────────┼──────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ auto-editor │ │ ffmpeg edición │ │ Remotion │
│ Elim. silencio│ │ PIP+título+vel. │ │ Cabeceras │
└──────┬───────┘ └────────┬────────┘ └──────┬───────┘
│ │ │
└─────────────────────────────┼───────────────────┘
▼
┌─────────────────┐
│ Incrustación │
│ subtítulos y │
│ exportación │
└─────────────────┘
Requisitos previos
# Obligatorio
pip install openai-whisper auto-editor
# ffmpeg debe estar en PATH (se recomienda 7.0+)
ffmpeg -version
# Opcional: Remotion (animaciones de cabecera/cierre)
npx create-video@latest --blank
# Opcional: HyperFrames (videos de marca)
# Requiere clave API de HeyGen, ver templates/hyperframes-config.example.json
Explicación detallada de módulos
Módulo 1: Análisis y transcripción
Paso 1: Metadatos del video
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Prestar atención a: resolución, framerate, duración, codec, bitrate.
Paso 2: Extraer fotogramas clave (cada 5 segundos)
mkdir -p frames
ffmpeg -i input.mp4 -vf "fps=1/5" -q:v 2 frames/frame_%03d.jpg
Utilizar análisis visual para determinar áreas clave de la interfaz, límites de capítulos y objetivo de la lupa.
Paso 3: Transcripción con Whisper
import whisper
model = whisper.load_model("base") # Para chino, base es suficiente; medium es más preciso pero más lento
result = model.transcribe("audio.wav", language="zh")
Tras generar el SRT, es necesario corregir manualmente:
- Nombres propios (nombres de productos, términos técnicos)
- Alineación de la línea de tiempo (especialmente en la segunda mitad, donde puede desviarse)
- Errores de homófonos
Módulo 2: Eliminación de silencios con auto-editor
# Uso básico: eliminar todas las pausas
auto-editor input.mp4 --margin 0.2s --output no_silence.mp4
# Modo conservador: solo eliminar pausas de más de 1 segundo
auto-editor input.mp4 --min-clip-length 1s --margin 0.3s --output no_silence.mp4
# Exportar línea de tiempo (sin renderizar directamente, para uso posterior en ffmpeg)
auto-editor input.mp4 --export timeline:api
Nota: Después de eliminar silencios con auto-editor, la línea de tiempo cambia. Los subtítulos deben generarse o realinearse después de la eliminación de silencios.
Orden recomendado: Video original → auto-editor → Transcripción/alineación de subtítulos → Edición precisa con ffmpeg
Módulo 3: Edición precisa con ffmpeg (núcleo)
3.1 Lupa PIP (picture-in-picture)
# Clave: usar force_original_aspect_ratio en el área crop para evitar estiramientos
PIP_W, PIP_H = 300, 188 # Dimensiones de la ventana PIP
# Fragmento de filter_complex:
# crop → scale (mantener relación de aspecto) → pad (rellenar con negro) → drawbox (borde amarillo)
f"[pip{i}]crop={cw}:{ch}:{cx}:{cy},"
f"scale={PIP_W}:{PIP_H}:force_original_aspect_ratio=decrease,"
f"pad={PIP_W}:{PIP_H}:(ow-iw)/2:(oh-ih)/2:color=0x1a1a2e,"
f"drawbox=x=0:y=0:w={PIP_W}:h={PIP_H}:color=yellow:t=2"
f"[pip{i}s]"
3.2 Títulos de capítulo (fade in/out con drawtext)
# Mostrar título en el punto de cambio de capítulo, con fade
f"drawtext=text='{title}':"
f"fontfile='C\:/Windows/Fonts/msyh.ttc':"
f"fontsize=28:fontcolor=white:borderw=3:[email protected]:"
f"x=(w-text_w)/2:y=30:"
f"alpha='if(lt(t,{start}),0,if(lt(t,{start}+0.4),(t-{start})/0.4,"
f"if(lt(t,{end}-0.4),1,if(lt(t,{end}),({end}-t)/0.4,0))))':"
f"enable='between(t,{fade_in},{fade_out})'"
3.3 Aceleración
# Acelerar video
f"[vout]setpts=PTS/{SPEED}[vfinal]"
# Acelerar audio (rango de atempo 0.5-2.0; para más, se necesita en cadena)
f"[0:a]atempo={SPEED}[afinal]"
3.4 Sincronización de la línea de tiempo de subtítulos
Tras la aceleración, los códigos de tiempo de los subtítulos deben ajustarse:
nuevo_inicio = original_inicio / SPEED
nuevo_fin = original_fin / SPEED
3.5 Plantilla de construcción completa
Ver scripts/build_template.py
Módulo 4: Fragmentos de animación con Remotion
Adecuado para generar cabeceras, créditos, transiciones animadas y visualizaciones de datos.
# Inicializar proyecto Remotion
npx create-video@latest my-intro --blank
# Escribir animación en src/Composition.tsx
# Renderizar a MP4
npx remotion render src/index.ts MyComp out/intro.mp4
Los fragmentos generados se concatena al video principal con ffmpeg:
# Lista de concat
echo "file 'intro.mp4'" > list.txt
echo "file 'main.mp4'" >> list.txt
echo "file 'outro.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy final.mp4
Instalación de habilidad Remotion Agent:
# Habilidad oficial (recomendado)
git clone https://github.com/remotion-dev/skills.git ~/.claude/skills/remotion
Módulo 5: Videos de marca con HyperFrames
Renderiza HTML/CSS/JS en fotogramas de video, ideal para promoción de marca, sitios web a video.
# Instalación
npm install @anthropic-ai/hyperframes
# Uso básico: HTML → MP4
npx hyperframes render --input composition.html --output brand.mp4
Se requiere clave API de HeyGen para usar la función de avatar digital.
La plantilla de configuración se encuentra en templates/hyperframes-config.example.json.
Módulo 6: Exportación final
Incrustación de subtítulos (último paso)
ffmpeg -y -i video_no_sub.mp4 \
-vf "subtitles='srt_path':force_style='FontSize=13,FontName=Microsoft YaHei,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,Shadow=1,MarginV=22,Bold=1'" \
-c:v libx264 -preset slow -crf 17 \
-c:a copy -pix_fmt yuv420p -movflags +faststart \
output.mp4
Exportación para múltiples plataformas
| Plataforma | Resolución | Relación de aspecto | Límite de duración |
|---|---|---|---|
| YouTube | 1920x1080 | 16:9 | Sin límite |
| WeChat Video | 1080x1920 | 9:16 | 60s (recomendado) |
| Xiaohongshu | 1080x1350 | 4:5 | 5 min |
| Twitter/X | 1280x720 | 16:9 | 2:20 |
| 1920x1080 | 16:9 | 10 min |
# Ejemplo de recorte vertical (16:9 → 9:16)
ffmpeg -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" -crf 18 vertical.mp4
Pautas de calidad
- CRF 17 + preset slow — Calidad estándar para videos tutoriales
- yuv420p — Compatible con todos los reproductores
- faststart — Reproducción web instantánea
- lanczos — Algoritmo de escalado preferido
- No más de 2 codificaciones — Evitar pérdida generacional
- Subtítulos al final — Asegurar la alineación de la línea de tiempo
Errores comunes
- En Windows, las rutas en el filtro subtitles de ffmpeg necesitan
/y los:deben escparse con\: - Whisper en Windows debe usar rutas de Windows (no se puede usar
/tmp/) - El rango de
atempoes 0.5-2.0; para más, se necesita en cadena:atempo=2.0,atempo=1.5= 3x - Si la proporción del área crop de PIP y la ventana objetivo no coinciden, se produce estiramiento; es obligatorio usar
force_original_aspect_ratio - Después de cambiar la línea de tiempo con auto-editor, los subtítulos anteriores quedan invalidados
- Si filter_complex es demasiado largo para pasarlo por línea de comandos, escribir en un archivo con
-filter_complex_script
Estructura de archivos
video-editor-skill-pack/
├── SKILL.md # Este archivo
├── scripts/
│ ├── build_template.py # Plantilla de construcción de edición ffmpeg
│ ├── transcribe.py # Script de transcripción Whisper
│ ├── adjust_srt_speed.py # Ajuste de velocidad de línea de tiempo SRT
│ └── analyze_frames.py # Extracción y análisis de fotogramas clave
├── templates/
│ ├── hyperframes-config.example.json
│ └── remotion-intro/ # Plantilla de cabecera Remotion (pendiente de completar)
└── examples/
└── tutorial-video-workflow.md # Ejemplo de flujo de trabajo completo para video tutorial