Communitygithub.com

jun7799/video-autocut

Automatiza por completo la edición de videos de pantalla grabada y tutoriales (sin depender de Jianying, salida directa con ffmpeg): transcripción con marcas de tiempo a nivel de palabra mediante faster-whisper → corrección de subtítulos con IA → eliminación automática de silencios, tartamudeos, repeticiones y errores → superposición de barras de corrección en secciones con errores → renderizado final en un solo paso.

¿Qué es video-autocut?

Este skill está diseñado para automatizar completamente el flujo de trabajo de edición de videos de pantalla grabada y tutoriales explicativos, desde la transcripción hasta la entrega de un video final listo para publicar, sin necesidad de abrir la aplicación Jianying. Su valor principal radica en el análisis inteligente de la transcripción generada por faster-whisper (con marcas de tiempo a nivel de palabra) para corregir errores de transcripción, identificar y eliminar automáticamente silencios prolongados, tartamudeos, repeticiones y errores al hablar, y añadir barras de corrección visuales en las partes donde el contenido es incorrecto. El skill utiliza ffmpeg para el renderizado directo, produciendo un video con subtítulos quemados (hardcoded) y barras de corrección de color amarillo en la parte superior. Permite iterar rápidamente: cambiar el tamaño de fuente, el texto de las correcciones o los segmentos a eliminar implica solo modificar el archivo de planificación y volver a ejecutar el script de renderizado, con un costo de iteración de 1-2 minutos. Es importante diferenciarlo del skill 'jianying-subtitle-fixer', que modifica proyectos de Jianying para edición manual posterior; este skill, en cambio, genera un video final listo para su distribución directa.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jun7799/video-autocut/tree/HEAD

Preguntar en tu IA favorita

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

Documentación

Edición Automática Completa de Videos Tutoriales (Ruta sin Jianying)

¿Qué Problema Resuelve?

Después de que el usuario graba un video tutorial, esta habilidad automatiza toda la cadena de "transcripción → corrección → eliminación de pausas → eliminación de tartamudeos y repeticiones → corrección de errores → salida de video final". Todo el proceso se realiza sin abrir Jianying, y el producto final es un video listo para publicar (con subtítulos fijos (hardcoded) y barras de corrección amarillas en la parte superior). Para modificar cualquier parámetro (tamaño de fuente, segmentos eliminados, texto), simplemente se edita y se vuelve a ejecutar el script; el costo de iteración es de un minuto.

Límite con jianying-subtitle-fixer: Allí se modifica el borrador de Jianying (el usuario debe exportar manualmente); aquí se utiliza ffmpeg para la salida directa del video final. Si el usuario no menciona Jianying, se usa este skill.

Dependencias del Entorno (Ya Disponibles Localmente)

  • Python: C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe (ya tiene instalado faster-whisper 1.2.1 + torch; el caché del modelo está en ~/.cache/huggingface, con modelo small)
  • ffmpeg: D:\software\ffmpeg\bin\ffmpeg.exe (el script lo detecta automáticamente)

Flujo de Trabajo Estándar (El AI lo Sigue)

Paso 0  ffprobe para obtener duración/resolución del video (para escalado automático del tamaño de fuente posterior)
Paso 1  Transcripción: transcribe.py -> raw.json (marcas de tiempo a nivel de frase y palabra)
Paso 2  Análisis por AI (valor central de este skill, ver más abajo) -> escribir cut_plan.json
Paso 3  Preguntar al usuario mediante AskUserQuestion para que apruebe los elementos de eliminación (preguntar todo de una vez, sin hacerlo poco a poco)
Paso 4  Renderizado: render.py --plan cut_plan.json -> video final
Paso 5  Inspección de calidad por fotogramas clave (extraer un fotograma en cada punto de corrección, leer + verificar visualmente que el texto esté completo y no se desborde)
Paso 6  Entrega: informar qué se eliminó, qué se corrigió y dónde está el archivo

Paso 1 Comando de Transcripción

& "C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe" "<skill>/scripts/transcribe.py" --video "<ruta del video>" --outdir "<directorio de trabajo>" --prompt "Tutorial técnico en chino sobre XXX, YYY y otros temas"

--prompt usa el tema del video + términos técnicos de alta frecuencia (tomados del glosario ~/.claude/skills/jianying-subtitle-fixer/config/terms.json), lo que mejora significativamente la precisión en nombres propios. Directorio de trabajo recomendado: D:\sistema de producción de contenido\edición\workspace\<fecha-job>\.

Paso 2 Análisis por AI (Paso No Sustituible por Humanos, Metodología en references/cut-heuristics.md)

Después de leer todo el raw.json, se producen cuatro cosas:

  1. Corrección de subtítulos fixed: Corregir uno por uno los errores de homófonos y términos mal escuchados. Mantener el lenguaje hablado original, solo corregir errores, no refinar (los subtítulos deben coincidir con el audio; reescribir causaría desajuste audio-visual). Patrones de errores de whisper en references.
  2. Eliminación de contenido content_cuts: Segmentos completos que deben eliminarse (código de tiempo + razón), con tipos y criterios de evaluación en references. Las repeticiones a nivel de palabra (como "publiqué un... publiqué un" dentro de una oración) se localizan con precisión usando las marcas de tiempo de las palabras.
  3. deleted_ids: IDs de las líneas de subtítulos cubiertas por content_cuts (estas líneas no se incluyen en los subtítulos).
  4. Barras de corrección corrections: Párrafos donde se habló incorrectamente, barra amarilla en la parte superior del video. Se escribe en cut_plan.json.

Paso 3 Aprobación del Usuario (Principios)

  • Lo claramente eliminable (tartamudeo repetido, inicio de error, frase abandonada a medio decir): incluirlo directamente en el plan, solo se debe informar al usuario al reportar.
  • Párrafos con contenido incorrecto: preguntar al usuario "Eliminar / Conservar + barra de corrección", para contenido subjetivo se prefiere conservar + corregir.
  • El texto de la barra de corrección y las conclusiones de verificación de hechos (si se necesita verificar en línea, primero buscar con WebSearch el texto original) deben ser revisados por el usuario.
  • Usar AskUserQuestion para preguntar todos los elementos pendientes de aprobación de una sola vez.

Paso 4 Comando de Renderizado

& "C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe" "<skill>/scripts/render.py" --plan "<directorio de trabajo>/cut_plan.json"

Formato de cut_plan.json (los comentarios en el encabezado de render.py tienen una explicación completa):

{
  "video": "C:/video original.mp4",
  "out": "C:/video final.mp4",
  "raw": "raw.json",
  "content_cuts": [[213.45, 230.98, "Error al mencionar experimento"]],
  "deleted_ids": [48, 49, 50],
  "fixed": {"1": "texto corregido"},
  "corrections": [[12.95, 20.14, "Corrección: el nombre correcto es XX"]],
  "silence": {"min_dur": 1.0, "keep": 0.25},
  "style": {"sub_size": 64, "cor_size": 48}
}

Todos los códigos de tiempo deben usar la línea de tiempo del video original (el script reasigna automáticamente a la línea de tiempo recortada). silence/style se pueden omitir. El estilo de subtítulos por defecto es para letra grande en dispositivos móviles (base de 2560 de ancho, 64/48, escalado proporcional automático según la resolución). Si el usuario dice que la letra es pequeña, se ajustan los valores de style y se vuelve a ejecutar.

Paso 5 Inspección de Calidad por Fotogramas

Leer los tiempos reales de las correcciones desde final.ass (líneas Cor), extraer fotogramas según la nueva línea de tiempo:

& "D:\software\ffmpeg\bin\ffmpeg.exe" -y -i "<video final>" -vf "select='eq(n\,<número de fotograma>)',scale=1100:-1" -vsync vfr "<directorio qc>/qc_%d.jpg"

Número de fotograma = segundos × 20fps. Leer fotograma por fotograma + inspección visual: texto completo, no desbordado, sin conflictos con los subtítulos inferiores.

Archivo de Errores (Experiencias, No Repetir)

  1. Fallo silencioso de aselect: En algunos flujos AAC, aselect no corta ningún fotograma y no reporta error → la eliminación de audio debe usar asplit+atrim+concat (ya integrado en render.py, no cambiarlo de vuelta a aselect)
  2. concat no se puede poner después de un select de flujo único como concatenador (error de desajuste en el recuento de pads); select+setpts ya produce una salida continua
  3. La verificación del video final debe usar ffprobe para ambos flujos (video y audio) por separado: la duración del formato puede ser extendida por el flujo más largo, ocultando que "no se cortó nada" (ya se ha visto: renderizado "exitoso" pero el audio se conservó completamente)
  4. Ruta del filtro subtitles: ass y el directorio de trabajo actual (cwd) del renderizado deben usar rutas relativas para evitar problemas de escape en rutas con chino
  5. La eliminación de silencios debe incluir una zona de protección de palabras (strip_guard integrado en render.py): las marcas de tiempo de las palabras de whisper pueden diferir de las de silencedetect; las palabras suaves (como términos técnicos en inglés al inicio de una oración) pueden caer dentro del "silencio". Cortar directamente según el silencio eliminaría media palabra
  6. El script de transcripción maneja la codificación GBK en stderr de ffmpeg (error común en Windows, ignorar los mensajes de este hilo)

Costo de Iteración

Cambiar tamaño de fuente / texto de corrección / agregar o eliminar segmentos eliminados → modificar los campos correspondientes en cut_plan.json y volver a ejecutar render.py, cada iteración toma 1-2 minutos. El video final se sobrescribe, el video original nunca se modifica.

Skills relacionados