¿Qué hace clip-anything?
Propósito
Convierte una grabación larga (un archivo, varios archivos o una carpeta que representa una sesión) en los N mejores clips verticales destacados usando la CLI gratuita y local clip-anything. La habilidad impulsa la herramienta, muestra lo que cortaría antes de cortar y lee el informe para que el usuario sepa por qué se eligió cada momento. Nunca sube, publica ni envía material a ningún lado; la CLI en sí misma no realiza llamadas de red excepto una descarga opcional y única del modelo Whisper que pregunta primero.
Requisitos previos
uvx(de uv) opipxen PATH. La CLI es un paquete Python;uvx clip-anythingla ejecuta sin instalación.ffmpegyffprobeen PATH. La CLI sale con código 3 y una línea de instalación si faltan.- Una grabación a la que el usuario pueda apuntar:
.mp4 .mkv .mov .m4v .ts .m2ts .mts .webm .avi .flv, o una carpeta con ellas.
Instrucciones
Trabaja desde el directorio actual del usuario. Usa las rutas exactas que el usuario dio; ponlas entre comillas. No muevas, renombres ni elimines el material de archivo. No instales nada más allá de lo que los pasos a continuación imprimen como sugerencia para que el usuario ejecute.
Flujo de trabajo
(Usa los pasos en orden; un paso que no se pueda completar se informa, no se omite.)
- Verifica las herramientas. Ejecuta
command -v uvx || command -v pipxycommand -v ffmpeg && command -v ffprobe. Si faltan tantouvxcomopipx, imprime y detente:curl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux) owinget install astral-sh.uv(Windows). Si falta ffmpeg, imprime y detente:brew install ffmpeg/sudo apt install ffmpeg/winget install Gyan.FFmpeg. Usapipx run clip-anythingdonde este archivo digauvx clip-anythingsi solo existe pipx. - Resuelve la entrada. Si el usuario nombró un archivo o carpeta, úsalo. Si dijo "mi grabación" sin ruta, busca archivos de video en el directorio actual (busca las extensiones anteriores, la más nueva primero). Pregunta solo cuando haya varias entradas plausibles o ninguna; de lo contrario, continúa y di qué ruta se usó. Una carpeta se pasa tal cual: la CLI la trata como una sola sesión.
- Simulación en seco primero, siempre. Ejecuta
uvx clip-anything "<entrada>" --dry-run --json 2>/dev/null(agrega--count Nsi el usuario nombró un número). Analiza el JSON de stdout. Muestra una tabla breve: rango,inicioafincomo mm:ss,duración_s,puntuación,títulosi está presente, y el componente principal decomponents. Siclipsestá vacío, dilo claramente y leewarnings(una advertenciabelow_floorsignifica que nada superó la barra de acción) antes de sugerir--min-score 0o un valor más bajo. - Renderiza. A menos que el usuario solo haya pedido una vista previa, ejecuta
uvx clip-anything "<entrada>"con las mismas opciones, sin--dry-runy--json, para que se muestre la interfaz de progreso. Agrega--yessolo si el usuario dijo que quiere subtítulos y aceptó la descarga única del modelo; de lo contrario, deja que la CLI pregunte. Informa la carpeta de salida (./clipspor defecto, o--out). - Explica las selecciones. Lee
clips/report.json(lee el archivo, opython3 -I -csobre él). Para cada clipokda una línea: el lapso de tiempo, la puntuación y qué señales lo determinaron (components: volumen sobre la línea base, ataques de audio, movimiento, concordancia audio/movimiento, penalización de cuadros estáticos, bonificación de voz cuando está presente). Mencionalayoutcuando seafacecamycaptionscuando sea verdadero. Enumera cada entrada enwarningsen palabras simples; la herramienta se degrada en voz alta y el usuario debería escucharlo. - Ofrece las opciones de ajuste, una línea cada una, solo las que se adapten a lo que el usuario vio:
--count Nmás o menos clips (es un máximo; las sesiones silenciosas devuelven menos)--min-score 0.3baja la barra de acción;--min-score 0clasifica el archivo contra sí mismo--min 20 --max 60límites de duración del clip en segundos--crop centerrecorte central estático en lugar de seguir la acción--no-captionsnunca incrustar subtítulos;--facecam offsin pila de cámara web--visionreordenamiento y títulos locales con Ollama (experimental; solo habla con127.0.0.1:11434)--forcesobrescribe clips de la última ejecución;--no-cacheignora el análisis en caché Una nueva ejecución con diferentes opciones toma segundos porque el análisis se almacena en caché junto al video.
- Divulgación. Cuando haya subtítulos o títulos, di una vez: los subtítulos son transcripción automática (faster-whisper, local) y los títulos provienen de un modelo de visión local; ambos pueden ser incorrectos y deben verificarse antes de publicar.
Ejemplos
- "Crea 5 cortos de la transmisión de anoche, está en ~/Videos/obs/" → paso 1, pasa la carpeta,
--count 5simulación en seco, muestra la tabla, renderiza, explica. - "¿Por qué eligió una pantalla de carga?" → abre
report.json, muestra loscomponentsde ese clip (un valor alto decardsignifica que la penalización de cuadros estáticos se activó pero los ataques fuertes aún ganaron), sugiere--min-score 0.6o unw_cardmás alto en un--configTOML. - "Solo muéstrame lo que cortaría, no renderices" → pasos 1 a 3 solamente.
Limitaciones
- Los momentos basados en transcripción (un chiste sin acción) obtienen puntuación baja por diseño; la herramienta clasifica la acción, el habla es una bonificación.
- La barra de acción se calibró en dos juegos; un juego no visto puede devolver menos clips de los solicitados. Dilo en lugar de forzar clips con
--min-score 0sin que se pida. - Las fuentes 1080p60 se analizan aproximadamente a 100 s por hora; un archivo de varias horas es una espera, no un bloqueo.
- La habilidad no edita clips, elige miniaturas ni publica en ningún lado. La publicación es un paso del usuario.
Solución de problemas
- Salida 2: entrada incorrecta (ruta faltante, archivo no compatible, carpeta sin videos). Muestra el mensaje de la CLI.
- Salida 3: ffmpeg o ffprobe faltantes. Imprime la línea de instalación para el sistema operativo del usuario desde el paso 1.
- Salida 1: no se renderizó nada. Lee
warningsen el JSON de la simulación en seco; generalmentebelow_floor. - Subtítulos escritos como archivo adjunto
.assen lugar de incrustados: la compilación de ffmpeg no tiene libass (fórmula estándar de Homebrew). Una compilaciónffmpeg-fullen PATH lo soluciona; todo lo demás sigue funcionando. --visionno tuvo efecto: Ollama no se está ejecutando o no tiene un modelo de visión; la ejecución continúa solo con acción y deja una advertencia.