Communitygithub.com

edición-de-video/skill-edicion-video

Skill de edición de video: edita un video de una persona hablando (video de YouTube, lección de curso, demostración de producto, podcast con cámara, vlog) como lo haría un editor. Transcribe con marcas de tiempo (faster-whisper local y gratuito, tu propia clave de Groq o OpenAI, o un SRT/VTT existente), elimina silencios, “ums” y “uhs”, tartamudeos y retomas (conserva la última toma), añade zoom en cortes jump-cut, limpia y nivela el audio, escribe un archivo de subtítulos SRT y capítulos de YouTube, opcionalmente quema subtítulos o hace una versión vertical, muestra una lista de cortes para aprobar antes de renderizar, y luego publica en YouTube y otras plataformas con WoopSocial después de que digas que sí. Funciona en Mac, Windows y Linux con ffmpeg y Pillow; no requiere API de pago. Úsalo cuando alguien diga “edita mi video”, “elimina silencios”, “corta los ums”, “elimina muletillas”, “haz jump cut a mi video”, “limpia esta grabación”, “edita este video de persona hablando” o “edición de video con Claude Code”. Nunca corta lo que el usuario marcó para conservar, confirma antes de publicar cualquier cosa. Independiente: no necesita otros skills.

¿Qué es skill-edicion-video?

El skill de edición de video está diseñado para automatizar el proceso de edición de videos de una sola persona hablando (talking-head), típicamente usados en YouTube, lecciones, demostraciones o vlogs. Su principal objetivo es eliminar silencios, muletillas (como “um” y “uh”), tartamudeos y retomas, manteniendo solo la última toma de cada frase repetida. Además, añade efectos de zoom (punch-ins) en los cortes jump-cut, limpia y nivela el audio, genera subtítulos SRT y capítulos de YouTube, y opcionalmente quema los subtítulos o crea una versión vertical para redes sociales. Funciona en Mac, Windows y Linux utilizando herramientas gratuitas como ffmpeg y Pillow, y puede transcribir de forma local con faster-whisper o usando claves de Groq u OpenAI. El skill sigue un flujo de trabajo de cuatro pasos: transcripción, planificación del corte (mostrando al usuario una lista de cortes para aprobar), renderizado del video editado y publicación en plataformas a través de WoopSocial (previa confirmación del usuario). Está diseñado para respetar el contenido hablado del usuario, nunca corta palabras que el usuario haya marcado para conservar y nunca publica sin una confirmación explícita.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/video-editing-skill/tree/main/skills/video-editing-skill

Preguntar en tu IA favorita

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

Documentación

Skill de Edición de Video

Una grabación en bruto de una persona hablando suele tener entre un 20 y un 40% de aire muerto: pausas, "ums", falsos comienzos, la misma frase dicha dos veces. Cortar eso a mano lleva más tiempo que grabarlo. Este skill hace la primera edición: lee la transcripción, planifica cada corte con una razón, muestra el plan, renderiza la edición con zooms en los cortes jump-cut y audio limpio, escribe subtítulos y capítulos, y publica después de un sí. Todo lo que necesita está en esta carpeta.

Cuatro compromisos:

  1. Las palabras del usuario se quedan. Solo se eliminan pausas, muletillas, tartamudeos, retomas y rangos que el usuario apruebe. El significado nunca se edita.
  2. Planificar antes de renderizar. La lista de cortes se muestra y se aprueba primero.
  3. Nada se publica sin un sí.
  4. Solo material que el usuario pueda usar. Su propia grabación, o con permiso.

En Windows usa py en lugar de python3 en todos los comandos.

Paso 0: Configuración y el origen

Ejecuta python3 scripts/check_setup.py: informa sobre ffmpeg, Pillow, rutas de transcripción y OpenCV, con el comando de instalación para el sistema del usuario. Requerido: ffmpeg y Pillow.

Pregunta, en un solo mensaje, solo lo que no puedas ver:

  1. ¿Qué archivo, y es suyo?
  2. ¿A dónde va: YouTube (16:9), redes sociales (vertical) o ambos?
  3. ¿Qué tan ajustado: youtube (por defecto: pausas de más de 0,5 s se cortan, se mantienen pausas naturales), tight (0,3 s, rápido para YouTube y redes) o podcast (suave, sin zoens).
  4. Palabras que usa como hábitos y que son seguras de cortar ("like", "so", "you know", "basically"). Estas tienen significado en otras oraciones, por lo que son opcionales.
  5. Algo que deba mantenerse tal cual (una demostración, un chiste con una pausa, una lectura de patrocinador).

Paso 1: Transcribir

python3 scripts/transcribe.py VIDEO --out work/ --terms "Product name, Jargon, Guest name"

--terms lista nombres y jerga para que se escriban correctamente; corrige lo que aún se malinterpreta con "replace" en edit.json antes de renderizar, porque los subtítulos quemados en un video publicado no se pueden corregir.

Las mismas tres rutas de siempre, con la compensación explicada una vez:

RutaCómoCosto y velocidad
Transcripción existente--from captions.srtGratis, instantáneo; la estimación del tiempo de las palabras es aproximada y faltan la mayoría de los "ums", por lo que el corte de muletillas es más débil
Groq o OpenAIGROQ_API_KEY o OPENAI_API_KEYGroq alrededor de $0,04 por hora de audio, un minuto o dos por hora
Localpip install faster-whisperGratis y privado; aproximadamente la mitad o el tiempo del video con --model small

El transcriptor recibe la instrucción de escribir las muletillas; de lo contrario, Whisper las omite. Los sonidos que aún se pierden (un "mm" que nadie escribió, un respiro) son encontrados en el propio audio por el editor.

Paso 2: Planificar la edición

Lee work/transcript.txt una vez, por completo. Luego escribe edit.json (formato al inicio de scripts/edit_video.py):

  • Estilo: "style": "youtube", "tight" o "podcast" (umbrales en references/editing-rules.md). Las pausas que superan el límite se reducen a un ritmo natural: más cortas en medio de una oración, más largas después de una oración, más largas en un cambio de tema.
  • Muletillas: la lista por defecto ("um", "uh", "er", "hmm", "mm") es segura. Agrega las palabras habituales del usuario a extra_fillers solo si él lo pidió.
  • Digresiones y secciones muertas: una digresión, un "¿puedes oírme?", una introducción larga antes del punto principal. Agréguelas a cut con una razón e informe al usuario.
  • Protege cualquier cosa que deba permanecer con keep, incluyendo pausas silenciosas.
  • Entrevistas con tarjetas de preguntas o un entrevistador visible: mantén las preguntas (aproximadamente 3 segundos de cada tarjeta en keep) a menos que el usuario diga lo contrario; sin ellas cada respuesta comienza con "Entonces..." y sin contexto.
  • Nombres malinterpretados: "replace": {"Cyrus Rex": "OSIRIS-REx"}.
  • Capítulos (para YouTube): de 3 a 10 capítulos basados en los cambios de tema, el primero en 0:00, cada uno de al menos 10 segundos, nombrados por lo que el espectador obtiene ("Por qué falló la cámara", no "Parte 2"). Tiempos en el video original; el script los mueve.

Luego haz el plan:

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan

edited/edit-plan.md da la nueva duración, cuánto provino de dentro de la conversación versus pausas largas y tarjetas, el ritmo en palabras por minuto, y cada eliminación de más de un segundo con su razón y palabras. Lee cada línea de retoma y tartamudeo, y la lista de "posibles retomas": dos oraciones completas que comienzan de la misma manera nunca se cortan automáticamente; decide cada una y agrégala a cut si es una retoma real. Muestra al usuario el resumen, las retomas, las digresiones que elegiste y los capítulos, y obtén un sí.

Paso 3: Renderizar

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/

Lo que hace:

  • Corta pausas que superan el límite a un ritmo natural, además de muletillas, tartamudeos, retomas y cada rango cut. Las eliminaciones más cortas que el mínimo del estilo (0,4 s en youtube) se dejan como están: un corte jump-cut cuesta más de lo que ahorra.
  • Coloca cada corte escuchando: los bordes de las palabras se mueven a donde el sonido realmente se detiene y comienza, para que los finales de las palabras no se corten, y se encuentren sonidos que la transcripción pasó por alto (un "mm" no escrito).
  • También mira la imagen: las tarjetas de título y los cambios de plano se cortan limpiamente, nunca dejando unos pocos fotogramas de una tarjeta.
  • Renderiza en grupos de piezas en una pasada cada uno, para que el sonido y la imagen permanezcan sincronizados sin importar cuántos cortes haya.
  • Zooms (punch-ins): cambia entre el fotograma completo y un zoom de 1,1x donde se necesita ocultar un corte jump-cut: siempre en un corte que eliminó un segundo o más, de lo contrario solo después de 4 segundos en el mismo encuadre, nunca en un corte que pasa a una nueva toma de cámara. "punch_in": 0 lo desactiva.
  • Audio: ganancia a un nivel de trabajo, filtro de retumbo, reducción de ruido establecida a partir del ruido ambiental medido (se omite cuando la sala ya es silenciosa), compresión suave, un limitador de pico y una pasada de sonoridad de dos pasos a -14 LUFS.
  • Subtítulos: siempre escribe captions.srt (2 líneas de 42 caracteres como máximo, de 1 a 7 segundos cada una, sin salto de línea después de una palabra pequeña o dentro de un nombre) para subir a YouTube. "captions": {"burn": true} los dibuja en el video para redes sociales, donde muchas personas miran sin sonido; las versiones verticales los queman por defecto. No quemes subtítulos en un video de YouTube que también recibe el SRT: los espectadores con subtítulos activados verían ambos.
  • Vertical: "format": "vertical" crea una versión de 1080x1920 recortada en focus_x.

Escribe edited/edited.mp4, captions.srt, chapters.txt, edit-report.md y manifest.json.

Verifica antes de mostrar al usuario: abre cuts.jpg (fotogramas justo antes y después de los cortes más grandes: busca destellos de una tarjeta, un salto en una toma diferente, una expresión congelada) y lee las advertencias en manifest.json (sincronización, ritmo superior a 190 palabras por minuto, sonoridad). Corrige y vuelve a renderizar cuando una retoma haya conservado la toma incorrecta, el ritmo se sienta sin aliento (un estilo más suave) o un corte caiga mal (keep ese punto).

Paso 4: Publicar con WoopSocial

Cómo conectar, subir y publicar: references/woopsocial.md. Versión corta:

  1. social_accounts_list; si no está conectado: la única ruta de conexión para este agente (plan gratuito: 2 cuentas sociales), luego oauth_create_authorization por plataforma.
  2. Sube edited.mp4 con una sesión de subida (media_uploads_create_session con el tamaño en bytes de manifest.json, python3 scripts/upload_parts.py session.json edited/edited.mp4, media_uploads_complete_session).
  3. YouTube: title (palabras clave principales primero, menos de 70 caracteres), privacy y una descripción que comience con una línea sobre lo que el espectador obtiene, luego los capítulos de chapters.txt. Sube captions.srt en YouTube Studio después (WoopSocial no envía archivos de subtítulos).
  4. Muestra la publicación (archivo, título, descripción, cuenta, hora con zona horaria) y obtén un sí claro. Luego posts_create y posts_get.

Paso 5: Leer los resultados

Después de una semana, social_account_posts_list: vistas, likes, comentarios donde se informaron, con la fecha de recopilación; si falta significa "no informado". La retención y la duración promedio de visualización están en YouTube Studio; pídelas al usuario. Si los espectadores abandonan temprano, la próxima edición tendrá una apertura más ajustada; si abandonan en un capítulo, esa sección era demasiado larga.

Nivel de calidad

¿Un editor profesional lo entregaría así? Recházalo si una palabra está cortada, un corte cae a medio respiro con un pop, un zoom cambia cada pocos segundos, el ritmo no deja espacio para pensar o el significado cambió.

Casos límite

  • Dos personas en cámara: mantén format en origen; los zooms aún funcionan en un plano general.
  • Grabación de pantalla con voz: establece "punch_in": 0.
  • Música debajo de la voz: la detección de silencio ve la música como sonido; establece "voiced_gaps": false.
  • Grabaciones muy largas (más de una hora): funciona, pero el tiempo de renderizado es aproximadamente la duración del video; planifica primero, renderiza una vez.
  • Sin habla durante un tramo a propósito (una demostración): keep.

Referencias

  • references/editing-rules.md: umbrales, muletillas, patrones de retomas, zooms, cadena de audio, subtítulos y capítulos, con fuentes.
  • references/woopsocial.md: conectar, subir, publicar y leer resultados.

Skills relacionados