Seite 1 von 1

Ffmpeg direkt ins Programm einbinden

Verfasst: Dienstag 16. Februar 2021, 11:08
von malzbier
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

Re: Ffmpeg direkt ins Programm einbinden

Verfasst: Dienstag 16. Februar 2021, 12:01
von __blackjack__
@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.

Re: Ffmpeg direkt ins Programm einbinden

Verfasst: Dienstag 16. Februar 2021, 13:44
von malzbier
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

Re: Ffmpeg direkt ins Programm einbinden

Verfasst: Dienstag 16. Februar 2021, 14:14
von __blackjack__
@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.

Re: Ffmpeg direkt ins Programm einbinden

Verfasst: Dienstag 16. Februar 2021, 14:38
von malzbier
Alles klar!

Vielen Dank!