5 Punkte von GN⁺ 2025-05-31 | 1 Kommentare | Auf WhatsApp teilen
  • typed-ffmpeg ist ein moderner Wrapper, der die intuitive Nutzung von FFmpeg in Python ermöglicht
  • Bietet starke Typunterstützung, umfangreiche Dokumentation und IDE-Autovervollständigung, um die Developer Experience und die Code-Stabilität zu verbessern
  • Unterstützt fortgeschrittene Funktionen wie das einfache Erstellen komplexer Filtergraphen, deren Visualisierung sowie JSON-Serialisierung
  • Installation und Ausführung sind unkompliziert, und über einen interaktiven Playground sind Experimente auch im Browser möglich
  • Von ffmpeg-python inspiriert, behebt es bestehende Schwächen und soll künftig noch mehr FFmpeg-Versionen und Filter unterstützen

Überblick und Bedeutung von typed-ffmpeg

  • typed-ffmpeg ist ein Open-Source-Paket, mit dem sich FFmpeg auf moderne, Pythonic-Art steuern lässt
  • Es wurde ausschließlich mit der Python-Standardbibliothek entwickelt, ist abhängigkeitsfrei und bietet dadurch hohe Sicherheit und Kompatibilität
  • Der größte Vorteil ist die umfassende Typunterstützung zusammen mit einfacher Syntax, Autovervollständigung und Inline-Dokumentation, wodurch sich komplexe FFmpeg-Filterarbeiten einfach und zuverlässig in Code abbilden lassen
  • Es ergänzt die Einschränkungen von ffmpeg-python, insbesondere bei IDE-Integration und fehlender Typisierung, und unterstützt verschiedene neue Funktionen wie JSON-Serialisierung, automatische Validierung von Filtergraphen und visuelle Graphen
  • Beim eigentlichen Wrapping- und Automatisierungsprozess trugen GPT-3 und Copilot zwar zur Produktivität bei, die Kernerzeugung des Codes setzte jedoch bewusst auf zuverlässige traditionelle Codegenerierung

Hauptfunktionen (Features)

  • Keine Abhängigkeiten: Verwendet nur die Python-Standardbibliothek
  • Intuitive Schnittstelle: FFmpeg-Filtergraphen lassen sich einfach in Python-Code aufbauen
  • Umfassende Filterunterstützung: Unterstützt die meisten FFmpeg-Filter samt IDE-Autovervollständigung
  • Integrierte Dokumentation: Inline-Docstrings minimieren die Notwendigkeit, externe Dokumentation nachzuschlagen
  • Robuste Typunterstützung: Statische und dynamische Typprüfungen erhöhen die Zuverlässigkeit des Codes und erleichtern das Debugging
  • Serialisierung von Filtergraphen: Filtergraphen können im JSON-Format gespeichert und wiederhergestellt werden
  • Graph-Visualisierung: Bietet die schematische Darstellung von Filtergraphen über graphviz
  • Automatische Validierung und Korrektur: Erkennt Fehler im Filtergraphen und kann sie automatisch korrigieren
  • Erweiterte Ein-/Ausgabeoptionen: Breite Unterstützung für Codecs und Formate erweitert die Einsatzmöglichkeiten von FFmpeg
  • Partial-Evaluation-Funktion: Unterstützt mehr Modularisierung und Wiederverwendbarkeit von Filtergraphen

Geplante Funktionen

  • Die breite Kompatibilität über FFmpeg 6.0 hinaus soll erweitert werden
  • Noch mehr komplexe Filter sollen unterstützt werden; die kontinuierliche Erweiterung der Funktionen ist in Arbeit

Schnelles Beispiel (Quick Usage)

import ffmpeg  
  
# Video horizontal spiegeln und ausgeben  
f = (  
    ffmpeg  
    .input(filename='input.mp4')  
    .hflip()  
    .output(filename='output.mp4')  
)  
f  
  • Als komplexeres Beispiel lässt sich ein Filtergraph darstellen, der mehrere Abschnitte zuschneidet und overlay sowie drawbox hinzufügt
import ffmpeg.filters  
import ffmpeg  
  
in_file = ffmpeg.input("input.mp4")  
overlay_file = ffmpeg.input("overlay.png")  
  
f = (  
    ffmpeg.filters  
    .concat(  
        in_file.trim(start_frame=10, end_frame=20),  
        in_file.trim(start_frame=30, end_frame=40),  
    )  
    .video(0)  
    .overlay(overlay_file.hflip())  
    .drawbox(x="50", y="50", width="120", height="120", color="red", thickness="5")  
    .output(filename="out.mp4")  
)  
f  
  • Weitere Beispiele und ausführliche Erklärungen sind in der Dokumentation verfügbar

Interaktiver Playground

  • Im Browser lassen sich FFmpeg-Filter und -Befehle ausprobieren, Ergebnisse visualisieren, verschiedene Ein-/Ausgabeoptionen testen, interaktive Beispiele lernen und Filtergraphen teilen
  • Auch ohne lokale Umgebung ist dies eine sehr effektive Umgebung zum Prototyping und Lernen von FFmpeg-Filterketten

Projekthintergrund und Dank

  • Das Projekt begann inspiriert von der Idee, ein SDK automatisch auf Basis der FFmpeg-Dokumentation mit GPT-3 zu generieren
  • Für die Kerngenerierung wurde zur Sicherstellung der Zuverlässigkeit auf einen manuellen Codegenerierungsansatz umgestellt
  • Im Entwicklungsprozess trugen GitHub Copilot und GPT-3 zur Steigerung der Entwicklungseffizienz bei
  • ffmpeg-python inspirierte API-Stil und Design und prägte die Architektur stark
  • Das Projekt ist dem Sohn des Entwicklers, Austin, gewidmet

Dokumentation und Hinweise

  • Ausführlichere Informationen und weiterführende Funktionen sind in der offiziellen Dokumentation verfügbar
  • Neben der Installation des Einzelpakets kann für Zusatzfunktionen wie die Graph-Visualisierung über separate Optionen auch graphviz-Unterstützung aktiviert werden
  • Für die Kompatibilität mit ffmpeg-python wird eine separate Version (typed-ffmpeg-compatible) angeboten

1 Kommentare

 
GN⁺ 2025-05-31
Hacker-News-Kommentare
  • Es ist eine realistische Einschätzung, dass Menschen viel zu sehr unterschätzen, dass jeder Parser oder jedes Toolkit für Kommandozeilenoptionen im Grunde eine eigene, unabhängige vollständige Konfigurationssprache ist; man sollte jedes Werkzeug eher als einzelnes Programm oder als Konfiguration betrachten, die in dieser Sprache läuft. Hervorgehoben wird, dass es wegen der Wortaufteilungsregeln in Unix-Shells und oberflächlich ähnlich wirkender Syntax in Wirklichkeit enorme Vielfalt gibt, die viele fälschlich für weitgehend einheitlich halten. Dazu kommt die persönliche Erfahrung, dass die Fehlerrate erstaunlich hoch war, wenn man alle Programme in /usr/bin mit den Optionen --help oder -h ausprobiert hat und nicht die erwartete Hilfe bekam. Die Einführung von Typinformationen bei einem komplexen Tool wie ffmpeg wird als ermutigender Schritt gesehen, der das Bewusstsein für diese Vielfalt schärfen und zugleich praktische Vorteile bringen kann.
    • Die Erfahrung wird geteilt, dass man foo deutlich verlässlicher und nützlicher ist als foo --help oder foo -h.
    • Es wird Neugier geäußert, an welchen konkreten Stellen es für Einsteiger zu Konflikten kam und wo genau die Gegensätze lagen.
  • Beeindruckend ist, dass das Projekt aktiv weiterentwickelt wird, aber es scheint einige ähnliche Probleme wie ffmpeg-python zu haben. Zum Beispiel ist keine Möglichkeit zu sehen, Filter wie color anzugeben, die ohne Eingabe funktionieren. Außerdem gibt es offenbar keine Möglichkeit, Popen-Flags wie subprocess.CREATE_NO_WINDOW zu setzen, um zu verhindern, dass in einer GUI-App ein CMD-Fenster erscheint. Für ffmpeg lässt sich das durch manuelles Ausführen nach ffmpeg.compile() umgehen, aber bei ffmpeg.probe() scheint das nicht zu funktionieren. Zusätzlich wurde das Problem mit Quellenfiltern über ffmpeg.sources.color verstanden, aber es bleibt die Frage, ob sich beliebige Quellenfilter ähnlich wie vfilter oder afilter verwenden lassen.
  • Wer skriptbasierte Videobearbeitung in Python macht, dem wird Vapoursynth nachdrücklich empfohlen. Das Tool wurde von Anfang an speziell für Videobearbeitung entwickelt, wird aktiv gepflegt und hat eine starke Community sowie ein ausgereiftes Tool-Ökosystem. Man kann es frei nutzen, ohne an die CLI von ffmpeg gebunden zu sein. Dazu wird der Link zur Vapoursynth-Website geteilt.
  • Wirklich eine großartige Idee; persönlich wird auf eine TypeScript-Version dieses Projekts gehofft.
    • Mit dem Vorschau-Tool Jules wurde kurz getestet, wie eine TypeScript-Version aussehen könnte. Die Implementierung ist recht einfach, aber es gibt Ideen für eine besser lesbare Variante. Gemessen am sehr kurzen Prompt ist das Ergebnis nicht schlecht. Für Interessierte wird der Code im multi-language-codegen-Branch geteilt.
    • Es wäre wirklich schön, wenn ebenfalls eine TypeScript-Version veröffentlicht würde.
    • Ein scherzhafter Vergleich, der TypeScript als „Sprache Gottes“ bezeichnet.
    • Der Hinweis, dass in der offiziellen Dokumentation keine Erwähnung von TypeScript zu finden war.
  • Es wird die Ansicht vertreten, dass die Form der ffmpeg-Kommandozeile maschinenlesbar beschrieben werden sollte, damit daraus automatisch Code für verschiedene Programmiersprachen generiert werden kann.
  • Das visuelle Tool ist besonders beeindruckend. FFMPEG wirkt wie ein klarer Kandidat dafür, durch modulare bzw. visuelle Programmierung deutlich zugänglicher zu werden. Viele Nutzer kennen nicht alle Funktionen, daher scheint dieser Ansatz hilfreich zu sein. Aus UX-Sicht wäre allerdings zu erwarten gewesen, dass sich Knoten und Kanten mit der ENTF-Taste löschen lassen; das funktionierte nicht, was etwas schade ist. Insgesamt ist die Erfahrung jedoch hervorragend.
    • Endlich gibt es ein Werkzeug, das dem DirectShow GraphEdit von MS ähnelt, was sehr begrüßt wird.
  • Das Projekt wirkt wirklich interessant. Wenn es sogar das Weiterreichen von Frames per Pipe zwischen einzelnen Befehlen unterstützen würde, könnte sich die wahre Erweiterbarkeit von FFMpeg entfalten.
  • Das Projekt wird als so großartig empfunden, dass zusätzlich auch das visuelle Video-Editor-Tool von newbeelearn vorgestellt werden soll, mit dem sich ebenfalls ffmpeg-Befehle automatisch erzeugen lassen.
  • Eine kurze Ermutigung: gute Arbeit.
  • Bewunderung darüber, wie großartig das Projekt aussieht.