Indexé 669 GB de videos de GoPro con una computadora M1 Max y modelos de ML locales
(iliashaddad.com)- Para encontrar momentos específicos entre 2,207 videos de ciclismo grabados con GoPro sin tener que volver a verlos uno por uno, se indexan y buscan los videos con modelos de ML locales, y los mejores clips se envían directamente a una línea de tiempo de DaVinci Resolve
- Se usa una versión de app de escritorio optimizada para Apple Silicon como M1 Max; basta con pedirle a un agente conversacional la escena deseada para enviarla directo a la línea de tiempo de edición
- Se construyó un pipeline de indexación compuesto por transcripción con OpenAI Whisper, análisis de frames (reconocimiento facial, detección de objetos, texto en pantalla y descripción de escenas) y embeddings en una base de datos vectorial
- Indexar 628 videos (668.68 GB, 15 h 13 min 18 s) requiere un total de 67 h 40 min 42 s de cómputo, aproximadamente 4.4 veces más lento que la reproducción en tiempo real
- Todo el procesamiento se realiza en la GPU/CPU local, por lo que es posible buscar en una gran biblioteca de video sin usar la nube; el proyecto sigue en desarrollo
Resumen del proyecto y motivación
- Se guardan 2,207 videos de GoPro grabados durante recorridos en bicicleta en un solo SSD, y se busca poder encontrar momentos memorables dentro de ellos sin tener tiempo para volver a ver todo
- Aunque casi todos los momentos fueron grabados con GoPro, encontrar los mejores requiere ver el metraje completo de principio a fin, lo cual es ineficiente
- Historial de ciclismo: 2024 Casablanca→Imsouane (5 días, más de 470 km), 2023 Kenitra→Tangier (220 km en día y medio), además de viajes de ciclismo de montaña entre ambos
- Para resolver este problema, se creó directamente el proyecto edit-mind
- GitHub Repo : https://github.com/IliasHad/edit-mind
Por qué usar una app de escritorio
- Se eligió la versión de app de escritorio optimizada para Apple Silicon, que permite encontrar los momentos deseados con un agente conversacional y enviarlos directamente a la línea de tiempo de edición de DaVinci Resolve
- La versión en Docker no puede acceder a la GPU de la M1 Max, así que no aprovecha el rendimiento de la GPU
- La app de escritorio usa un proceso de indexación similar al de la versión source-available
Proceso de indexación
- Al seleccionar una carpeta en la app de escritorio, solo se exploran los videos que empiezan con
GXpara distinguirlos de los videos del teléfono - Si hay una pista de audio, se transcribe el video completo con el modelo OpenAI Whisper
- Después se ejecuta el pipeline de análisis de frames, dividiendo el video en escenas individuales a intervalos de 1 segundo (1 fps)
- Incluye un plugin de reconocimiento facial con datos faciales personalizados, detección de objetos, texto en pantalla, tipo de toma y descripción de escena
- Los datos de rostros, transcripción y descripción de cada escena se embeben como texto documental y se almacenan en una base de datos vectorial local
- Los frames de escena se embeben en una colección de base de datos vectorial visual para búsqueda por imagen, y el audio de escena se procesa de la misma manera
- Al final se obtienen 3 colecciones de base de datos vectorial con la información del video
- Incluyen metadatos de ubicación, nombre de la cámara, rostros reconocidos, objetos detectados, texto en pantalla, transcripción y descripción de cada escena
Métricas de rendimiento
- Estas mediciones corresponden al procesamiento de videos indexados usando la GPU y CPU del equipo, y no son cifras finales porque el proyecto sigue en desarrollo
-
Métricas generales
- Videos indexados: 628
- Tamaño total de video: 668.68 GB
- Duración total de video: 15 h 13 min 18 s
- Tiempo total de cómputo: 67 h 40 min 42 s
- Velocidad frente a reproducción: 0.22x, es decir, alrededor de 4.4 veces más lento que la reproducción
- Frames analizados: 57,537
-
Análisis por etapa (tiempo total / promedio por video / proporción del cómputo)
- Transcripción: 25 h 12 min 54 s / 2 min 25 s / 37.3%
- Análisis de frames: 24 h 55 min 42 s / 2 min 23 s / 36.8%
- Creación de escenas: 48 min 0 s / 5 s / 1.2%
- Embedding de texto: 36 min 42 s / 5 s / 0.9%
- Embedding visual: 11 h 49 min 17 s / 1 min 9 s / 17.5%
- Embedding de audio: 4 h 18 min 7 s / 27 s / 6.4%
Función de búsqueda
- Se prefiere hacer preguntas sobre los videos mediante un asistente de chat, con la opción de enviar los resultados directamente a la línea de tiempo de edición de DaVinci Resolve
- Si se usa el modelo Qwen2.5-VL-7B-Instruct en el modo avanzado de indexación, se pueden obtener datos indexados que entienden y describen mejor el video, aunque la indexación es más lenta
- Con este método se indexan los videos de GoPro, se buscan y envían las escenas deseadas, y luego se produce un video con buenos clips
Comparación de hardware y estado del desarrollo
- Al ejecutarlo en una GPU NVIDIA como una RTX 3060 (12 GB de VRAM), fue más rápido que en la M1 Max
- El proyecto sigue en desarrollo, y se continúa trabajando en mejoras para optimizar precisión y velocidad
Ejemplos de prompts de uso
- "Encuentra todos los clips donde un perro ladra mientras voy en bicicleta"
- "Crea un reel de highlights con los momentos más pintorescos e interesantes del viaje en bicicleta"
- "Muéstrame los momentos de manejo en primera persona más rápidos donde se escuche el viento y envíalos a DaVinci Resolve, quitando escenas duplicadas"
1 comentarios
Comentarios de Hacker News
Es curioso que hace unos días hice casi exactamente lo mismo en una máquina muy parecida con una técnica similar, y eso también terminó en la portada de HN
https://news.ycombinator.com/item?id=48222733
https://blog.simbastack.com/indexed-a-year-of-video-locally/
No conocía este proyecto, pero está interesante
Estoy intentando agregar más funciones relacionadas con fotos a Framedex, y es una época emocionante porque cada vez hay más cosas que se pueden hacer en local
Tanto el artículo como el proyecto me parecieron buenos, y los modelos locales están mejorando cada vez más
Siento que este tipo de trabajo se va a hacer con LLM locales
Corres un LLM rápido, pequeño y potente en local para indexar datos personales como imágenes, videos y documentos, enriquecerlos y etiquetarlos con esos metadatos enriquecidos
Si quieres agrupar por persona, buscas en los metadatos etiquetados y agrupas; si quieres encontrar una imagen a partir de una descripción, usas los metadatos etiquetados; si quieres organizar cualquier cosa, usas los metadatos etiquetados
Ojalá esto acabe por fin con el caos de organizar archivos
Al ver “ejecutar el pipeline de análisis de frames divide el video en escenas separadas (cada 1 segundo o 1fps)” y “57,537 frames analizados”, me cuadra
Ese número suena mucho más realista que “669GB”, y el tamaño total real de todos los frames procesados probablemente fue de 10~30GB
No lo digo para menospreciar el trabajo, sino porque si uno quiere hacerlo en casa siempre hay que calcular la parte práctica
Si el “tiempo total de cómputo” fue de 67 horas, 40 minutos y 42 segundos, me pregunto si habrá alguna opción de pago para hacer este tipo de proceso más rápido. ¿Basta con levantar una instancia con GPU?
Entiendo que no se necesita la calidad completa del material original para obtener resultados precisos, y los experimentos también salieron así
Hasta ahora, una GPU NVIDIA como una RTX 3060 con 12GB de VRAM ha sido mucho más rápida que una M1 Max, y todavía sigo optimizando velocidad y precisión
Una función que terminó gustándome más de lo esperado es que Google Photos y Apple Photos me envían recuerdos y colecciones con distintos momentos de mi vida y la de mis hijos durante los últimos 10 años
Creo que cada vez será más fácil que la IA arme después pequeños videos recopilatorios agradables de ver, así que soy bastante optimista sobre grabar más videos de mis hijos
Hice un pequeño experimento generando un video estilo Spotify Wrapped, y el video de vista previa está aquí https://github.com/IliasHad/edit-mind/tree/expirement/year-i...
En unos años te van a salir cosas como “Mira la nueva bicicleta económica de BIKE BRAND, ¿te acuerdas que antes andabas en una bicicleta de BIKE BRAND?”
DaVinci 21 ya trae integrada una función de indexación llamada AI IntelliSearch
No es por quitarle mérito al trabajo, pero ya es una función disponible para muchos usuarios. Como lleva AI en el nombre, probablemente sea solo para usuarios de Studio
Pero me da curiosidad si sube los videos a la nube o si procesa todo en local
Y también si permite aportar datos faciales personalizados para ayudar a etiquetar las caras que aparecen en los videos
Creo que Adobe Premiere Pro también tiene algo parecido, pero entiendo que lo procesa en la nube
Está muy bien hecho
No me quedó muy claro cómo haces reels mediante agentes
¿Es algo como una llamada de herramienta de IA que recibe enlaces de imágenes y arma el reel en alguna herramienta de edición de video? ¿O recorta y une los tiempos antes y después de los timestamps devueltos por el índice para una consulta específica?
Cuando le haces una petición al agente, un modelo de Ollama entiende la solicitud y usa las herramientas de búsqueda disponibles. La búsqueda puede hacerse por texto transcrito, rostros, información visual, audio o una combinación
Es parecido a cómo Claude o ChatGPT usan una herramienta de búsqueda web para encontrar información en línea
Luego uso Ollama para filtrar las escenas de video y mostrar escenas más precisas y con menos duplicados, y ese resultado se envía a la API de DaVinci Resolve para crear una línea de tiempo con clips de video
¿También funciona para recopilaciones porno?
O haría falta algún modelo sin censura, aunque no sé si eso también aplique al lado de visión
Quizá también querrías agregar algo como fine-tuning de YOLO para detección de escenas y reconocimiento facial
Cuando publiqué el proyecto en Reddit me preguntaron exactamente lo mismo
Como DeepSeek corre en local, ¿será útil para este tipo de uso?
Me sorprendió enterarme de que el CPU del M1 Max es ARM/SoC y aun así comparable con un Intel i9 de 11.ª generación
¿Lo entendí bien? ¿Windows ARM tendría un rendimiento parecido en un CPU así?
Referencia: https://www.cpubenchmark.net/compare/4585vs4245/Apple-M1-Max...
Gracias a la memoria “unificada”, puedes usar toda la memoria del sistema como si fuera VRAM, y además tiene aceleradores dedicados de apoyo para IA
Por esas dos cosas, los chips Apple Silicon pueden superar por mucho a un CPU normal en este tipo de cargas de trabajo de modelos de IA
No sé hasta qué punto lo de Windows ARM sea comparable, pero sí sé que usan chips Qualcomm Snapdragon
El M1 Max tiene un ancho de banda de memoria de 400GB/s, y hasta el Snapdragon X2 Elite tope de gama más reciente llega a 228GB/s
Con un bus más ancho y una latencia mucho menor, simplemente no compiten
Todavía no he probado este proyecto en una máquina con Windows ni en una configuración así
https://archive.is/O6CLQ
Quise leer el artículo, pero lamentablemente el sitio principal estaba dando error de Cloudflare
El enlace es https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...