Bagaimana cara bergabung / menggabungkan banyak file mp3?

59

Mencari di Google tentang cara bergabung / menggabungkan banyak file mp3, itu menyarankan bahwa saya hanya harus catbersama-sama.

Itu mungkin "berfungsi", tetapi jelas itu bukan cara yang benar untuk melakukannya, karena setiap tajuk dan serangkaian tag IDv3 juga akan digabungkan.

Apakah ada program Linux yang dapat ditulis untuk bergabung / menggabungkan banyak mp3?

Bisakah mplayer / mencoder / ffmpeg melakukannya?

Sandra
sumber

Jawaban:

79

Ini akan menggabungkan dua file mp3, dan metadata yang dihasilkan adalah file pertama:

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

Ini karena, untuk ffmpeg, seluruh bagian "concat:" adalah "file input" tunggal, dan metadata-nya akan menjadi file gabungan pertama. Jika Anda ingin menggunakan metadata dari file kedua, Anda harus menambahkannya sebagai file input dummy dan memetakan metadata-nya ke output:

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

Jika Anda ingin membangun metadata Anda dari dua metadatas, Anda harus melakukannya dengan tangan. Anda dapat membuang metadata file dengan

ffmpeg -i file1.mp3 -f ffmetadata file1.metadata

Setelah membuang kedua metadata dan membangun metadata baru, Anda dapat menambahkannya ke file output -metadata, dan Anda dapat menonaktifkan menyalin metadata dengan mengatur -map_metadatapemetaan dari nomor file input negatif. Ini menetapkan nilai nama dan tidak ada metadata lain:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
Ambroz Bizjak
sumber
FYI ini membutuhkan versi ffmpeg tertentu. Jika dikatakan file tidak ditemukan konat ... coba perbarui dan jalankan lagi
Sameer
Berfungsi dengan baik di ffmpeg 0.10.4 di Gentoo. Apa yang kamu gunakan? Apakah Anda yakin Anda tidak salah mengetik perintah?
Ambroz Bizjak
1
Hanya ingin mengklarifikasi beberapa hal untuk orang lain: -acodecberarti bahwa codec audio akan digunakan dan copyberarti hanya akan ada muxing dan demuxing, tetapi tidak encoding / transcoding (yaitu sangat cepat dan tidak ada kehilangan kualitas)
Housemd
1
Akan lebih bagus jika ada program GUI di mana saya dapat menarik dan melepas beberapa file (misalnya diurutkan secara kronologis untuk rekaman yang direkam secara berurutan, dan mungkin beberapa file diedit) dan kemudian akan menghasilkan satu file.
James Ray
1
Ini adalah jawaban yang baik, namun dalam hampir setiap kasus, file MP3 yang dihasilkan memiliki jarak pendek (sub-detik) antara di mana file-file itu bergabung. Jadi, jika Anda mencoba untuk menggabungkan trek MP3 untuk membuat album pemutaran / set / mulus apa pun, ini tidak berfungsi dengan benar.
The Lizard
13

Mp3Wrap - Utilitas baris perintah yang membungkus banyak file MP3 menjadi MP3 tunggal yang dapat diputar, tanpa kehilangan nama file atau informasi ID3, dan tanpa memasukkan ulang. Juga mendukung pengarsipan data non-audio seperti daftar putar, file info, dan gambar sampul di dalam MP3. File-file ini dapat dibongkar nanti (menggunakan mp3splt, misalnya); decoder MP3 biasa dapat memainkan seluruh aliran audio sebagai satu trek panjang.

lig
sumber
1
Terima kasih atas rekomendasi ini .. solusi yang jauh lebih ringan / sederhana daripada ffmpeg, karena saya menggabungkan 100+ mp3 dan ingin opsi untuk memecah kembali ke aslinya.
joshbaptiste
Properti ini tidak lagi berfungsi - coba gabungkan beberapa file dan periksa file output dalam mp3val- itu akan melaporkan kesalahan sinkronisasi. Ini berarti tidak akan diputar setelah chunk pertama di Chrome 64+ (lihat bugs.chromium.org/p/chromium/issues/detail?id=794782 dan bugs.chromium.org/p/chromium/issues/detail?id = 806601 # c10 )
Housemd
Tampaknya tidak berfungsi di Windows. Tidak ada metadata yang terpelihara.
Gruber
9

Ini akan menggabungkan folder yang penuh dengan MP3 ke dalam satu file MP3:

1) Simpan daftar file MP3 untuk digabungkan, misalnya,

$ 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) Jalankan perintah berikut ( -safe 0yang tidak diperlukan jika mylist.txt menggunakan path relatif gantinya ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
Miles Wolbe
sumber
3

Jika Anda ingin menggabungkan semua file mp3 dari direktori saat ini:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3
hansaplast
sumber
0

Jika Anda membutuhkan skrip, Anda mungkin lebih baik menggunakan solusi ffmpeg. Namun, jika Anda hanya membutuhkan aplikasi untuk melakukan hal-hal seperti itu, Anda dapat mencoba Audacity . Ini open source dan lintas platform. Saya belum menggunakannya untuk bergabung dengan mp3, tetapi saya telah menggunakannya untuk memotong bagian dari mp3 dan memudar pada akhirnya. Saya berani bertaruh Anda dapat bergabung dengan mp3 dan memudar mereka satu sama lain dengan itu juga.

Brandon
sumber
4
Audacity, sejauh yang saya tahu, bekerja pada data suara mentah, dan menyatukan mp3 dengan itu akan menghasilkan degradasi karena transcoding.
Ambroz Bizjak
0

zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3
Wajah bahagia
sumber
Kami berharap jawaban mencakup penjelasan. (Tidak semua jawaban di halaman ini adalah contoh yang bagus.)
Scott
0

Berdasarkan jawaban Miles Wolbe, berikut adalah satu-liner yang bekerja untuk saya:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
Andy Balaam
sumber