Communitygithub.com

kaustubhupadhyaya/clip-picker

Extrae los mejores clips de videos largos y sin estructurar. Úsalo cuando el usuario proporcione uno o más videos extensos y quiera encontrar los momentos destacados: 'encuentra los mejores clips', 'elige lo mejor', 'obtén los momentos destacados', 'qué vale la pena conservar', 'recorta este viaje/vlog/gameplay'.

¿Qué es clip-picker?

Clip Picker es una habilidad diseñada para agentes de IA (como Claude) que necesitan extraer clips destacados de videos largos y no estructurados. Funciona superando una limitación fundamental: los modelos de lenguaje grandes no pueden ver videos, solo imágenes estáticas. Por lo tanto, la habilidad implementa un pipeline que primero muestrea el video en fotogramas con intervalos de tiempo, los organiza en hojas de contacto de miniaturas que el agente sí puede leer, y luego le permite al agente evaluar cada fotograma según una rúbrica de calidad. El proceso incluye la selección de ventanas candidatas, la verificación de nitidez a resolución completa, y la presentación de una hoja de selección clasificada que el usuario final puede revisar y elegir. La habilidad es compatible con cualquier tipo de video y viene con una rúbrica predeterminada para grabaciones POV de motocicleta/ciclismo, pero se adapta a cualquier contenido pidiendo al usuario que describa qué hace que un clip sea bueno para él. También maneja automáticamente la reproducción de video HDR/HLG y la codificación H.264 para el navegador.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kaustubhupadhyaya/editor-pack/tree/HEAD/skills/clip-picker

Preguntar en tu IA favorita

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

Documentación

Clip Picker

Encuentra lo que vale la pena guardar en grabaciones largas. Todo el método existe para sortear un límite duro:

Claude no puede ver video. Solo lee imágenes fijas. Por lo tanto, 'elegir buenos clips' es realmente: muestrear el metraje en imágenes con la densidad suficiente para ver qué sucede, evaluarlas contra una rúbrica, confirmar a resolución completa y luego cortar. Recortar es trivial y casi instantáneo; ver 30+ minutos de metraje es el coste real — presupuesta para ello y no te disculpes por ello.

Los scripts viven en scripts/ (survey.py, score.py, board.py). Se encargan de las partes mecánicas; Claude hace el juicio visual en medio. Dependencias: ffmpeg/ffprobe en PATH, numpy, pillow (todo instalado en esta máquina — ver [[editor-pack-video-editing-stack]]).

Pipeline

Elige un WORKDIR en el scratchpad (por ejemplo, .../scratchpad/clippick). Luego:

1. Confirmar la rúbrica. Si el metraje no es POV motocicleta/ciclismo (la predeterminada incorporada a continuación), pregunta al usuario 1-2 preguntas: qué hace que un clip sea bueno para ellos, duración deseada del clip, formato de salida (16:9 vs 9:16) y qué tan selectivo (unas pocas joyas vs todo). Una buena frase de criterios cambia cada selección — consíguela antes de muestrear.

2. Muestreo — convertir el metraje en hojas de contacto legibles.

python scripts/survey.py "C:\ruta\a\videos_o_directorio" --out WORKDIR --interval 4

Una miniatura cada 4s, en mosaico de 6x6, con la hora del código de tiempo quemada en cada una. Para metraje rápido/lleno de acción usa --interval 2-3; para metraje lento --interval 6-8. Imprime las especificaciones de cada clip y marca las fuentes HDR (HLG/PQ). En clips HEVC largos/múltiples esto es lento (la decodificación por software es el cuello de botella) — ejecútalo en segundo plano y ve las hojas a medida que aparecen.

3. Inspeccionar visualmente cada hoja. Lee cada WORKDIR/montages/*_sheet_*.jpg. Mapea las ventanas candidatas por código de tiempo contra la rúbrica. Un evento fugaz entre muestras puede pasarse por alto — si una hoja sugiere algo (un destello en una esquina, una figura), anótalo y muestrea ese intervalo más densamente después.

4. Crear WORKDIR/candidates.json — un objeto por ventana candidata (esquema a continuación). Mantén cada ventana entre 15-30s (o la longitud que prefiera el usuario). Dale a cada una un código pick (P01, P02, ... en tu orden clasificado), un title de una línea (por qué califica) y tags.

5. Confirmar a resolución completa + nitidez.

python scripts/score.py --work WORKDIR

Extrae un fotograma principal a resolución completa por candidato, calcula la varianza de Laplaciano (una métrica de enfoque), y los agrupa en mosaico en review.jpg. Lee la imagen. Descarta los que sean genuinamente borrosos/sin interés; ajusta start/end para capturar el mejor momento. Baja nitidez = toda la imagen movida por vibración — es deseable para tomas fluidas, no un rechazo. Vuelve a ejecutar después de ediciones.

6. Presentar una hoja de selección clasificada (el usuario elige).

python scripts/board.py --work WORKDIR --mode thumbs     # -> WORKDIR/pickboard.html (publicable como Artefacto)

O, cuando quieran ver antes de elegir, un tablero reproducible que también corta los clips:

python scripts/board.py --work WORKDIR --mode play --out "%USERPROFILE%\Downloads\clips"

play corta cada candidato a H.264 amigable para navegadores (mapeo de tonos HDR->SDR automático para HLG/PQ), escribe review_player.html con reproductores <video> nativos junto a los mp4s (ábrelo en Chrome/Edge para reproducción local). La salida predeterminada es 16:9, solo recorte, sin recortar el encuadre.

7. Cortar / finalizar los ganadores que el usuario elija. Para opciones de formato o píxel exacto, canaliza a través de la habilidad [[editor-pack-video-editing-stack]] video-tool-router (copia de flujo vs recodificación, la protección HLG, Resolve para gradación/estabilizar/escalar). Ofrece seguimientos: aumento de desenfoque de movimiento en clips fluidos, verticales 9:16, color, subtítulos, un montaje.

La rúbrica de selección (esta es la parte real de "cómo elige")

Un clip vale la pena conservarlo cuando supera los filtros de calidad Y lleva al menos una señal "especial".

Filtros de calidad (todos deben cumplirse)

  • Subconjunto, de 15 a 30 s de la fuente (predeterminado; respeta la duración del usuario).
  • Sujeto claro y estable — el sujeto principal (moto/manillar, rostro, jugador) está nítido y encuadrado de manera estable. Rechaza el desenfoque global por golpes/sacudidas, desenfoque de enfoque, sobreexpuesto o demasiado oscuro, lente obstruido.
  • Está sucediendo algo — movimiento o cambio. Rechaza inactivo/estacionado/esperando y la monotonía sin nada.

Señales "especiales" (necesita >=1; más y más fuertes = mayor rango)

  • Velocidad / movimiento — el entorno se desdibuja con desenfoque de movimiento mientras el sujeto se mantiene nítido. Esto es un aspecto positivo y materia prima ideal para una edición con aumento de desenfoque de movimiento.
  • Interacción — otras personas/ciclistas/vehículos/animales; adelantamientos, conducción en grupo, alguien reaccionando.
  • Acción / dinámica — curvas e inclinación, giros, cambios de elevación, un truco, un momento de cerca.
  • Luz y entorno — amanecer/atardecer, hora dorada, nubes dramáticas, niebla/bruma, túneles, una vista o revelación, agua. La luz de la hora del día es el mayor factor "cinematográfico" — márcalo siempre.
  • Novedad — un cambio de escena/terreno, una entrada/salida, cualquier cosa visualmente nueva en comparación con los minutos circundantes.

Conciliar "nítido, no borroso" con "el desenfoque de movimiento es bueno"

Mantén el sujeto nítido y el momento intencional; trata el desenfoque de velocidad periférica como una característica. Rechaza solo el desenfoque global (toda la imagen manchada por un golpe). Una cámara de pecho/barra mantiene la moto rígida mientras el mundo se desdibuja — ese es el aspecto deseado, no un defecto.

Clasificación

Ordena por: fuerza y rareza de la señal especial, luego claridad, luego variedad (no clasifiques cinco ventanas casi idénticas en los primeros puestos — distribuye las vibraciones: una vista, un desenfoque de flujo, un adelantamiento, una tomada atmosférica). Sé honesto cuando un criterio simplemente esté ausente (por ejemplo, no hay amanecer/atardecer en ninguna parte) — dilo en lugar de forzar una selección débil.

Perfil de viaje POV (predeterminado incorporado para el metraje de este usuario)

Cámara de casco o manillar de motocicleta/ciclismo. Concretamente: conserva barridos de desenfoque de velocidad, curvas/inclinación, adelantamientos y conducción en grupo, vida al borde de la carretera, niebla/bruma y vistas de montaña, túneles/paseos arbolados. Omite: paradas, intermitentes, estacionamiento, manipulación del teléfono, largas rectas sin nada. (Esta es exactamente la rúbrica que produjo el conjunto de clips que al usuario le gustó).

Esquema de candidates.json

[
  {"pick":"P01","clip":"clip_6318","file":"%USERPROFILE%/Downloads/clip_6318.mov",
   "start":96,"end":120,"hero":104,"title":"Túnel de árboles altos, ciclistas adelante, fuerte desenfoque de velocidad",
   "tags":["speed-blur","scenery"]}
]
  • start/end/hero están en segundos. hero es un instante representativo dentro de la ventana (se usa para la miniatura y la puntuación de nitidez) — elige el momento más característico, no necesariamente el punto medio.
  • Los códigos pick también sirven como identificador para que el usuario elija ("cortar P01, P03, P10").
  • tags (libre, pero estos obtienen etiquetas bonitas): speed-blur, corner, vista, interaction, overtake, atmosphere, scenery, action, light, wildlife.

Eficiencia y problemas comunes

  • La decodificación HEVC/HDR es el cuello de botella, no la edición. Un muestreo de ~30 min de HEVC toma minutos de decodificación. Muestrea solo con la densidad que justifique el metraje; pon el muestreo en segundo plano y la codificación del modo de reproducción.
  • El metraje HLG/HDR se ve grisáceo en una exportación H.264 SDR ingenua — board.py play lo detecta automáticamente y mapea los tonos, pero cualquier corte manual de este metraje también debe hacerlo. Consulta la protección HLG en video-tool-router.
  • Ve más rápido si se solicita: si el usuario menciona la vibra de antemano ("solo las curvas de montaña y el desenfoque del túnel"), muestrea con un intervalo más amplio, preselecciona solo esas y codifica solo las que quieren — reduce un proceso de 20 minutos a unos pocos minutos.
  • No inventes. Solo afirma lo que un fotograma muestreado realmente muestra. Si no estás seguro de si existe un evento de 1 a 2 s, muestrea ese intervalo más densamente antes de afirmarlo.
  • La ruta de fuentes de Windows está codificada en los scripts (C:/Windows/Fonts/...); ajústala en otros sistemas operativos.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados