Communitygithub.com

Editor de Video

Se utiliza cuando el usuario desea editar, crear, recortar, comprimir, fusionar, redimensionar, cambiar velocidad, estabilizar, agregar transiciones, transcribir, añadir subtítulos, crear tarjetas de título, tercios inferiores, tarjetas finales, hacer avances, extraer miniaturas, crear GIFs, agregar marcas de agua, manipular audio o procesar archivos de video de cualquier manera.

¿Qué es Editor de Video?

El Editor de Video es una habilidad integral de IA diseñada para flujos de trabajo de video asistidos por tres motores principales: ffmpeg para edición de metraje existente (recorte, compresión, fusión, redimensionado, cambios de velocidad, estabilización, marcas de agua, audio, GIFs, miniaturas, transiciones y subtítulos), Remotion para creación de nuevo contenido de video (tarjetas de título animadas, tercios inferiores, tarjetas finales y avances) y Whisper para transcripción y generación de subtítulos. Es útil para desarrolladores, creadores de contenido y especialistas en marketing de video que necesitan procesar archivos de video programáticamente sin editores manuales tradicionales. La habilidad admite aceleración de hardware en Apple Silicon (h264_videotoolbox / hevc_videotoolbox), integración con temas desde ~/design-assets/color-palettes/ y ajustes preestablecidos de plataforma para YouTube, Instagram, TikTok y Twitter. Utiliza espacios de trabajo en caché para Remotion para evitar instalaciones repetitivas de npm, e incluye una tabla de intenciones de usuario detallada que desencadena acciones automáticamente basadas en palabras clave como recortar, comprimir, fusionar, estabilizar y más. El flujo de trabajo verifica herramientas disponibles (ffmpeg, Node.js, Whisper, soporte vidstab), clasifica solicitudes de los usuarios (edición vs. creación vs. canalización combinada) y proporciona pasos claros de ejecución y verificación para cada comando, junto con una convención de nomenclatura de archivos de salida y manejo de colisiones.

Compatible con~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/ElSalvatore-sys/video-editor-plugin/tree/main/skills/video-editor

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Editor de Video?

Resumen

Flujo de trabajo de video asistido por IA impulsado por tres motores:

  • ffmpeg -- edita metraje existente (recortar, comprimir, fusionar, redimensionar, velocidad, estabilizar, marca de agua, audio, GIF, miniatura, transiciones, subtítulos)
  • Remotion -- crea nuevo contenido de video (tarjetas de título, tercios inferiores, tarjetas finales, avances, superposiciones animadas)
  • Whisper -- transcripción y generación de subtítulos

Capacidades adicionales:

  • Aceleración de hardware en Apple Silicon mediante h264_videotoolbox / hevc_videotoolbox
  • Integración de temas con recursos de diseño desde ~/design-assets/color-palettes/
  • Ajustes preestablecidos de plataforma para YouTube, Instagram, TikTok, Twitter y más
  • Espacio de trabajo en caché para Remotion para evitar npm install repetitivos

Cuándo Usar

Activar en CUALQUIERA de estas intenciones del usuario:

CategoríaPalabras Clave
Edición básicarecortar, cortar, segmento, acortar, dividir
Compresióncomprimir, reducir tamaño, encoger, más pequeño, optimizar
Fusiónfusionar, combinar, concatenar, unir, coser
Redimensionadoredimensionar, escalar, recortar, rellenar, relación de aspecto, vertical, horizontal, cuadrado
Velocidadacelerar, ralentizar, cámara lenta, time-lapse, avance rápido, invertir
Estabilizaciónestabilizar, movido, suavizar, arreglar vibración
Transicionesfundido, encadenado, disolver, barrido, transición
Subtítulossubtítulo, SRT, transcripción, voz a texto
Tarjetas de títulotarjeta de título, intro, apertura, texto animado
Tercios inferiorestercio inferior, etiqueta de nombre, chyron, barra de nombre
Tarjetas finalestarjeta final, outro, pantalla final, cierre
Avancesavance, tráiler, promoción, reel de destacados, montaje
Miniaturasminiatura, póster, extraer fotograma, captura de pantalla
GIFsGIF, imagen animada, bucle, meme
Marcas de aguamarca de agua, superposición de logo, branding
Audioaudio, volumen, normalizar, sonoridad, silenciar, fundido de entrada, fundido de salida, mezclar, extraer audio
Informacióninfo, detalles, duración, resolución, códec, tasa de bits, metadatos
Canalizacióncanalización, lote, flujo de trabajo, multi-paso
PlataformaYouTube, Instagram, TikTok, Twitter, Reels, Shorts

Referencia de Comandos

Comandos de Edición (ffmpeg)

ComandoDescripciónEjemplo
/trimCortar un segmento de un video"recortar video.mp4 de 0:30 a 1:45"
/compressReducir tamaño de archivo con control de calidad"comprimir a menos de 10MB"
/mergeCombinar varios clips en uno"fusionar clip1.mp4 y clip2.mp4 con fundido"
/resizeCambiar dimensiones, relación de aspecto, recortar o rellenar"redimensionar a 1080x1080 cuadrado"
/speedAcelerar, ralentizar o invertir"2x velocidad" o "0.5x cámara lenta"
/stabilizeEliminar vibración de cámara (vidstab dos pasadas)"estabilizar movido.mp4"
/watermarkSuperponer imagen o texto en video"agregar logo.png abajo a la derecha"
/audioVolumen, normalizar, mezclar, fundido, extraer, silenciar"normalizar audio a -14 LUFS"
/thumbnailExtraer fotograma como imagen"miniatura en 0:15"
/gifCrear GIF animado desde un segmento de video"GIF de 0:05 a 0:10 a 320px"
/extractExtraer pistas de audio o subtítulos"extraer audio como mp3"
/infoMostrar metadatos de video y detalles de flujo"información video.mp4"

Comandos de Creación (Remotion)

ComandoDescripciónEjemplo
/title-cardTarjeta de título animada con soporte de temas"tarjeta de título: Próximamente, tema wad, animación zoom"
/lower-thirdSuperposición animada de nombre/título"tercio inferior: Juan Pérez, CEO, estilo moderno"
/end-cardOutro animado con CTA y redes sociales"tarjeta final: ¡Suscríbete!, @usuario, tema ea"
/teaserMontaje de múltiples clips con transiciones y títulos"avance desde la carpeta clips/, 30 segundos"

Comandos de Transcripción (Whisper)

ComandoDescripciónEjemplo
/transcribeGenerar SRT/VTT desde voz"transcribir entrevista.mp4"
/add-captionsTranscribir + grabar subtítulos en video"agregar subtítulos a charla.mp4"

Orquestación

ComandoDescripciónEjemplo
/pipelineCadena de procesamiento multi-paso"recortar, agregar tarjeta de título, comprimir para Instagram"

Flujo de Trabajo

Paso 1: Verificar Herramientas Disponibles

which ffmpeg ffprobe && echo "ffmpeg: ok"
node --version && echo "node: ok"
which whisper && echo "whisper: ok" || echo "whisper: no instalado (los subtítulos necesitan .srt manual)"
ffmpeg -encoders 2>/dev/null | grep videotoolbox && echo "hw accel: ok" || echo "hw accel: no disponible"
ffmpeg -filters 2>/dev/null | grep vidstab && echo "vidstab: ok" || echo "vidstab: no disponible (brew install ffmpeg with --with-libvidstab)"

Si ffmpeg falta: "Instalar con brew install ffmpeg" Si Node.js falta: "Instalar desde https://nodejs.org o brew install node" Si vidstab falta: "Reinstalar ffmpeg con vidstab: brew install ffmpeg --with-libvidstab"

Paso 2: Clasificar Solicitud

Intención del UsuarioMotorRuta
Editar metraje existenteffmpegPaso 3a
Crear nuevo contenido de videoRemotionPaso 3b
Manipulación de audioFiltros de audio de ffmpegPaso 3a
Información/inspecciónffprobePaso 3a
Canalización combinadaorquestar ambosPaso 3c
Publicación en plataformaajustes preestablecidos de redimensionar + comprimirPaso 3a
TranscripciónWhisper + ffmpegPaso 3a

Paso 3a: Ruta ffmpeg

  1. Preguntar por el archivo(s) de entrada si no se proporcionó
  2. Inspeccionar con ffprobe:
    ffprobe -v quiet -print_format json -show_format -show_streams "<archivo>"
    
  3. Detección de aceleración de hardware (macOS Apple Silicon):
    # Verificar soporte de VideoToolbox
    ffmpeg -encoders 2>/dev/null | grep h264_videotoolbox
    # Si está disponible, preferir: -c:v h264_videotoolbox -b:v 5M
    # Alternativa: -c:v libx264 -crf 23 -preset medium
    
  4. Manejo de colisiones de salida:
    # Antes de escribir la salida, verificar si el archivo existe
    # Si "video_recortado.mp4" existe, usar "video_recortado_2.mp4", "video_recortado_3.mp4", etc.
    SALIDA="video_recortado.mp4"
    CONTADOR=2
    while [ -f "$SALIDA" ]; do
      SALIDA="video_recortado_${CONTADOR}.mp4"
      CONTADOR=$((CONTADOR + 1))
    done
    
  5. Construir el comando ffmpeg
  6. Explicar cada flag en lenguaje sencillo
  7. Indicar el nombre del archivo de salida (nunca sobrescribir el origen)
  8. Preguntar: "¿Ejecuto esto?"
  9. Ejecutar, luego verificar:
    # Verificar código de salida
    if [ $? -eq 0 ]; then
      echo "Éxito"
      ffprobe -v quiet -print_format json -show_format "$SALIDA" | grep -E '"duration"|"size"'
    else
      echo "Error — revisar la salida de ffmpeg arriba"
    fi
    
  10. Reportar ruta de salida + tamaño de archivo + duración

Convenciones de nomenclatura de salida:

ComandoPatrón de Salida
Recortarrecortado_<nombrearchivo>
Comprimircomprimido_<nombrearchivo>
Fusionarsalida_fusionada.<ext>
Redimensionarredimensionado_<nombrearchivo>
Velocidadvelocidad_<factor>x_<nombrearchivo>
Estabilizarestabilizado_<nombrearchivo>
Marca de aguamarcado_<nombrearchivo>
Subtítulossubtitulado_<nombrearchivo>
Extraer audio<nombre>.mp3
Audio modificadoaudio_<nombrearchivo>
Extraer subtítulos<nombre>.srt
Miniaturathumb_<nombre>_<códigohorario>.jpg
GIF<nombre>.gif

Paso 3b: Ruta Remotion

  1. Verificar que Node.js esté instalado
  2. Espacio de trabajo en caché -- reutilizar espacio de trabajo existente:
    ESPACIO_TRABAJO="/tmp/espacio-trabajo-remotion"
    if [ -d "$ESPACIO_TRABAJO/node_modules" ]; then
      echo "Reutilizando espacio de trabajo de Remotion en caché"
    else
      echo "Creando espacio de trabajo de Remotion (primera ejecución)..."
      mkdir -p "$ESPACIO_TRABAJO"
      cp -r ~/plantillas-proyecto/remotion-video/* "$ESPACIO_TRABAJO/"
      cd "$ESPACIO_TRABAJO" && npm install
    fi
    
  3. Carga de temas desde ~/design-assets/color-palettes/:
    # Si el usuario especifica un tema (wad, bloghead, ea), cargar colores desde JSON
    # Pasar como inputProps a la composición de Remotion
    
  4. Escribir o actualizar los archivos de composición fuente según sea necesario
  5. Composiciones disponibles:
    • TitleCard -- título animado con múltiples ajustes preestablecidos de animación
    • LowerThird -- superposición de nombre/título con barra de acento
    • EndCard -- outro con CTA, redes sociales, logo
    • Teaser -- montaje de múltiples clips con TransitionSeries
  6. Renderizar:
    cd "$ESPACIO_TRABAJO"
    npx remotion render src/index.ts <IDComposición> /ruta/a/salida.mp4 \
      --props='{"text":"Título","bg":"#09090B","fg":"#FFFFFF","accent":"#7C3AED"}'
    
  7. Copiar salida al directorio de trabajo del usuario
  8. Reportar ruta de salida + duración

Paso 3c: Canalización Combinada

Para solicitudes de múltiples pasos (ej., "hacer un avance con tarjeta de título, clips y tarjeta final"):

  1. Planificar -- describir cada paso al usuario antes de ejecutar
  2. Crear -- generar cualquier contenido de Remotion primero (tarjetas de título, tarjetas finales)
  3. Procesar -- recortar/redimensionar clips fuente con ffmpeg
  4. Ensamblar -- fusionar todas las piezas con transiciones usando ffmpeg
  5. Finalizar -- comprimir para la plataforma objetivo si se especifica
  6. Confirmar entre fases principales (creación vs. edición vs. ensamblaje)

Referencia Rápida de ffmpeg

Recortar (sin pérdida)

ffmpeg -ss <inicio> -to <final> -i entrada.mp4 -c copy entrada_recortada.mp4

Comprimir -- web (CRF 23)

ffmpeg -i entrada.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k entrada_comprimida.mp4

Comprimir -- acelerado por hardware (macOS)

ffmpeg -i entrada.mp4 -c:v h264_videotoolbox -b:v 5M -c:a aac -b:a 128k entrada_comprimida.mp4

Fusionar con transición de fundido

# Dos clips con fundido cruzado de 1s en desplazamiento = duración_del_clip1 - 1
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0][1]xfade=transition=fade:duration=1:offset=<desplazamiento>,format=yuv420p[v];[0:a][1:a]acrossfade=d=1[a]" \
  -map "[v]" -map "[a]" salida_fusionada.mp4

Redimensionar / Escalar

# Escalar a dimensiones específicas (mantener relación de aspecto con -1)
ffmpeg -i entrada.mp4 -vf "scale=1920:1080" entrada_redimensionada.mp4
ffmpeg -i entrada.mp4 -vf "scale=1080:-1" entrada_redimensionada.mp4

# Recortar a cuadrado centrado
ffmpeg -i entrada.mp4 -vf "crop=min(iw\,ih):min(iw\,ih)" entrada_recortada.mp4

# Rellenar a relación de aspecto objetivo (letterbox/pillarbox)
ffmpeg -i entrada.mp4 -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" entrada_rellenada.mp4

Cambio de Velocidad

# 2x velocidad (video + audio)
ffmpeg -i entrada.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" velocidad_2x_entrada.mp4

# 0.5x cámara lenta
ffmpeg -i entrada.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" velocidad_0.5x_entrada.mp4

# 4x velocidad (encadenar atempo para >2x audio: el máximo de atempo es 2.0)
ffmpeg -i entrada.mp4 -vf "setpts=0.25*PTS" -af "atempo=2.0,atempo=2.0" velocidad_4x_entrada.mp4

# Invertir
ffmpeg -i entrada.mp4 -vf "reverse" -af "areverse" entrada_invertida.mp4

Superposición de Marca de Agua

# Abajo a la derecha con relleno
ffmpeg -i entrada.mp4 -i logo.png \
  -filter_complex "overlay=W-w-20:H-h-20" entrada_marcada.mp4

# Arriba a la izquierda
ffmpeg -i entrada.mp4 -i logo.png \
  -filter_complex "overlay=20:20" entrada_marcada.mp4

# Centro con opacidad
ffmpeg -i entrada.mp4 -i logo.png \
  -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.3[wm];[0][wm]overlay=(W-w)/2:(H-h)/2" entrada_marcada.mp4

# Marca de agua de texto
ffmpeg -i entrada.mp4 \
  -vf "drawtext=text='Mi Marca':fontsize=24:[email protected]:x=W-tw-20:y=H-th-20" entrada_marcada.mp4

Estabilización de Video (vidstab dos pasadas)

# Pasada 1: Analizar movimiento
ffmpeg -i movido.mp4 -vf vidstabdetect=shakiness=10:accuracy=15 -f null -

# Pasada 2: Aplicar estabilización
ffmpeg -i movido.mp4 -vf vidstabtransform=smoothing=30:input=transforms.trf estabilizado_movido.mp4

Manipulación de Audio

# Ajustar volumen
ffmpeg -i entrada.mp4 -af "volume=1.5" audio_entrada.mp4

# Normalizar sonoridad (estándar de radiodifusión -14 LUFS)
ffmpeg -i entrada.mp4 -af "loudnorm=I=-14:TP=-1:LRA=11" audio_entrada.mp4

# Mezclar dos pistas de audio
ffmpeg -i video.mp4 -i musica.mp3 \
  -filter_complex "[0:a]volume=1.0[a1];[1:a]volume=0.3[a2];[a1][a2]amix=inputs=2:duration=first[a]" \
  -map 0:v -map "[a]" audio_entrada.mp4

# Fundido de entrada/salida de audio (3s fundido de entrada, 3s fundido de salida)
ffmpeg -i entrada.mp4 -af "afade=t=in:ss=0:d=3,afade=t=out:st=<final-3>:d=3" audio_entrada.mp4

# Silenciar audio
ffmpeg -i entrada.mp4 -an entrada_silenciada.mp4

# Reemplazar audio
ffmpeg -i entrada.mp4 -i nueva_pista.mp3 -c:v copy -map 0:v:0 -map 1:a:0 entrada_audio_reemplazado.mp4

Creación de GIF (dos pasadas de paleta para calidad)

# Pasada 1: Generar paleta
ffmpeg -ss <inicio> -t <duración> -i entrada.mp4 \
  -vf "fps=15,scale=320:-1:flags=lanczos,palettegen" paleta.png

# Pasada 2: Crear GIF usando paleta
ffmpeg -ss <inicio> -t <duración> -i entrada.mp4 -i paleta.png \
  -filter_complex "[0:v]fps=15,scale=320:-1:flags=lanczos[v];[v][1:v]paletteuse" salida.gif

# Limpiar
rm paleta.png

Extracción de Miniatura

# Un solo fotograma en marca de tiempo
ffmpeg -ss <marca_tiempo> -i entrada.mp4 -frames:v 1 -q:v 2 thumb_entrada_<marca_tiempo>.jpg

# Cuadrícula de miniaturas (4x4)
ffmpeg -i entrada.mp4 -vf "fps=1/<intervalo>,scale=320:-1,tile=4x4" cuadricula_thumb_entrada.jpg

Grabar subtítulos .srt

ffmpeg -i entrada.mp4 -vf "subtitles=subtitulos.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF'" entrada_subtitulada.mp4

Extraer audio

ffmpeg -i entrada.mp4 -vn -c:a libmp3lame -q:a 2 salida.mp3

Información de video

ffprobe -v quiet -print_format json -show_format -show_streams entrada.mp4

Referencia Rápida de Remotion

Configuración de Espacio de Trabajo en Caché

ESPACIO_TRABAJO="/tmp/espacio-trabajo-remotion"
if [ ! -d "$ESPACIO_TRABAJO/node_modules" ]; then
  cp -r ~/plantillas-proyecto/remotion-video/* "$ESPACIO_TRABAJO/"
  cd "$ESPACIO_TRABAJO" && npm install
fi

Composición de TitleCard

import { AbsoluteFill, spring, useCurrentFrame, useVideoConfig, Img } from 'remotion';

type Animation = 'fade' | 'slide-up' | 'slide-down' | 'zoom' | 'typewriter' | 'glitch' | 'blur-in';

export const TitleCard: React.FC<{
  text: string;
  subtitle?: string;
  bg?: string;
  fg?: string;
  accent?: string;
  animation?: Animation;
  logo?: string;
}> = ({ text, subtitle, bg = '#09090B', fg = '#FFFFFF', accent = '#7C3AED', animation = 'fade', logo }) => {
  const frame = useCurrent

…

[truncado para traducción]

Skills relacionados