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

Как было предложено здесь , я использую команду 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 файл, и это то, что я и ожидал, но мне нужно быть уверенным , что приведенная выше команда выбирает файлы в порядке возрастания.

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

Спасибо Сэр !

59
задан 13 April 2017 в 15:24

8 ответов

cat не является подходящим инструментом для этой работы. В формате MP3 есть всевозможный мусор, который может таиться в передней и задней части файла, и это нужно убрать. mp3-обертка - это то, что вам нужно. Это исключит любые метаданные в файлах и склеит звук.

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

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

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

63
ответ дан 13 April 2017 в 15:24

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

8
ответ дан 13 April 2017 в 15:24

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

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

test$ cat *
04
05
06
1
2
3

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

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

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

Вывод будет выглядеть следующим образом:

   04
   05
   06
    1
    2
    3

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


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

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

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

5
ответ дан 13 April 2017 в 15:24

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

36
ответ дан 13 April 2017 в 15:24

Большинство людей предлагают 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

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

5
ответ дан 13 April 2017 в 15:24

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

3
ответ дан 13 April 2017 в 15:24

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

0
ответ дан 13 April 2017 в 15:24

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

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

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

0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: