2010-06-01 68 views
25

Ci sono un sacco di librerie per funzionare con i tag mp3, ma ho bisogno solo di 2 funzioni: dividere il file mp3 in 2 parti e il secondo per unire 5 mp3.Libreria Python per dividere e unire file mp3

Potete suggerire qualcosa? Grazie!

+4

Quando si entra in file mp3 si trova un divario tra di loro, perché mp3 è blocco base e l'ultimo blocco di un file sarà pieno di silenzio. –

risposta

5

Dai un'occhiata allo MP3 file structure su Wikipedia. Usa la modalità di lettura binaria in python per modificare il file MP3. s = open(file_name, 'rb').read() inserirà l'intero file in un oggetto stringa che rappresenta i byte non elaborati nel file (ad esempio \xeb\xfe\x80). È quindi possibile cercare e modificare la stringa, indirizzando gli offset dei byte con gli indici usando le parentesi: s[n]. Infine, basta fare una scrittura binaria dei frame MP3 che si desidera nei nuovi file, aggiungendo l'intestazione ID3 all'insieme di frame che si desidera creare in ciascun file.

-4

utilizzare il Comando Unix diviso:

split -b 200k file.mp3 output_ 

questa uscita output_a volontà, output_b, output_c, ..

è possibile quindi ottenere file mp3 semplicemente rinominando

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

questa volontà output output_a.mp3, output_b.mp3, output_c.mp3 ... tutti (tranne l'ultimo, possono essere) hanno una dimensione di 200kb e la dimensione totale di output_x è la stessa di file.mp3

è possibile utilizzare il (utilizzo del disco) du comando per ottenere il numero del file di byte e poi decidere quanti byte tagliare ..

du -sh file.mp3 

poi ad unirsi usare il comando cat:

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

ovviamente puoi mettere tutto questo in uno script di shell e chiamarlo da python.

+2

Non sarà possibile riprodurre tali segmenti. –

+0

Il commento è utile, tuttavia, la divisione dell'audio è qualcosa di completamente diverso dalla divisione della struttura binaria del file. –

67

ho scritto una libreria (pydub) per praticamente questo esatto caso d'uso:

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 è possibile creare una pausa di 2 secondi tra due file? – user544262772

+3

@ 발렌 텐 si, basta creare un segmento audio silenzioso: 'two_sec_pause = AudioSegment.silent (duration = 2000)' che puoi quindi concatenare come normale 'sound1 + two_sec_pause + sound2' – Jiaaro

+0

questo lib è un gioiello, grazie per la tua condivisione , questo è molto utile, sto sviluppando un software per gli studenti di lingue dando loro l'opportunità di generare suoni di formazione realizzati da brevi file mp3 di parole pronunciate. – user544262772