- 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
Hacker-News-Kommentare
/usr/binmit den Optionen--helpoder-hausprobiert 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.man foodeutlich verlässlicher und nützlicher ist alsfoo --helpoderfoo -h.coloranzugeben, die ohne Eingabe funktionieren. Außerdem gibt es offenbar keine Möglichkeit,Popen-Flags wiesubprocess.CREATE_NO_WINDOWzu setzen, um zu verhindern, dass in einer GUI-App ein CMD-Fenster erscheint. Für ffmpeg lässt sich das durch manuelles Ausführen nachffmpeg.compile()umgehen, aber beiffmpeg.probe()scheint das nicht zu funktionieren. Zusätzlich wurde das Problem mit Quellenfiltern überffmpeg.sources.colorverstanden, aber es bleibt die Frage, ob sich beliebige Quellenfilter ähnlich wievfilteroderafilterverwenden lassen.