Як приєднатися / об'єднати багато файлів mp3?


59

Шукаючи Google про те, як приєднати / об'єднати багато mp3-файли, він пропонує мені просто catїх разом.

Це може "працювати", але очевидно, що це не правильний спосіб зробити це, оскільки кожен заголовок і набір тегів IDv3 також будуть об'єднані.

Чи існує програма Linux, яку можна скриптувати, щоб приєднати / об'єднати багато mp3?

Чи може це зробити mplayer / mencoder / ffmpeg?

Відповіді:


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

FYI для цього потрібна певна версія ffmpeg. Якщо в ньому написано, що файл не знайдений concat ... спробуйте оновити та запустити його ще раз
Sameer

Відмінно працює у ffmpeg 0.10.4 в Gentoo. Що ви використовуєте? Ви впевнені, що ви не просто помилково ввели команду?
Ambroz Bizjak

1
Просто хотілося уточнити кілька речей для інших: -acodecозначає, що аудіокодек буде використовуватися і copyозначає, що буде тільки муксинг та демуфікування, але не кодування / перекодування (тобто дуже швидке та втрата якості)
Housemd

1
Було б чудово, якби була програма GUI, де я можу перетягувати декілька файлів (наприклад, відсортовано хронологічно для записів, записаних послідовно, та, можливо, деякі файли, відредаговані), і вона виведе один файл.
Джеймс Рей

1
Це хороша відповідь, однак майже в кожному випадку MP3-файл, що виходить, має невеликий проміжок між тим, де були з'єднані файли. Отже, якщо ви намагаєтеся об'єднати MP3-композиції, щоб створити альбом / безліч відтворюваних альбомів / що завгодно, це не спрацює.
Ящірка

13

Mp3Wrap - утиліта командного рядка, яка об'єднує декілька файлів MP3 в єдиний відтворюваний MP3, не втрачаючи імена файлів або інформації ID3 та без перекодування. Також підтримує архівування не аудіоданих, таких як списки відтворення, файли інформації та обкладинки зображень всередині MP3. Ці файли можна розпакувати пізніше (використовуючи mp3splt, наприклад); звичайні MP3-декодери можуть відтворювати весь аудіопотік як один довгий трек.


1
Дякую за цю рекомендацію .. набагато легше / простіше рішення, ніж ffmpeg, оскільки я поєднував 100+ mp3-х і хотів варіант розбиття назад до оригіналів.
joshbaptiste

Це більше не працює властивістю - спробуйте об'єднати кілька файлів і перегляньте вихідний файл mp3val- він повідомить про помилки синхронізації. Це означає, що він не відтворюватиметься після першого фрагменту в Chrome 64+ (див. Bugs.chromium.org/p/chromium/isissue/detail?id=794782 та bugs.chromium.org/p/chromium/isissue/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

0

Якщо вам потрібен сценарій, ви, ймовірно, краще використовувати розчин ffmpeg. Однак якщо вам колись просто потрібна програма, щоб зробити подібні речі, ви можете спробувати Audacity . Це відкритий код і крос-платформа. Я не використовував його для приєднання mp3-файлів, але використовував його, щоб обрізати розділи з mp3 та зникати в кінці. Я готовий би покластися на те, що ви можете приєднатись до mp3-файлів і перекреслити їх між собою.


4
Наскільки я знаю, Audacity працює над необробленими звуковими даними, і з'єднання mp3-файлів з цим призведе до деградації через транскодування.
Ambroz Bizjak

0

zsh:

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