2015-08-18 10 views
7

Ok, teraz utknąłem w konwersji mp3 na wav. Widziałem różne odpowiedzi, ale myślę, że chciałbym, aby przejść do jednego z pydub, co ja już nie przy użyciu tych kilka linijekPython konwertuje mp3 na wav z Pydubem

from pydub import AudioSegment 

AudioSegment.from_mp3("/input/file.mp3").export("/output/file.wav", format="wav") 

ale kiedy uruchomić powyższy kod, otrzymuję następujący błąd

C:\Python27\lib\site-packages\pydub-0.14.2-py2.7.egg\pydub\utils.py:165: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work

Traceback (most recent call last): File "C:/Users/phourlhar/Desktop/VoiceDetector/yeah.py", line 7, in stereo_to_mono()

File "C:\Users\phourlhar\Desktop\VoiceDetector\utils.py", line 25, in stereo_to_mono

sound = AudioSegment.from_mp3(PROJECT_DIR+'\\files\\rec'+str(c)+'.mp3') 

File "build\bdist.win32\egg\pydub\audio_segment.py", line 346, in from_file

File "C:\Python27\lib\subprocess.py", line 711, in init errread, errwrite)

File "C:\Python27\lib\subprocess.py", line 948, in _execute_child startupinfo)

WindowsError: [Error 2] The system cannot find the file specified

Nie wiem, dlaczego powoduje to błąd, ponieważ jestem pewien, że plik istnieje. Chociaż mam odpowiedzi sugerujące instalacji ffmpeg, ale nie wiem, czy wpływ na wdrażanie aplikacji w żaden sposób później

Odpowiedz

6

Moduł pydub używa albo ffmpeg lub avconf programy zrobić rzeczywistą przemianę. Aby to działało, musisz zainstalować ffmpeg.

Ale jeśli nie trzeba pydub do niczego innego, można po prostu użyć wbudowanego modułu subprocess zadzwonić program konwerter jak ffmpeg tak:

import subprocess 

    subprocess.call(['ffmpeg', '-i', '/input/file.mp3', 
        '/output/file.wav']) 

Wymaga to binarna jest ffmpeg w ten sposób w miejscu w twojej $ PATH.

Edytuj: Z ffmeg nie można konwertować dźwięku stereo na mono, o ile wiem. Możesz tylko wybrać lewy lub prawy kanał. Zakładam, że to nie jest to, czego chcesz.

Program soxmoże konwertować stereo na mono:

import subprocess 

    subprocess.call(['sox', '/input/file.mp3', '-e', 'mu-law', 
        '-r', '16k', '/output/file.wav', 'remix', '1,2']) 

Będzie próbki przy 16 kHz, 8 bitów/próbkę, co daje 16 kb/s.

+0

dzięki, to naprawdę pomogło. ale teraz muszę przekonwertować plik mp3 bezpośrednio na mono wav z podprocesorem i ffmpeg, byłby naprawdę wdzięczny, gdybyś mógł podać dłoń – phourxx

+1

@ user3760740 Z tego co wiem, nie można konwertować wejścia stereo na wyjście mono za pomocą 'ffmpeg'. Możesz to zrobić za pomocą 'sox', zobacz zaktualizowaną odpowiedź. –

+0

@RolandSmtih dzięki, sprawdź na "sox". ale czy istnieje sposób, w jaki mogę zmusić wyjście do 16kb/s mono wav z soxem – phourxx

2

Musisz iść na pydub, to świetny moduł do operacji związanych z plikami audio.

UWAGA. Pamiętaj, aby zainstalować ffmpeg przed użyciem programu pydub.

Aby uzyskać pomoc dotyczącą instalacji urządzenia ffmpeg, można użyć tego link.

Następnie zainstalować pydub prostu otworzyć wiersz polecenia i wpisz

pip install pydub 

Następnie przekonwertować dowolny plik z mp3 do wav wystarczy użyć pydub jak

import pydub 
sound = pydub.AudioSegment.from_mp3("D:/example/apple.mp3") 
sound.export("D:/example/apple.wav", format="wav")