Powiązane:Python ekstrakt wav z pliku wideo
How to extract audio from a video file using python?
Extract audio from video as wav
How to rip the audio from a video?
Moje pytanie brzmi: w jaki sposób mogę wyodrębnić wav ścieżki dźwiękowej z plików wideo, powiedzmy video.avi
? Czytam wiele artykułów i wszędzie ludzie sugerują używać (z Python) ffmpeg
jako podprocesu (ponieważ nie ma żadnych niezawodnych powiązań Pythona z ffmpeg - jedyną nadzieją było PyFFmpeg
, ale znalazłem, że jest teraz niemobilny). Nie wiem, czy to właściwe rozwiązanie i szukam dobrego.
Spojrzałem na GStreamer i okazało się, że ładne, ale niezdolny do zaspokojenia moich potrzeb - jedyny sposób znalazłem do osiągnięcia tego z wiersza poleceń wygląda
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’
Ale to nie jest skuteczny, bo trzeba czekać wieki, podczas gdy odtwarzanie wideo i jednoczesne zapisywanie do pliku wav.
ffmpeg
jest znacznie lepiej:
avconv -i foo.mp4 -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav
ale jestem w stanie uruchomić go od python (nie jako podproces linii poleceń). Czy możesz wskazać mi plusy i minusy uruchamiania ffmpeg z Pythona jako narzędzia wiersza poleceń? (Mam na myśli użycie modułu python multiprocessing
lub czegoś podobnego).
Drugie pytanie.
Co to jest prosty sposób cięcia długiego pliku WAV na kawałki, aby nie łamać żadnych słów? mam na myśli kawałki o długości 10-20 sekund z początkiem i końcem podczas przerwy w zdaniach/słowach?
wiem jak złamać je na dowolnych elementów:
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()
Wspominasz 'ffmpeg', ale używasz' avconv'. – LordNeckbeard
Zobacz http://stackoverflow.com/questions/9477115/who-can-tell-me-the-difference-andrelation-between-ffmpeg-libav-and-avconv. Są to różne projekty i zastępowanie się nawzajem. 'avconv', jeśli rozwidlenie' ffmpeg', które zostało zrobione, aby zdystansować się od 'projektu FFmpeg'. – xolodec
Jeśli uruchomisz program ffmeg w Ubuntu, zobaczysz następujący komunikat: 'Program ffmpeg zapewnia tylko zgodność ze skryptami i zostanie usunięty w przyszłej wersji. Został przestarzały w projekcie Libav, aby umożliwić niekompatybilne ulepszenia składni wiersza poleceń w jego zastępstwie o nazwie avconv. Proszę użyć avconv zamiast. " – xolodec