2010-06-01 7 views
25

Es gibt eine Menge von Bibliotheken mit MP3-Tags zu arbeiten, aber ich brauche nur 2 Funktionen - mp3-Datei in 2 Teile teilen und die zweite 5 mp3 zusammenführen.Python-Bibliothek zum Teilen und Verbinden von MP3-Dateien

Können Sie etwas vorschlagen? Danke!

+4

Wenn Sie MP3-Dateien beitreten werden Sie eine Lücke zwischen ihnen, weil mp3-Block und der letzte Block einer Datei basierte wird mit Stille erfüllt sein. –

Antwort

5

Werfen Sie einen Blick auf die MP3 file structure auf Wikipedia. Verwenden Sie den binären Lesemodus in Python, um die MP3-Datei zu bearbeiten. s = open(file_name, 'rb').read() wird die gesamte Datei in ein Zeichenfolgenobjekt stellen, das die unformatierten Bytes in Ihrer Datei darstellt (z. B. \xeb\xfe\x80). Sie können dann die Zeichenfolge suchen und bearbeiten, indem Sie die Byte-Offsets mit Indizes unter Verwendung von Klammern adressieren: s[n]. Schließlich, machen Sie einfach einen binären Schreibvorgang der MP3-Frames, die Sie in Ihren neuen Dateien haben wollen, und hängen Sie den ID3-Header an den Satz von Frames an, die Sie für jede Datei erstellen möchten.

-4

die Unix verwenden aufgeteilt Befehl:

split -b 200k file.mp3 output_ 

erhalten Sie folgende Ausgabe output_a, output_b, output_c, ..

Sie dann nur MP3-Dateien bekommen können von

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

dieser Wille Umbenennung Ausgabe output_a.mp3, output_b.mp3, output_c.mp3 ... alle von ihnen (mit Ausnahme der letzten, kann sein) sind 200kb groß, und die Gesamtgröße von output_x ist die gleiche wie file.mp3

können Sie die du (Festplattennutzung) verwenden Sie den Befehl der Datei Anzahl von Bytes zu erhalten und dann entscheiden, wie viele Bytes zu schneiden ..

du -sh file.mp3 

verwenden Sie dann den Befehl cat beitreten:

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

natürlich können Sie all dies in ein Shell-Skript setzen und es aus Python aufrufen.

+2

Sie können solche Segmente nicht abspielen. –

+0

Der Kommentar ist nützlich, aber das Teilen des Audiomaterials ist etwas ganz anderes als das Teilen der Binärstruktur der Datei. –

67

ich eine Bibliothek (pydub) für so ziemlich genau diesen Anwendungsfall schrieb:

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 ist es möglich, eine Pause von 2 Sekunden zwischen zwei Dateien zu erstellen? – user544262772

+3

@ 발렌 텐 ja, einfach ein Silent-Audio-Segment erstellen: 'two_sec_pause = AudioSegment.silent (duration = 2000)', die Sie dann verketten können wie normal 'sound1 + two_sec_pause + sound2' – Jiaaro

+0

diese lib ist ein Juwel, danke für Ihre Aktie , das ist sehr hilfreich, ich entwickle eine Software für Sprachlerner, die ihnen die Möglichkeit gibt, Trainingsgeräusche zu erzeugen, die aus gesprochenen kurzen mp3-Dateien bestehen. – user544262772

Verwandte Themen