Wie viele MP3-Dateien beitreten/zusammenführen?

Wenn ich in Google nach dem Verbinden/Zusammenführen vieler MP3-Dateien suche, wird vorgeschlagen, dass ich sie nur cat zusammenfügen sollte.

Das könnte "funktionieren", aber es ist eindeutig nicht der richtige Weg, da jeder Header und jede Menge IDv3-Tags ebenfalls verkettet werden.

Gibt es ein Linux-Programm, das skriptgesteuert werden kann, um viele mp3 zu verbinden/zusammenzuführen?

Kann mplayer/mencoder / ffmpeg es tun?

 76
Author: Gaff, 2011-07-23

10 answers

Dadurch werden zwei MP3-Dateien verkettet, und die resultierenden Metadaten sind die der ersten Datei:

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

Dies liegt daran, dass für ffmpeg der gesamte Teil "concat:" eine einzelne "Eingabedatei" ist und seine Metadaten aus der ersten verketteten Datei bestehen. Wenn Sie stattdessen Metadaten aus der zweiten Datei verwenden möchten, müssen Sie sie als Dummy-Eingabedatei hinzufügen und ihre Metadaten der Ausgabe zuordnen:

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

Wenn Sie Ihre Metadaten aus den beiden Metadaten erstellen möchten, müssen Sie mach es von Hand. Sie können die Metadaten einer Datei mit

ffmpeg -i file1.mp3 -f ffmetadata file1.metadata

Nachdem Sie beide Metadaten abgelegt und neue Metadaten erstellt haben, können Sie sie mit -metadata zur Ausgabedatei hinzufügen und das Kopieren von Metadaten deaktivieren, indem Sie eine Zuordnung von -map_metadata aus einer negativen Eingabedatei festlegen Nummer. Dies setzt einen Namenswert und keine anderen Metadaten:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
 95
Author: Ambroz Bizjak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-10-21 10:57:13

Dadurch wird ein Ordner voller MP3 zu einer einzigen MP3-Datei verkettet:

1) Speichern Sie eine Liste der zu verkettenden MP3-Dateien, z. B.

$ cat mylist.txt
file '/tmp/01.mp3'
file '/tmp/02.mp3'
file '/tmp/03.mp3'
file '/tmp/04.mp3'
file '/tmp/05.mp3'
file '/tmp/06.mp3'
file '/tmp/07.mp3'

2) Führen Sie den folgenden Befehl aus (-safe 0 ist nicht erforderlich, wenn mylist.txt verwendet stattdessen relative Pfade):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
 23
Author: Miles Wolbe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-05-17 02:27:39

Mp3Wrap - Befehlszeilenprogramm, das mehrere MP3-Dateien in eine einzelne, abspielbare MP3-Datei einschließt, ohne Dateinamen oder ID3-Informationen zu verlieren und ohne neu zu kodieren. Unterstützt auch die Archivierung Nicht-Audio-Daten wie Wiedergabelisten, Info-Dateien und Cover-Bilder im MP3. Diese Dateien können später entpackt werden (z. B. mit mp3splt); Gewöhnliche MP3-Decoder können den gesamten Audiostream als eine lange Spur abspielen.

 14
Author: lig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-05-07 09:26:47

Basierend auf Miles Wolbes Antwort ist hier ein Einzeiler, der für mich funktioniert hat:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
 4
Author: Andy Balaam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-10-03 17:27:39

Wenn Sie alle MP3-Dateien des aktuellen Verzeichnisses verketten möchten:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3
 3
Author: hansaplast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-11-03 09:25:52

Zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3
 3
Author: HappyFace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-08-10 20:45:17

Wenn Sie Skripterstellung benötigen, ist es wahrscheinlich besser, die ffmpeg-Lösung zu verwenden. Wenn Sie jedoch jemals nur eine Anwendung benötigen, um solche Dinge zu tun, können Sie Audacity ausprobieren. Es ist Open Source und plattformübergreifend. Ich habe es nicht verwendet, um mp3s beizutreten, aber ich habe es verwendet, um Abschnitte aus einer MP3 zuzuschneiden und sie am Ende auszublenden. Ich bin bereit zu wetten, dass Sie mp3s beitreten und sie auch miteinander verblassen können.

 0
Author: Brandon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-07-23 22:23:19

Ein Liner basierend auf Miles Wolbes Antwort, alle .mp3 sortiert nach Namen im aktuellen Verzeichnis zu verbinden:

ffmpeg \
-f concat \
-safe 0 \
-i <(find "$(pwd)" -iname '*.mp3' -printf "file '%p'\n" | sort) \
-c copy \
merged.mp3

Der Befehl find findet ein beliebiges *.mp3 und druckt es mit file, das dem Pfad vorangestellt ist. $(pwd) lässt find den absoluten Pfad drucken. Rohrleitungen bis sort sortiert die Dateien nach Namen. <() ist Prozesssubstitution, mit der die Ausgabe von find als Inhalt einer Datei angezeigt werden kann.

 0
Author: aksh1618,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-08 07:07:03

Paar Windows-Skripte, die ich dazu erstellt habe (mit ffmpeg)

Verschanzt.Fledermaus -

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%f in ('dir /b *.mp3') do (
  echo file '%%f'
  )
endlocal

Mergemp3s. bat

call direnhanced.bat > fileList.txt
set /p FILENAME=Output file name then hit ENTER to continue...
ffmpeg -f concat -safe 0 -i fileList.txt -c copy "%FILENAME%.mp3"
 0
Author: owen gerig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-10 17:42:31

So erstellen Sie eine Liste Ihrer MP3-Dateien in einem Format, das den Anforderungen entspricht, wie zum Beispiel:

file '01.mp3'
file '02.mp3'
file '03.mp3'

Sie können dies über die Windows-Eingabeaufforderung tun: (Vorausgesetzt, das aktuelle Verzeichnis befindet sich im Ordner mp3 files)

C:>(für %i in (*.mp3) do @echo file '%i') > mylist.txt

 0
Author: Harry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-31 17:03:01