Verwandte:Python Extrakt wav aus Videodatei
How to extract audio from a video file using python?
Extract audio from video as wav
How to rip the audio from a video?
Meine Frage ist, wie könnte ich wav-Audiospur aus Video-Datei, sagen video.avi
extrahieren? Ich lese viele Artikel und überall schlagen Leute vor, (von Python) ffmpeg
als Unterprozess zu verwenden (weil es keine zuverlässigen Pythonbindungen zu ffmpeg gibt - die einzige Hoffnung war PyFFmpeg
, aber ich fand, dass es jetzt nicht beibehalten wird). Ich weiß nicht, ob es die richtige Lösung ist, und ich suche nach einem guten.
Ich sah gefunden gstreamer und es ist schön, aber nicht in der Lage meiner Bedürfnisse zu befriedigen - die einzige Art, wie ich dies von der Kommandozeile erreichen gefunden sieht aus wie
gst-launch-0.10 playbin2 uri=file://`pwd`/ex.mp4 audio-sink='identity single-segment=true ! audioconvert ! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)16000, channels=(int)1 ! wavenc ! filesink location=foo.wav’
Aber es ist nicht effizient, weil ich ewig warten müssen, während Video abspielen und gleichzeitig in die WAV-Datei schreiben.
ffmpeg
ist viel besser:
avconv -i foo.mp4 -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav
Aber ich bin nicht in der Lage es von Python zu starten (nicht als Befehlszeilen subprocess). Könnten Sie mir bitte die Vor- und Nachteile aufzeigen, wie Sie ffmpeg von Python als Kommandozeilenprogramm starten? (Ich meine Python multiprocessing
Modul oder etwas ähnliches).
Und zweite Frage.
Was ist eine einfache Möglichkeit, lange WAV-Datei in Stücke zu schneiden, so dass ich keine Worte brechen? ich meine Stücke von 10-20 sec Länge mit Anfang und Ende während der Pause in Sätzen/Wörtern?
ich weiß, wie sie auf beliebige Stücke zu brechen:
import wave
win= wave.open('ffaudio.wav', 'rb')
wout= wave.open('ffsegment.wav', 'wb')
t0, t1= 2418, 2421 # cut audio between 2413, 2422 seconds
s0, s1= int(t0*win.getframerate()), int(t1*win.getframerate())
win.readframes(s0) # discard
frames= win.readframes(s1-s0)
wout.setparams(win.getparams())
wout.writeframes(frames)
win.close()
wout.close()
Sie erwähnen 'ffmpeg', aber Sie verwenden' avconv'. – LordNeckbeard
Siehe http://stackoverflow.com/questions/9477115/who-can-tell-me-the-difference-and-relation-between-ffmpeg-libav-and-avconv. Sie sind verschiedene Projekte und ersetzen einander. 'avconv' wenn Gabel von' ffmpeg', die gemacht wurde, um sich von 'FFmpeg project' zu distanzieren. – xolodec
Wenn Sie ffmeg in ubuntu starten, sehen Sie folgende Meldung: 'Das ffmpeg-Programm wird nur für Skriptkompatibilität bereitgestellt und in einer zukünftigen Version entfernt. Es wurde im Libav-Projekt als veraltet eingestuft, um inkompatible Befehlszeilensyntaxverbesserungen in seiner Ersetzung namens avconv zuzulassen. Bitte verwenden Sie stattdessen avconv.' – xolodec