Как объединить / слить много mp3 файлов?

59

Поиск в Google о том, как объединить / объединить множество mp3-файлов, предлагает мне просто соединить catих.

Это может «работать», но очевидно, что это не правильный способ, так как каждый заголовок и набор тегов IDv3 также будут объединены.

Существует ли программа для Linux, которая может быть написана для объединения / слияния многих mp3?

Может ли mplayer / mencoder / ffmpeg сделать это?

Sandra
источник

Ответы:

79

Это объединит два mp3-файла, и в результате метаданные будут такими же, как у первого файла:

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

Это связано с тем, что для ffmpeg вся часть concat: представляет собой один «входной файл», а его метаданные будут относиться к первому объединенному файлу. Если вы хотите использовать вместо этого метаданные из второго файла, вы должны добавить его в качестве фиктивного входного файла и сопоставить его метаданные с выходными данными:

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

Если вы хотите создать свои метаданные из двух метаданных, вам придется делать это вручную. Вы можете сбросить метаданные файла с

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

После выгрузки обоих метаданных и создания новых метаданных вы можете добавить их в выходной файл с помощью -metadataи отключить копирование метаданных, установив -map_metadataсопоставление с отрицательным номером входного файла. Это устанавливает значение имени и никаких других метаданных:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
Амброз Бижак
источник
К вашему сведению, это требует определенной версии ffmpeg. Если он говорит, что файл не найден concat ... попробуйте обновить и запустить его снова
Sameer
Прекрасно работает в ffmpeg 0.10.4 в Gentoo. Что вы используете? Вы уверены, что просто не набрали команду?
Амброз Бизжак
1
Просто хотел уточнить некоторые вещи для других: -acodecозначает, что будет использоваться аудиокодек, и copyозначает, что будут только мультиплексирование и демультиплексирование, но не кодирование / транскодирование (то есть очень быстрое и без потери качества)
Housemd
1
Было бы замечательно, если бы существовала программа с графическим интерфейсом, в которой я мог бы перетаскивать несколько файлов (например, сортировать в хронологическом порядке для записей, записанных последовательно, и, возможно, некоторые файлы редактировались), и тогда он выводил один файл.
Джеймс Рэй
1
Это хороший ответ, однако почти во всех случаях результирующий файл MP3 имеет короткий (менее секунды) промежуток между тем, где файлы были объединены. Так что, если вы пытаетесь объединить MP3-треки, чтобы создать плавный альбом / набор / что-нибудь для воспроизведения, это не совсем правильно.
Ящерица
13

Mp3Wrap - Утилита командной строки, которая объединяет несколько файлов MP3 в один воспроизводимый файл MP3 без потери имен файлов или информации ID3 и без перекодирования. Также поддерживает архивирование не аудио данных, таких как списки воспроизведения, информационные файлы и изображения обложек в MP3. Эти файлы могут быть распакованы позже (например, с помощью mp3splt); обычные MP3-декодеры могут воспроизводить весь аудиопоток как одну длинную дорожку.

LIG
источник
1
Спасибо за эту рекомендацию ... намного более легкое / простое решение, чем ffmpeg, так как я комбинировал более 100 mp3 и хотел опцию разделения на оригиналы.
Джошбаптист
Это свойство больше не работает - попробуйте объединить несколько файлов и проверить выходной файл mp3val- оно сообщит об ошибках синхронизации. Это означает, что он не будет воспроизводиться после первого фрагмента в Chrome 64+ (см. Bugs.chromium.org/p/chromium/issues/detail?id=794782 и bugs.chromium.org/p/chromium/issues/detail?id = 806601 # c10 )
Housemd
Кажется, не работает на Windows. Метаданные не сохранены.
Грубер
9

Это объединит папку с MP3 в один файл MP3:

1) Сохраните список файлов MP3 для объединения, например,

$ 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) Выполните следующую команду ( -safe 0это не требуется , если mylist.txt использует относительные пути вместо ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
Майлз Вольбе
источник
3

Если вы хотите объединить все mp3-файлы текущего каталога:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3
HANSAPLAST
источник
0

Если вам нужен сценарий, вам, вероятно, лучше использовать решение ffmpeg. Однако, если вам когда-нибудь понадобится приложение для подобных вещей, вы можете попробовать Audacity . Это открытый исходный код и кросс-платформенный. Я не использовал это, чтобы присоединиться к mp3, но я использовал это, чтобы вырезать разделы из mp3 и затемнять их в конце. Я готов поспорить, что вы можете присоединиться к mp3 и добавить их друг к другу вместе с этим.

Brandon
источник
4
Насколько мне известно, Audacity работает с необработанными звуковыми данными, и конкатенация mp3-файлов с ними приведет к ухудшению из-за транскодирования.
Амброз Бизжак
0

ЗШ:

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

audio-join output.mp3 *.mp3
Счастливое лицо
источник
Мы ожидаем, что ответы будут включать объяснения. (Не все ответы на этой странице являются хорошими примерами.)
Скотт
0

Исходя из ответа Майлза Вольба, вот одна строчка, которая работала для меня:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
Энди Валаам
источник