2 Punkte von GN⁺ 4 일 전 | 1 Kommentare | Auf WhatsApp teilen
  • 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 GX am 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

 
GN⁺ 4 일 전
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

    • Als der Artikel auf der Startseite war, wurde mein Projekt in den Kommentaren erwähnt, also habe ich es mir angesehen
      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?

    • „669GB“ ist die Gesamtgröße des Rohmaterials, das für die Videoverarbeitung verwendet wurde, und um die Verarbeitung zu beschleunigen, wurden die einzelnen Frames auf 720p heruntergerechnet
      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

    • Open-Source-Machine-Learning-Modelle werden immer besser
      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...
    • Nutzt du sowohl Android als auch iOS, oder gibt es einen anderen Vorteil, persönliche Medien auf beiden Plattformen zu haben?
    • Ist es wirklich okay, wenn Google mithilfe von Kindern seine Modelle und Werbealgorithmen trainiert?
      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

    • Das habe ich mir noch nicht angesehen
      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?

    • Ich verwende RAG und habe alle Videoszenen einzeln in einer Vektordatenbank indiziert
      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?

    • Für diesen Einsatzzweck bräuchte man wahrscheinlich LoRA. Die Ablehnung von Porno-Inhalten ist ziemlich stark
      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
    • Du stellst die wichtigen Fragen
    • Ich weiß nicht, warum immer dieselbe Frage kommt
      Als ich das Projekt auf Reddit gepostet habe, wurde mir genau dieselbe Frage auch gestellt
    • Als ich früher mal Whisper benutzt habe, hat es allein aus Schlaggeräuschen und Stöhnen ausgefeilte Dialoge halluziniert, und brauchte dann mehrere Minuten, um sie Zeile für Zeile auszugeben
    • Ich weiß nicht, ob das sarkastisch gemeint ist, aber ich finde es eine interessante Frage
      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...

    • Aus mehreren Gründen ist das eher ein Vergleich von Äpfeln mit Birnen, aber die beiden wichtigsten sind diese
      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
    • Das ist nicht vergleichbar
      Der M1 Max hat 400GB/s Speicherbandbreite, und selbst der aktuelle Top-Snapdragon X2 Elite kommt nur auf 228GB/s
    • Wenn mit „vergleichbar“ die Single-Core-Leistung gemeint ist, kann das teilweise stimmen, aber bei der Speicherbandbreite ist der M1 Max etwa achtmal schneller
      Durch den breiteren Bus und die geringere Latenz spielt er in einer ganz anderen Liga
    • Dazu kann ich weder etwas bestätigen noch verneinen
      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

    • Kannst du das bitte noch einmal prüfen? Ich weiß nicht genau, warum ein Cloudflare-Fehler angezeigt wird
  • Der Link ist https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...