Об’єднання декількох .mp3 файлів в один .mp3


45

Як було запропоновано тут, я використовую 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
Право - кішка буде маніпулювати формат mp3-файлу, "створивши масив" (як би) з mp3-файлів у межах одного файлу mp3. Але це, здається, працює, якщо програмне забезпечення програвача досить розумне.

Це працювало для мене краще, тому що він обробляє mp3- find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
файли

@bmaupin Справедливий момент, але я не впевнений, чому я не використовував просто розширення підстановки Баша. *.mp3повинно вистачити (і працює з пробілами).
Олі

Доступно для Mac від менеджера пакунків пива ! $ brew install mp3wrap.
Рубенс

1
У басі, *.mp3гарантовано збереження алфавітного порядку. Якщо ваші файли називаються 09.mp3, 10.mp3, 11.mp3, то, ймовірно , що ви хочете. Якщо ваші файли називаються 9.mp3, 10.mp3, 11.mp3, це, ймовірно , не те , що ви хочете, але ви можете зробити `ls *.mp3 | sort -n`.
Джо Лісс

26

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


ffmpegвідсутній, але avconvзамінює його: askubuntu.com/questions/432542/…
muru

2
Так, я деякий час використовував avconv, але потім мені були потрібні деякі функції, які були у ffmpeg, а avconv не були, і я з цього часу не користувався. У наші дні це відчуває себе марною витратою часу, щоб перевірити, чи має avconv функції, які мені потрібні, коли я вже знаю, що робить ffmpeg.
bmaupin

Будь ласка, будь ласка запрошені приєднатися до цієї дискусії з повідомлення про помилку.
orschiro

Я спробував це, і це не працює чудово; спробуйте запустити output.mp3через mp3valі ви побачите всілякі помилки, які створюватимуть проблеми з відтворенням у Chrome64 + (див. bugs.chromium.org/p/chromium/isissue/detail?id=794782 та bugs.chromium.org/p/chromium/ проблеми / деталі? id = 806601 # c10 )
Nino Škopac

приголомшливе рішення. все-таки нормалізувати пісні теж?
ar2015

8

Як було запропоновано раніше, mp3wrapце хороше рішення. Це може не працювати весь час. Наскільки я знаю, mp3wrapпередбачається, що всі вхідні файли мають однакові характеристики, такі як VBR vs CBR, бітрейт тощо. Якщо це припущення не буде виконано, воно, ймовірно, не вдасться. У цьому випадку єдиним рішенням було б розшифрувати всі mp3-файли у сирому форматі, наприклад .wav, об'єднати їх з програмою на кшталт soxі закінчити шляхом перекодування всіх у mp3.


Зауважте, що повторна кодування 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

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



0

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


0

Я люблю коментар bmaupin , але він може створити натуральний номер (версії), використовуючи sort -V:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.