Verketten mehrerer MP3-Dateien zu einer MP3-Datei

46

Wie es hier vorgeschlagen wurde , verwende ich catBefehl, um einige .mp3 Akten in eine .mp3 Akte zu verketten.

Stellen Sie sich vor, ich habe folgende .mp3-Dateien im aktuellen Ordner:

001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3

oder so:

096001.mp3 096002.mp3 096003.mp3 096004.mp3

Ich muss diese .mp3-Dateien in aufsteigender Reihenfolge verketten, dh 001001.mp3+001002.mp3+001003.mp3+etc.

Um diese .mp3-Dateien zu einer zusammenzufügen, führe ich folgenden Befehl im aktuellen Ordner aus:

cat *.mp3 > final.mp3

Ich habe die endgültige .mp3-Datei getestet und es ist das, was ich erwartet habe, aber ich muss sicher sein , dass der obige Befehl die Dateien in aufsteigender Reihenfolge auswählt .

Kann ich sicher sein, dass der obige Befehl Dateien immer in aufsteigender Reihenfolge verkettet?

Vielen Dank, Sir !

Bakhtiyor
quelle

Antworten:

46

catist nicht das richtige Werkzeug für diesen Job. Das MP3-Format hat alle Arten von Müll, der am Anfang und Ende der Datei lauern kann, und dies muss gestrippt werden. mp3wrapist was du willst. Es werden alle Metadaten in den Dateien ausgeschlossen und die Audiodaten zusammengehalten.

sudo apt-get install mp3wrap
mp3wrap output.mp3 *.mp3

Bevor Sie dies tun, ls *.mp3überprüfen Sie, ob sie in der richtigen Reihenfolge sind. Als ich diese Antwort ursprünglich schrieb (vor über sechs Jahren!), Haben sich Wildcard-Globs anscheinend nicht gut verhalten, aber ich denke, das tun sie jetzt.

Möglicherweise müssen Sie die Dateien umbenennen, wenn sie beispielsweise nummeriert, aber nicht mit Nullen aufgefüllt sind {1-11}.mp3und sortiert werden sollen 1 10 11 2 3 4 5 6 7 8 9. Dies kann leicht behoben werden .

Oli
quelle
2
Right - cat verändert das MP3 - Dateiformat, indem es (sozusagen) ein Array von MP3 - Dateien in einer einzelnen MP3 - Datei erstellt. Aber es scheint zu funktionieren, wenn die Player-Software intelligent genug ist.
Dies funktionierte besser für mich, weil es MP3s mit Leerzeichen im Dateinamen behandelt:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
Bmaupin
@bmaupin Ein guter Punkt, aber ich bin mir nicht sicher, warum ich nicht nur die Wildcard-Erweiterung von Bash verwendet habe. *.mp3sollte ausreichen (und funktioniert mit Leerzeichen).
Oli
Erhältlich für Mac von Brew Package Manager! $ brew install mp3wrap.
Rubens
1
Bei bash *.mp3bleibt die alphabetische Reihenfolge garantiert erhalten. Wenn Ihre Dateien,, heißen 09.mp3, 10.mp3ist 11.mp3das wahrscheinlich das, was Sie wollen. Wenn Ihre Dateien den Namen,, haben 9.mp3, 10.mp3ist 11.mp3das wahrscheinlich nicht das, was Sie wollen, aber Sie können es tun `ls *.mp3 | sort -n`.
Jo Liss
27

mp3wrap scheint eine anständige Lösung zu sein, aber als ich die resultierende Datei abgespielt habe, war der Zeitstempel nicht korrekt. Es scheint, als würde mp3wrap am besten verwendet, wenn Sie mp3s zu einer Datei zusammenfügen, von der Sie wissen, dass Sie sie später teilen möchten.

Ich wollte einfach nur einige MP3s dauerhaft miteinander verketten. Am Ende habe ich ffmpeg verwendet, um die Dateien zu verketten:

  1. Installieren Sie zuerst ffmpeg

    • Ubuntu 15.04+

      sudo apt install ffmpeg
    • Ubuntu 14.10 und niedriger
      Gehen Sie zu http://ffmpeg.org/download.html , laden Sie einen der statischen Builds herunter, entpacken Sie ihn und kopieren Sie ihn nach / usr / local / bin

  2. ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

Weitere Informationen: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

Bmaupin
quelle
ffmpegfehlt, avconversetzt es aber: askubuntu.com/questions/432542/…
muru
2
Ja, ich habe avconv für eine Weile benutzt, aber dann brauchte ich einige Funktionen, die ffmpeg hatte und avconv nicht, und ich habe es seitdem nicht mehr benutzt. Heutzutage ist es eine Zeitverschwendung zu prüfen, ob avconv die Funktionen bietet, die ich benötige, wenn ich bereits mit ffmpeg vertraut bin.
Bmaupin
Fühlen Sie sich eingeladen, an dieser Diskussion über Fehlerberichte teilzunehmen.
Orschiro
Ich habe es versucht und es funktioniert nicht gut. Wenn Sie versuchen, output.mp3a mp3valauszuführen, werden alle Arten von Fehlern angezeigt, die Wiedergabeprobleme in Chrome64 + verursachen (siehe bugs.chromium.org/p/chromium/issues/detail?id=794782 und bugs.chromium.org/p/chromium/). Fragen / Detail? id = 806601 # c10 )
Nino Škopac
tolle lösung. trotzdem die songs zu normalisieren?
ar2015
8

Wie bereits vorgeschlagen, mp3wrapist eine gute Lösung. Es funktioniert jedoch möglicherweise nicht immer. Soweit ich weiß, wird mp3wrapdavon ausgegangen, dass alle Eingabedateien die gleichen Eigenschaften wie VBR vs CBR, Bitrate usw. haben. Wenn diese Annahme nicht erfüllt ist, ist es wahrscheinlich, dass es fehlschlägt. In diesem Fall wäre die einzige Lösung, alle mp3-Dateien in ein Rohformat wie zu dekodieren .wav, sie mit einem Programm wie zu verketten soxund durch erneutes Kodieren in mp3 zu beenden.

Loevborg
quelle
Beachten Sie, dass das Neukodieren von MP3-Dateien (auch als "Transkodieren" bezeichnet) zu einem Qualitätsverlust führt. Ich würde es nicht empfehlen.
Martin Tournoij
5

Es wird alphabetisch nach einzelnen Zeichen sortiert. Das bedeutet, dass "01" vor "1" steht, da nichts einen niedrigeren Wert als eins hat.

Hier ist ein Beispiel. Ich habe ein Verzeichnis mit den Dateien 1, 2, 3, 04, 05 und 06. Es handelt sich um Textdateien mit eigenen Dateinamen:

test$ cat *
04
05
06
1
2
3

Also ja , das wird es; Sie müssen jedoch sicherstellen, dass alle Ihre Dateien ordnungsgemäß gepolstert sind.

Mit dieser raffinierten Zeile von Bash-Skripten können Sie die Dateinamen visuell vergleichen und so Fehler leicht erkennen:

for f in $(ls); do printf "%05s\n" "$f"; done

Die Ausgabe sieht folgendermaßen aus:

   04
   05
   06
    1
    2
    3

Wenn dies nicht der Fall ist, müssen Sie die Dateinamen auffüllen: Bash-Skript zum Auffüllen von Dateinamen in StackOverflow erklärt, wie dies gemacht wird.


Bearbeiten. Stimmen Sie für Olis Antwort, es ist viel besser. : P
Ich lasse meins, weil es etwas hinzufügt, aber du solltest seine Lösung verwenden,

mp3wrap output.mp3 `ls -1 *.mp3 | sort`

Denken Sie daran, dass sortdie Sortierung weiterhin auf die oben beschriebene Weise erfolgt. Sie müssen die Dateinamen auch dann auffüllen, wenn sie nicht gleich lang sind.

Stefano Palazzo
quelle
4

Die meisten Leute schlagen vor mp3wrap, aber es hat Nachteile: Die generierte Datei meldet bei einigen Playern nicht ihre volle Länge, und dann können Sie nicht über diesen Punkt hinaus suchen.

mp3caterledigt den Job schnell und gut, soweit ich das beurteilen kann. Es kann unter http://mulholland.xyz/dev/mp3cat/ heruntergeladen und wie folgt verwendet werden:

mp3cat file1.mp3 file2.mp3 file3.mp3

Eine andere Möglichkeit wäre sox

sudo apt-get install sox libsox-fmt-mp3
sox file1.mp3 file2.mp3 target.mp3

aber es scheint sehr langsam zu sein (möglicherweise dekodiert und kodiert es das Audio neu?)

josinalvo
quelle
3

Ich fand, dass der Online-Dienst Audio-Joiner sehr gut funktioniert und den korrekten Zeitstempel beibehält (im Gegensatz zu mp3wrap).

Orschiro
quelle
0

Vielleicht möchten Sie versuchen , ein spezielles Audio - Editing - Programm (wie Audacity )

Gesetz und
quelle
0

Ich liebe den Kommentar von bmaupin , aber er könnte natürlich (Versions-) Zahlen erzeugen, indem er verwendet sort -V:

find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3

und Sie müssen nicht mit Sonderzeichen wie ' " () [] {}im Dateinamen umgehen .

zhoux
quelle