2010-06-01 43 views
25

Có rất nhiều libs để làm việc với các thẻ mp3, nhưng tôi chỉ cần 2 chức năng - chia nhỏ tập tin mp3 thành 2 phần và thứ hai để kết hợp 5 mp3.Thư viện Python để tách và ghép các tập tin mp3

Bạn có thể đề xuất bất cứ điều gì không? Cảm ơn!

+4

Khi bạn nối các file mp3 bạn sẽ tìm thấy một khoảng cách giữa chúng, vì mp3 là khối trụ sở và khối cuối cùng của một tập tin sẽ được lấp đầy với sự im lặng. –

Trả lời

5

Hãy xem MP3 file structure trên Wikipedia. Sử dụng chế độ đọc nhị phân trong python để chỉnh sửa tệp MP3. s = open(file_name, 'rb').read() sẽ đặt toàn bộ tệp vào đối tượng chuỗi biểu thị byte thô trong tệp của bạn (ví dụ: \xeb\xfe\x80). Sau đó, bạn có thể tìm kiếm và chỉnh sửa chuỗi, giải quyết các khoảng bù byte bằng phân bằng cách sử dụng dấu ngoặc đơn: s[n]. Cuối cùng, chỉ cần ghi một cách nhị phân các khung MP3 bạn muốn trong (các) tệp mới của bạn, thêm tiêu đề ID3 vào tập hợp các khung hình mà bạn muốn tạo thành từng tệp.

-4

sử dụng unix chia lệnh:

split -b 200k file.mp3 output_ 

này sẽ ra output_a, output_b, output_c, ..

sau đó bạn có thể nhận được các file mp3 chỉ bằng cách đổi tên

for file in ./output_*; do mv "$file" "$(basename $file).mp3"; done 

chí này output output_a.mp3, output_b.mp3, output_c.mp3 ... tất cả chúng (ngoại trừ cái cuối cùng, có thể là) có kích thước 200kb và tổng kích thước của output_x giống như file.mp3

bạn có thể sử dụng (sử dụng đĩa) du lệnh để có được số lượng của tập tin của byte và sau đó quyết định có bao nhiêu byte để cắt ..

du -sh file.mp3 

sau đó tham gia sử dụng lệnh cat:

cat output_2.mp3 output_3.mp3 output_4.mp3 > output.mp3 

tất nhiên bạn có thể đặt tất cả điều này trong một kịch bản lệnh shell và gọi nó từ python.

+2

Bạn sẽ không thể phát các phân đoạn như vậy. –

+0

Nhận xét là hữu ích, tuy nhiên, tách âm thanh là một cái gì đó hoàn toàn khác với tách cấu trúc nhị phân của tệp. –

67

Tôi đã viết một thư viện (pydub) cho khá nhiều trường hợp này sử dụng chính xác:

from pydub import AudioSegment 

sound = AudioSegment.from_mp3("/path/to/file.mp3") 

# len() and slicing are in milliseconds 
halfway_point = len(sound)/2 
second_half = sound[halfway_point:] 

# Concatenation is just adding 
second_half_3_times = second_half + second_half + second_half 

# writing mp3 files is a one liner 
second_half_3_times.export("/path/to/new/file.mp3", format="mp3") 
+0

@Jiaaro có thể tạo tạm dừng 2 giây giữa hai tệp không? – user544262772

+3

@ 발렌 텐 vâng, chỉ cần tạo phân đoạn âm thanh im lặng: 'two_sec_pause = AudioSegment.silent (duration = 2000)' mà bạn có thể ghép nối như bình thường 'sound1 + two_sec_pause + sound2' – Jiaaro

+0

lib này là một đá quý, cảm ơn bạn đã chia sẻ , điều này rất hữu ích, tôi đang phát triển một phần mềm cho người học ngôn ngữ tạo cho họ cơ hội để tạo ra âm thanh đào tạo được tạo từ các tập tin mp3 ngắn được nói. – user544262772

Các vấn đề liên quan