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
Ffmpeg direkt ins Programm einbinden
- __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.
Du könntest ein statisch kompiliertes ``ffmpeg`` zu Deinem Programm dazu packen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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
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
- __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.
”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