Как было предложено здесь , я использую команду 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 файл, и это то, что я и ожидал, но мне нужно быть уверенным , что приведенная выше команда выбирает файлы в порядке возрастания.
Могу ли я быть уверен, что приведенная выше команда всегда объединяет файлы в порядке возрастания?
Спасибо Сэр !
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
. это можно легко исправить .
Как уже предлагалось ранее, mp3wrap
является хорошим решением. Однако оно может работать не всегда. Насколько я знаю, mp3wrap
предполагает, что все входные файлы имеют одинаковые характеристики, такие как VBR против CBR, битрейт и так далее. Если это предположение не будет выполнено, то, скорее всего, оно будет неудачным. В этом случае единственным решением будет декодировать все mp3-файлы в необработанный формат типа .wav
, скомпоновать их с программой типа sox
и закончить перекодировкой всех в mp3.
Он делает сортировку по алфавиту, основанную на одиночных символах. Это означает, что "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`
Имейте в виду, что сортировка
все равно будет сортироваться так, как я описал выше, вам все равно нужно пробивать имена файлов, если они не равны по длине.
mp3wrap кажется достаточно приличным решением, но когда я проиграл полученный файл, отметка времени неверна.Похоже, что mp3wrap лучше всего использовать, когда вы объединяете mp3 в файл, который, как вы знаете, вы захотите разделить позже.
Я просто хотел навсегда объединить несколько mp3 вместе. В итоге я использовал ffmpeg для объединения файлов:
Сначала установите ffmpeg
Ubuntu 15.04+
sudo apt install ffmpeg
Ubuntu 14.10 и ниже
Перейдите на http://ffmpeg.org/download.html , загрузите одну из статических сборок, распакуйте ее и скопируйте в / usr / local / bin
ffmpeg -i "concat: file1. mp3 | file2.mp3 "-acodec copy output.mp3
Дополнительная информация:
https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245
Большинство людей предлагают 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
, но он кажется очень медленным (возможно, он декодирует и перекодирует звук?)
Я обнаружил, что онлайн-сервис audio-joiner работает очень хорошо и сохраняет правильную отметку времени (в отличие от mp3wrap).
Возможно, вы захотите попробовать использовать специальную программу для редактирования аудио (подобно Слышимость )
Мне нравится комментарий bmaupin , но он может производить естественные номера (версии), используя sort -V
:
find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3
, а вы не 'Не нужно иметь дело со специальными символами, такими как ' "() [] {}
в имени файла.