Объединение нескольких файлов .mp3 в один .mp3

46

Как было предложено здесь, я использую catкоманду для объединения нескольких файлов .mp3 в один файл .mp3.

Представьте, у меня есть следующие файлы .mp3 в текущей папке:

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

или вот так:

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

Мне нужно объединить эти файлы .mp3 в порядке возрастания, то есть 001001.mp3+001002.mp3+001003.mp3+etc.

Чтобы объединить эти файлы .mp3 в один, я выполняю следующую команду в текущей папке:

cat *.mp3 > final.mp3

Я протестировал окончательный файл .mp3, и это то, что я и ожидал, но я должен быть уверен, что приведенная выше команда выбирает файлы в порядке возрастания.

Могу ли я быть уверен, что приведенная выше команда всегда объединяет файлы в порядке возрастания?

Спасибо, сэр !

Бахтиер
источник

Ответы:

46

catэто не правильный инструмент для этой работы. В формате MP3 есть все виды мусора, которые могут скрываться в начале и в конце файла, и его необходимо удалить. mp3wrapэто то, что вы хотите. Это исключит любые метаданные в файлах и склеит аудио.

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

Прежде чем сделать это, запустите, ls *.mp3чтобы убедиться, что они в правильном порядке. Когда я изначально писал этот ответ (более шести лет назад!), Подстановочные знаки явно не вели себя хорошо, но я думаю, что они делают сейчас.

Вам может потребоваться переименовать файлы, если, например, они пронумерованы, но не дополнены нулями, {1-11}.mp3будут отсортированы по 1 10 11 2 3 4 5 6 7 8 9. Это можно легко исправить .

Оли
источник
2
Справа - cat будет манипулировать форматом mp3, «создавая массив» (как бы) mp3-файлов в одном mp3-файле. Но, похоже, работает, если программное обеспечение плеера достаточно умное.
Это работало лучше для меня, потому что это обрабатывает mp3 с пробелами в имени файла:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin
@bmaupin Справедливо, но я не уверен, почему я не использовал расширение подстановочного знака Bash. *.mp3должно хватить (и работает с пробелами).
Оли
Доступно для Mac от менеджера пакетов brew ! $ brew install mp3wrap,
Рубенс
1
В bash *.mp3гарантированно сохраняется алфавитный порядок. Если ваши файлы называются 09.mp3, 10.mp3, 11.mp3, то, вероятно , что вы хотите. Если ваши файлы называются 9.mp3, 10.mp3, 11.mp3, это, вероятно , не то , что вы хотите, но вы можете сделать `ls *.mp3 | sort -n`.
Джо Лисс
27

mp3wrap кажется достаточно приличным решением, но когда я проиграл полученный файл, временная метка была неправильной. Кажется, mp3wrap лучше всего использовать, когда вы объединяете mp3 в файл, который, как вы знаете, вы захотите разделить позже.

Я просто хотел навсегда соединить несколько mp3 вместе. В итоге я использовал ffmpeg для объединения файлов:

  1. Сначала установите ffmpeg

    • Ubuntu 15.04+

      sudo apt install ffmpeg
    • Ubuntu 14.10 и ниже
      Перейдите по адресу http://ffmpeg.org/download.html , загрузите одну из статических сборок, распакуйте ее и скопируйте в / usr / local / bin

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

Дополнительная информация: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

bmaupin
источник
ffmpegотсутствует, но avconvзаменяет его: askubuntu.com/questions/432542/…
muru
2
Да, я некоторое время использовал avconv, но потом мне понадобились некоторые функции, которые есть у ffmpeg, а у avconv нет, и с тех пор я ими не пользовался. В наши дни кажется, что проверять, есть ли у avconv те функции, которые мне нужны, когда я уже знаю, что ffmpeg - это пустая трата времени.
bmaupin
Пожалуйста, приглашайте присоединиться к обсуждению отчета об ошибках.
Орширо
Я пробовал это, и это не работает отлично; попробуйте запустить output.mp3через a, mp3valи вы увидите все виды ошибок, которые будут создавать проблемы с воспроизведением в Chrome64 + (см. bugs.chromium.org/p/chromium/issues/detail?id=794782 и bugs.chromium.org/p/chromium/ проблемы / детали? id = 806601 # c10 )
Нино Шкопац
отличное решение. в любом случае, чтобы нормализовать песни тоже?
ar2015
8

Как ранее предлагалось, mp3wrapэто хорошее решение. Это может не работать все время, хотя. Насколько я знаю, mp3wrapпредполагается, что все входные файлы имеют одинаковые характеристики, такие как VBR против CBR, битрейт и так далее. Если это предположение не будет выполнено, оно, скорее всего, потерпит неудачу. В этом случае единственным решением будет декодировать все mp3-файлы в сырой формат, например .wav, объединить их с помощью программы soxи завершить, перекодировав все в mp3.

loevborg
источник
Обратите внимание, что перекодирование mp3-файлов (также известное как «транскодирование») приведет к снижению качества. Я бы не рекомендовал это.
Мартин Турной
5

Это делает алфавитную сортировку на основе отдельных символов. Это означает, что «01» стоит перед «1», поскольку значение «ноль» имеет значение меньше единицы.

Вот пример. У меня есть каталог с файлами с именами 1, 2, 3, 04, 05 и 06. Это текстовые файлы, которые содержат свои собственные имена файлов:

test$ cat *
04
05
06
1
2
3

Так что да, это будет; но вы должны убедиться, что все ваши файлы правильно заполнены.

Эта изящная строка скрипта bash позволит вам визуально сравнивать имена файлов, что позволяет легко обнаружить любые ошибки:

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

Вывод будет выглядеть так:

   04
   05
   06
    1
    2
    3

Если это не так, вам нужно дополнить имена файлов: скрипт Bash для дополнения имен файлов в StackOverflow объясняет, как это сделать.


Редактировать. Голосуй за ответ Оли, это намного лучше. : P
Я оставлю свой, потому что это добавить что-то, но вы должны использовать его решение,

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

Имейте в виду, что sortвсе будет сортироваться так, как я описал выше, вам все равно придется дополнять имена файлов, если они не равны по длине.

Стефано Палаццо
источник
4

Большинство людей предлагают mp3wrap, но у него есть свои минусы: сгенерированный файл не сообщает всю его длину в некоторых проигрывателях, и тогда вы не сможете пройти мимо этого пункта.

mp3catделает работу быстро и хорошо, насколько я могу судить. Его можно скачать по адресу http://mulholland.xyz/dev/mp3cat/ и использовать следующим образом:

mp3cat file1.mp3 file2.mp3 file3.mp3

другая возможность будет sox

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

но он кажется очень медленным (возможно, он декодирует и перекодирует аудио?)

josinalvo
источник
3

Я обнаружил, что онлайн-сервис audio-joiner работает очень хорошо и сохраняет правильную временную отметку (в отличие от mp3wrap).

orschiro
источник
0

Возможно, вы захотите попробовать использовать специальную программу для редактирования аудио (например, Audacity )

Lawand
источник
0

Мне нравится комментарий bmaupin , но он может генерировать натуральные числа (версии), используя sort -V:

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

и вам не нужно иметь дело со специальными символами, как ' " () [] {}в имени файла.

zhoux
источник