669 GB GoPro-Videos mit einem M1 Max und lokalen ML-Modellen indexiert
(iliashaddad.com)- Um in 2.207 GoPro-Radfahrvideos gewünschte Momente zu finden, ohne sie alle erneut ansehen zu müssen, werden die Videos mit lokalen ML-Modellen indexiert und durchsucht, und die besten Clips direkt in eine DaVinci-Resolve-Timeline gesendet
- Verwendet wird eine für Apple Silicon optimierte Desktop-App-Version: Man bittet einen konversationellen Agenten um die gewünschte Szene, und sie wird direkt an die Schnitt-Timeline übergeben
- Aufgebaut wurde eine Indexing-Pipeline aus OpenAI-Whisper-Transkription, Frame-Analyse (Gesichtserkennung, Objekterkennung, Bildschirmtext, Szenenbeschreibung) und Embeddings in einer Vektor-DB
- Das Indexieren von 628 Videos (668,68 GB, 15 Stunden 13 Minuten 18 Sekunden) benötigt insgesamt 67 Stunden 40 Minuten 42 Sekunden Rechenzeit und läuft damit etwa 4,4-mal langsamer als Echtzeit
- Die gesamte Verarbeitung läuft auf lokaler GPU/CPU, sodass sich große Videobibliotheken ohne Cloud durchsuchen lassen; das Projekt befindet sich derzeit noch in Entwicklung
Projektüberblick und Motivation
- Von einer Radtour liegen 2.207 GoPro-Videos auf einer SSD, und die eindrucksvollen Momente darin sollen durchsuchbar werden, ohne alles erneut ansehen zu müssen
- Zwar wurden die meisten Momente mit der GoPro aufgenommen, aber gute Szenen lassen sich nur finden, wenn man das gesamte Material komplett sichtet, was ineffizient ist
- Radhistorie: 2024 Casablanca→Imsouane (5 Tage, über 470 km), 2023 Kenitra→Tangier (1,5 Tage, 220 km), dazu Mountainbike-Trips dazwischen
- Um dieses Problem zu lösen, wurde das Projekt edit-mind selbst entwickelt
- GitHub Repo: https://github.com/IliasHad/edit-mind
Warum eine Desktop-App
- Gewählt wurde eine für Apple Silicon optimierte Desktop-App-Version, mit der sich gewünschte Momente per konversationellem Agenten finden und direkt an die DaVinci-Resolve-Schnitt-Timeline senden lassen
- Die Docker-Version kann nicht auf die M1-Max-GPU zugreifen und daher die GPU-Leistung nicht nutzen
- Die Desktop-App verwendet einen ähnlichen Indexing-Prozess wie die source-available-Version
Indexing-Prozess
- Wenn in der Desktop-App ein Ordner ausgewählt wird, werden zur Unterscheidung von Handyvideos nur Videos mit
GXam Anfang durchsucht - Falls eine Audiospur vorhanden ist, wird das komplette Video mit dem OpenAI-Whisper-Modell transkribiert
- Danach startet eine Frame-Analyse-Pipeline, die das Video in einzelne Szenen im Sekundentakt (1 fps) aufteilt
- Enthalten sind ein Gesichtserkennungs-Plugin mit benutzerdefinierten Gesichtsdaten, Objekterkennung, Text im Bild, Shot-Typen und Szenenbeschreibungen
- Gesichter, Transkripte und Beschreibungen der Szenen werden als Dokumenttext embedded und in einer lokalen Vektor-DB gespeichert
- Szenen-Frames werden für die Bildsuche in eine Vektor-DB-Collection für visuelle Embeddings eingebettet, Szenen-Audio wird ebenso verarbeitet
- Am Ende entstehen drei Vektor-DB-Collections mit den Videoinformationen
- Enthalten sind Positions-Metadaten, Kameraname, erkannte Gesichter, erkannte Objekte, Text im Bild, Transkripte und Beschreibungen der einzelnen Szenen
Leistungskennzahlen
- Es handelt sich um Messwerte für indexierte Videos, die mit GPU und CPU des Geräts verarbeitet wurden; da sich das Projekt noch in Entwicklung befindet, sind dies keine endgültigen Werte
-
Gesamtwerte
- Indexierte Videos: 628
- Gesamte Videogröße: 668,68 GB
- Gesamtlänge der Videos: 15 Stunden 13 Minuten 18 Sekunden
- Gesamte Rechenzeit: 67 Stunden 40 Minuten 42 Sekunden
- Geschwindigkeit relativ zur Wiedergabe: 0,22x, also etwa 4,4-mal langsamer als Echtzeit
- Analysierte Frames: 57.537
-
Analyse nach Schritten (Gesamtzeit / Durchschnitt pro Video / Rechenanteil)
- Transkription: 25 Stunden 12 Minuten 54 Sekunden / 2 Minuten 25 Sekunden / 37,3 %
- Frame-Analyse: 24 Stunden 55 Minuten 42 Sekunden / 2 Minuten 23 Sekunden / 36,8 %
- Szenenerstellung: 48 Minuten 0 Sekunden / 5 Sekunden / 1,2 %
- Text-Embedding: 36 Minuten 42 Sekunden / 5 Sekunden / 0,9 %
- Visuelles Embedding: 11 Stunden 49 Minuten 17 Sekunden / 1 Minute 9 Sekunden / 17,5 %
- Audio-Embedding: 4 Stunden 18 Minuten 7 Sekunden / 27 Sekunden / 6,4 %
Suchfunktion
- Bevorzugt wird ein Chat-Assistent, dem man Fragen zu den Videos stellt; zusätzlich gibt es die Option, Ergebnisse direkt an die DaVinci-Resolve-Schnitt-Timeline zu senden
- Wird beim erweiterten Indexing das Qwen2.5-VL-7B-Instruct-Modell verwendet, entstehen Indexing-Daten, die die Videos besser verstehen und beschreiben, allerdings auf Kosten der Geschwindigkeit
- Auf diese Weise werden GoPro-Videos indexiert, gewünschte Szenen gesucht und übertragen und daraus gute Clips erstellt
Hardware-Vergleich und Entwicklungsstand
- Auf einer NVIDIA-GPU wie der RTX 3060 (12 GB VRAM) lief es zwar schneller als auf dem M1 Max
- Das Projekt befindet sich weiterhin in Entwicklung, und es wird weiter an Genauigkeit und Geschwindigkeit optimiert
Beispiel-Prompts
- "Finde alle Clips, in denen ein Hund bellt, während ich Fahrrad fahre"
- "Erstelle ein Highlight-Reel mit den landschaftlich schönsten und interessantesten Momenten der Radtour"
- "Zeige die schnellsten Ego-Perspektiv-Ride-Momente, in denen Windgeräusche zu hören sind, und sende sie an DaVinci Resolve; entferne doppelte Szenen"
1 Kommentare
Hacker-News-Kommentare
Lustig, dass ich vor ein paar Tagen auf fast derselben Maschine mit einer ähnlichen Methode dasselbe gemacht habe und das ebenfalls auf der HN-Startseite gelandet ist
https://news.ycombinator.com/item?id=48222733
https://blog.simbastack.com/indexed-a-year-of-video-locally/
Ich kannte dieses Projekt nicht, aber es ist interessant
Ich versuche gerade, Framedex mehr Foto-Funktionen hinzuzufügen, und es ist eine spannende Zeit, weil lokal wirklich immer mehr möglich wird
Sowohl der Artikel als auch das Projekt waren gut, und lokale Modelle werden immer besser
Für solche Aufgaben wird man wohl lokale LLMs verwenden
Man lässt schnelle, kleine und leistungsfähige LLMs lokal laufen, um persönliche Daten wie Bilder, Videos und Dokumente zu indizieren, anzureichern und mit angereicherten Metadaten zu taggen
Wenn man nach Personen gruppieren will, durchsucht man die getaggten Metadaten und gruppiert danach; wenn man Bilder über Beschreibungen finden will, nutzt man ebenfalls die getaggten Metadaten; und wenn man irgendetwas organisieren will, nimmt man die getaggten Metadaten
Hoffentlich beendet das endlich das Chaos bei der Dateiorganisation
Bei „Wenn die Frame-Analyse-Pipeline läuft, wird das Video in einzelne Szenen aufgeteilt (jeweils 1 Sekunde oder 1fps)“ und „57.537 analysierte Frames“ ergibt das Sinn
Diese Zahl klingt viel realistischer als „669GB“, und die tatsächliche Gesamtgröße der verarbeiteten Frames lag wohl eher bei 10–30GB
Das soll die Arbeit nicht kleinreden, sondern nur heißen, dass man zu Hause immer die Praxistauglichkeit durchrechnen muss
Bei „67 Stunden 40 Minuten 42 Sekunden Gesamt-Rechenzeit“ frage ich mich auch, ob es eine kostenpflichtige Option gibt, die so einen Prozess schnell erledigen kann. Reicht es, einfach eine GPU-Instanz zu starten?
Soweit ich weiß, braucht man für genaue Ergebnisse nicht die volle Originalqualität, und meine Experimente zeigen das ebenfalls
Bisher waren NVIDIA-GPUs wie eine RTX 3060 mit 12GB VRAM deutlich schneller als ein M1 Max, und ich optimiere weiter an Geschwindigkeit und Genauigkeit
Eine Funktion, die mir überraschend viel Freude gemacht hat, ist, dass Google Photos und Apple Photos mir über die letzten zehn Jahre immer wieder Erinnerungsfotos und Sammlungen aus meinem Leben und dem meiner Kinder schicken
Ich bin ziemlich optimistisch, dass es künftig immer einfacher wird, daraus mit AI schöne kurze Zusammenschnitt-Videos zu machen, deshalb filme ich meine Kinder eher noch mehr
Ich habe ein kleines Experiment gemacht, das Videos im Stil von Spotify Jahresrückblick generiert, und hier ist eine Vorschau: https://github.com/IliasHad/edit-mind/tree/expirement/year-i...
In ein paar Jahren bekommt man dann vielleicht so etwas wie „Schauen Sie sich das neueste günstige Fahrrad von BIKE BRAND an, Sie erinnern sich doch, dass Sie früher ein Fahrrad von BIKE BRAND gefahren sind“
DaVinci 21 hat bereits eine eingebaute Indexierungsfunktion namens AI IntelliSearch
Ich will die Arbeit nicht kleinreden, aber das ist inzwischen eine Funktion, die vielen Nutzern zur Verfügung steht. Da AI im Namen steckt, ist sie vermutlich nur für Studio-Nutzer verfügbar
Ich frage mich allerdings, ob die Videos dafür in die Cloud hochgeladen werden oder lokal verarbeitet werden
Und ich frage mich auch, ob man benutzerdefinierte Gesichtsdaten bereitstellen kann, damit Gesichter im Video besser beschriftet werden
Adobe Premiere Pro scheint ebenfalls etwas Ähnliches zu haben, aber meines Wissens läuft das über die Cloud
Gut gemacht
Ich habe allerdings nicht ganz verstanden, wie über den Agenten Reels erstellt werden
Ist das so etwas wie ein AI-Tool-Aufruf, bei dem man Bild-Links bekommt und damit in einem Video-Editing-Tool ein Reel erstellt? Oder werden Zeitstempel, die bei einer bestimmten Anfrage aus dem Index zurückkommen, ausgeschnitten und aneinandergesetzt?
Wenn man den Agenten etwas fragt, versteht ein Ollama-Modell die Anfrage und verwendet die verfügbaren Such-Tools. Gesucht werden kann nach Transkripttext, Gesichtern, visuellen Informationen, Audio oder einer Kombination daraus
Das ist ähnlich dazu, wie Claude oder ChatGPT ein Websuch-Tool verwenden, um Online-Informationen zu finden
Danach filtere ich mit Ollama die Videoszenen, um präzisere und weniger redundante Szenen zu zeigen, und sende das Ergebnis an die DaVinci Resolve API, die daraus eine Timeline mit Videoclips erstellt
Funktioniert das auch für Porno-Sammlungen?
Oder man braucht ein Modell ohne Zensur, wobei ich nicht weiß, ob das auch auf der Vision-Seite funktioniert
Eventuell würde man auch so etwas wie ein YOLO-Finetuning für Szenenerkennung und Gesichtserkennung hinzufügen wollen
Als ich das Projekt auf Reddit gepostet habe, wurde mir genau dieselbe Frage auch gestellt
Könnte DeepSeek, das lokal läuft, für so einen Einsatzzweck nützlich sein?
Ich war überrascht zu erfahren, dass die M1-Max-CPU ARM/SoC ist und überhaupt mit einem Intel i9 der 11. Generation vergleichbar sein soll
Habe ich das richtig verstanden? Würde Windows ARM auf so einer CPU eine ähnliche Leistung zeigen?
Referenz: https://www.cpubenchmark.net/compare/4585vs4245/Apple-M1-Max...
Dank des „vereinheitlichten“ Speichers kann der gesamte Systemspeicher wie VRAM verwendet werden, und es gibt zusätzlich dedizierte AI-Beschleuniger
Diese beiden Dinge sorgen dafür, dass Apple-Silicon-Chips bei solchen AI-Modell-Workloads eine normale CPU klar übertreffen können
Wie weit Windows ARM da mithalten kann, weiß ich nicht, aber ich weiß, dass dort Qualcomm-Snapdragon-Chips verwendet werden
Der M1 Max hat 400GB/s Speicherbandbreite, und selbst der aktuelle Top-Snapdragon X2 Elite kommt nur auf 228GB/s
Durch den breiteren Bus und die geringere Latenz spielt er in einer ganz anderen Liga
Ich habe dieses Projekt bisher noch nicht auf einem Windows-Rechner oder einer Maschine mit so einer Konfiguration ausprobiert
https://archive.is/O6CLQ
Ich wollte den Artikel lesen, aber die Hauptwebsite zeigte leider einen Cloudflare-Fehler
Der Link ist https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...