Wie benutze ich ffmpeg mit Python durch die übergabe-Datei Objekte (anstelle von Standorten, um die Dateien auf der Festplatte)
Ich versuche, mit ffmpeg Python-subprocess-Modul zum umwandeln von audio-Dateien. Ich schnappe mir die audio-Dateien von einer URL und möchte nur in der Lage sein, um übergeben Sie die Python-Datei Objekte zu ffmpeg, anstelle des ersten abspeichern auf der Festplatte. Es wäre auch sehr schön, wenn ich da gerade wieder ein stream-Datei, anstatt ffmpeg speichern Sie die Ausgabe in eine Datei.
Als Referenz, dies ist, was ich jetzt mache:
tmp = "/dev/shm"
audio_wav_file = requests.get(audio_url)
## ## ##
## This is what I don't want to have to do ##
wavfile = open(tmp+filename, 'wrb')
wavfile.write(audio_wav_file.content)
wavfile.close()
## ## ##
conversion = subprocess.Popen('ffmpeg -i "'+tmp+filename+'" -y "'+tmp+filename_noext+'.flac" 2>&1', shell = True, stdout = subprocess.PIPE).stdout.read()
Weiß jemand, wie dies zu tun?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
mit ffmpeg können Sie
-
als Eingabe/Ausgabe-Datei-Namen, um anzuzeigen, dass Sie sollten Lesen Sie die Daten aus stdin /schreiben auf die Standardausgabe.Dann können Sie die
stdin
/stdout
ArgumentePopen
zu Lesen/schreiben Ihre Daten.Beispiel:
statt Sie liefert eine Datei für
stdin
Sie können auch einPIPE
und schreiben direkt in die Prozesse input-stream (p.stdin
). oder in Ihrem Fall würden Sie einfach verwenden wavfile...beachten Sie, dass die Angabe des Ausgabe-format und codecs explizit als ffmpeg nicht erraten können Sie aus der Datei-Endung, wie es in der Regel nicht.
und es funktioniert nur für Muxer, die brauchen nicht seekable output-streams, aber flac funktionieren sollte...
Da es sieht aus wie du bist auf Unix (Nr. exe-Datei auf das Ende der 'ffmpeg'), würde ich empfehlen, eine named pipe, eine.k.ein. fifo:
Haben das Python-Skript schreiben, das audio-Daten in "multimedia-Datei" und Fragen, die FFmpeg Lesen aus der gleichen Datei. Ich habe diese Muster zum Dekodieren von multimedia-Dateien in Ihre riesigen, rohen Darstellungen für die Validierung die zimmerreserviereung, ohne das zu belegen Speicherplatz.
Alternativ versuchen, die übergabe der 'http://...' URL direkt auf FFmpeg input option.