2015-08-18 22 views
7

Ok, bây giờ tôi bị kẹt trong chuyển đổi mp3 thành wav. Tôi đã thấy câu trả lời khác nhau nhưng tôi nghĩ rằng tôi sẽ đi cho một trong pydub, mà tôi đã không sử dụng những vài dòngPython chuyển đổi mp3 sang wav bằng Pydub

from pydub import AudioSegment 

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

nhưng khi tôi chạy đoạn mã trên, tôi nhận được lỗi sau

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

Tôi không biết tại sao nó làm tăng lỗi này vì tôi rất chắc chắn tệp tồn tại. Mặc dù tôi có câu trả lời cho thấy cài đặt ffmpeg nhưng tôi không biết liệu có ảnh hưởng đến triển khai ứng dụng hay không sau bất kỳ cách nào sau này trên

Trả lời

6

Mô-đun pydub sử dụng các chương trình thực hiện chuyển đổi thực tế. Vì vậy, bạn phải cài đặt ffmpeg để thực hiện công việc này.

Nhưng nếu bạn không cần pydub cho bất cứ điều gì khác, bạn chỉ có thể sử dụng được xây dựng trong subprocess module để gọi một chương trình chuyển đổi như ffmpeg như thế này:

import subprocess 

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

Điều này đòi hỏi nhị phân ffmpeg là ở một vị trí trong $ PATH của bạn, bằng cách này.

Chỉnh sửa: Với ffmeg, bạn không thể chuyển đổi âm thanh nổi thành mono, theo như tôi biết. Bạn chỉ có thể chọn kênh trái hoặc phải. Tôi giả định đây không phải là những gì bạn muốn.

Các sox chương trình thể chuyển đổi âm thanh stereo để mono:

import subprocess 

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

này sẽ lấy mẫu tại 16 kHz, với 8 bit/mẫu, đem lại cho bạn 16 kb/s.

+0

nhờ, nó thực sự giúp đỡ. nhưng bây giờ tôi cần phải chuyển đổi tập tin mp3 trực tiếp sang mono wav với subprocess và ffmpeg, sẽ thực sự đánh giá cao nếu u có thể đưa ra một tay – phourxx

+1

@ user3760740 Theo như tôi biết, bạn không thể chuyển đổi đầu vào âm thanh stereo thành đầu ra mono với 'ffmpeg'. Bạn có thể làm điều này với 'sox', xem câu trả lời cập nhật. –

+0

@RolandSmtih cảm ơn, hãy kiểm tra trên 'sox'. nhưng có cách nào tôi có thể lực lượng đầu ra được 16kb/s mono wav với sox – phourxx

2

Bạn phải truy cập pydub, đây là mô-đun tuyệt vời cho các hoạt động liên quan đến tệp âm thanh.

LƯU Ý. Hãy nhớ cài đặt ffmpeg trước khi bạn sử dụng pydub.

Để được trợ giúp về cài đặt ffmpeg, bạn có thể sử dụng số link này.

Sau đó để cài đặt pydub chỉ cần mở cửa sổ lệnh và gõ

pip install pydub 

Sau đó, để chuyển đổi bất kỳ tập tin từ mp3 sang wav chỉ cần sử dụng pydub như

import pydub 
sound = pydub.AudioSegment.from_mp3("D:/example/apple.mp3") 
sound.export("D:/example/apple.wav", format="wav") 
Các vấn đề liên quan