Ffmpeg direkt ins Programm einbinden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
malzbier
User
Beiträge: 13
Registriert: Mittwoch 25. November 2020, 09:42

Hallo zusammen,
ich hätte da eine allgemein Frage. Ich habe ein Programm zum schneiden von Videos gemacht.
Zum schneiden und zusammenführen benutze ich ffmpeg, welche ich auf dem Windowsrechner habe
und lasse es über den Befehl:
os.system("ffmpeg -i ... )
laufen

Jetzt wollte ich fragen ob es eine Möglichkeit gibt, ffmpeg direkt in das Programm einzubinden, so dass es
nicht nötig ist, ffmpeg zuerst auf dem Rechner separat zu konfigurieren.
Ich weiß es gibt die Bibliothek ffmpeg und einige kleine Klassen in anderen Biblioteken zu ffmpeg, aber die bieten halt nicht
die "concat" Funktion an und Moviepy ist für meine Anwendung zu langsam.

Viele Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@malzbier: `os.system()` solltest Du dafür nicht verwenden. Zum starten von externen Programmen gibt es das `subprocess`-Modul. Und da dann *nicht* ``shell=True`` verwenden, sonst hast Du Dir am Ende die gleichen Probleme von `os.system()` wieder eingefangen.

Du könntest ein statisch kompiliertes ``ffmpeg`` zu Deinem Programm dazu packen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
malzbier
User
Beiträge: 13
Registriert: Mittwoch 25. November 2020, 09:42

Hallo Blackjack und vielen Dank für die Antwort.

Ich habe gad ein wenig recherchiert und habe jetzt folgendes zum Laufen gebracht:

1. FFMPEG static runtergeladen und in einem neuen Ordner (FFMPEG static) im Projekt gespeichert.
2. Dann den Code so verändert:
dir = os.path.dirname(__file__) + "/FFMPEG static/ffmpeg.exe"
subprocess.run([dir, "-ss", "00:01:00", "-i", "C:/videos/input.mp4", "-to", "00:02:00", "-c", "copy", "C:/videos/output.mp4"], shell=False)

Ist das so ok?

VG
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@malzbier: Das ``shell=False`` kannst Du weglassen, das ist der Defaultwert. Dafür macht ``check=True`` in der Regel Sinn, damit man Rückmeldung über Probleme bekommt.

”Pfadkram” würde man eher mit dem `pathlib`-Modul machen. Und ich würde das mit ffmpeg optional machen, so dass man auch ein systemweit/selbst installiertes verwenden kann. Insbesondere falls das der oder einer von wenigen Punkten wäre die ansonsten verhindern, dass das betriebssystemunabhängig ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
malzbier
User
Beiträge: 13
Registriert: Mittwoch 25. November 2020, 09:42

Alles klar!

Vielen Dank!
Antworten