Menggabungkan beberapa file .mp3 menjadi satu .mp3

46

Seperti yang disarankan di sini saya menggunakan catperintah untuk menggabungkan beberapa file .mp3 menjadi satu file .mp3.

Bayangkan, saya memiliki file .mp3 berikut dalam folder saat ini:

001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3

atau, seperti ini:

096001.mp3 096002.mp3 096003.mp3 096004.mp3

Saya perlu menyatukan file .mp3 ini di sana urutan naik, yaitu 001001.mp3+001002.mp3+001003.mp3+etc.

Untuk menggabungkan file .mp3 ini menjadi satu, saya menjalankan perintah berikut dalam folder saat ini:

cat *.mp3 > final.mp3

Saya menguji file .mp3 final dan itu yang saya harapkan, tapi saya harus yakin bahwa perintah di atas mengambil file di sana urutan yang menaik.

Bisakah saya yakin bahwa perintah di atas selalu menyatukan file dalam urutan menaik?

Terima kasih tuan !

Bakhtiyor
sumber

Jawaban:

46

catbukan alat yang tepat untuk pekerjaan ini. Format MP3 memiliki semua jenis sampah yang dapat mengintai di bagian depan dan akhir file dan ini harus dihapus. mp3wrapadalah apa yang kamu inginkan. Ini akan mengecualikan metadata apa pun dalam file dan menyatukan audio.

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

Sebelum Anda melakukannya, jalankan ls *.mp3untuk memeriksa bahwa mereka berada dalam urutan yang benar. Ketika saya awalnya menulis jawaban ini (lebih dari enam tahun yang lalu!) Gumpalan wildcard tampaknya tidak berperilaku baik tetapi saya pikir mereka melakukannya sekarang.

Anda mungkin perlu mengganti nama file jika misalnya, mereka diberi nomor tetapi tidak berlapis-nol, {1-11}.mp3akan diurutkan berdasarkan 1 10 11 2 3 4 5 6 7 8 9. Ini bisa diperbaiki dengan mudah .

Oli
sumber
2
Kanan-cat akan memotong-motong format file mp3 dengan "menciptakan array" (seolah-olah) file mp3 dalam satu file mp3. Tetapi tampaknya berfungsi jika perangkat lunak pemutar cukup cerdas.
Ini bekerja lebih baik untuk saya, karena menangani mp3 dengan spasi di nama file:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin
@ Bupupin Poin yang adil tapi saya tidak yakin mengapa saya tidak hanya menggunakan ekspansi wildcard Bash. *.mp3harus mencukupi (dan bekerja dengan spasi).
Oli
Tersedia untuk mac dari pengelola paket buatan ! $ brew install mp3wrap.
Rubens
1
Dalam bash, *.mp3dijamin untuk menjaga urutan abjad. Jika file Anda diberi nama 09.mp3, 10.mp3, 11.mp3, itu mungkin apa yang Anda inginkan. Jika file Anda diberi nama 9.mp3, 10.mp3, 11.mp3, itu mungkin bukan apa yang Anda inginkan, tetapi Anda dapat melakukannya `ls *.mp3 | sort -n`.
Jo Liss
27

mp3wrap tampaknya menjadi solusi yang cukup layak, tetapi ketika saya memutar file yang dihasilkan, cap waktu itu tidak benar. Sepertinya mp3wrap paling baik digunakan saat Anda menggabungkan mp3 ke dalam file yang Anda tahu akan Anda bagi nanti.

Saya hanya ingin menggabungkan beberapa mp3 secara permanen. Saya akhirnya menggunakan ffmpeg untuk menyatukan file:

  1. Pertama, instal ffmpeg

    • Ubuntu 15.04+

      sudo apt install ffmpeg
    • Ubuntu 14.10 dan di bawahnya
      Buka http://ffmpeg.org/download.html , unduh salah satu build statis, undar, dan salin ke / usr / local / bin

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

Info lebih lanjut: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

bupupin
sumber
ffmpeghilang, tetapi avconvganti: askubuntu.com/questions/432542/…
muru
2
Ya, saya menggunakan avconv untuk sementara waktu, tetapi kemudian saya membutuhkan beberapa fitur yang dimiliki ffmpeg dan avconv tidak, dan saya belum menggunakannya sejak saat itu. Hari ini rasanya seperti buang-buang waktu memeriksa untuk melihat apakah avconv memiliki fitur yang saya butuhkan ketika saya sudah tahu ffmpeg melakukannya.
bmaupin
Silakan diundang untuk bergabung dalam diskusi laporan bug ini .
orschiro
Saya sudah mencoba ini dan itu tidak berhasil; coba jalankan output.mp3melalui a mp3valdan Anda akan melihat segala macam kesalahan yang akan membuat masalah pemutaran di Chrome64 + (lihat bugs.chromium.org/p/chromium/issues/detail?id=794782 dan bugs.chromium.org/p/chromium/ masalah / detail? id = 806601 # c10 )
Nino Škopac
solusi yang luar biasa. lagi pula untuk menormalkan lagu juga?
ar2015
8

Seperti yang disarankan sebelumnya, mp3wrapadalah solusi yang baik. Ini mungkin tidak berfungsi sepanjang waktu. Sejauh yang saya tahu, mp3wrapmengasumsikan bahwa semua file input memiliki karakteristik yang sama seperti VBR vs CBR, bitrate, dan sebagainya. Jika asumsi ini tidak terpenuhi, kemungkinan besar akan gagal. Dalam hal ini, satu-satunya solusi adalah mendekode semua file mp3 ke format mentah seperti .wav, menggabungkannya dengan program seperti soxdan menyelesaikannya dengan mengkode ulang semua ke mp3.

loevborg
sumber
Perhatikan bahwa pengodean ulang file mp3 (juga dikenal sebagai "transcoding") akan mengakibatkan hilangnya kualitas. Saya tidak akan merekomendasikan itu.
Martin Tournoij
5

Itu semacam abjad berdasarkan karakter tunggal. Itu berarti bahwa "01" muncul sebelum "1", karena nol memiliki nilai lebih rendah dari satu.

Ini sebuah contoh. Saya punya direktori dengan file bernama 1, 2, 3, 04, 05, dan 06. Itu adalah file teks yang berisi nama file mereka sendiri:

test$ cat *
04
05
06
1
2
3

Jadi, ya itu akan; tetapi Anda perlu memastikan bahwa semua file Anda 'empuk' dengan benar.

Skrip bash script yang bagus ini akan memungkinkan Anda membandingkan nama file secara visual, membuatnya sangat mudah untuk menemukan kesalahan:

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

Outputnya akan terlihat seperti ini:

   04
   05
   06
    1
    2
    3

Jika tidak, Anda harus memberi nama file: Script Bash untuk membuat nama file di StackOverflow menjelaskan cara melakukannya.


Sunting. Pilih jawaban Oli, itu jauh lebih baik. : P
Saya akan meninggalkan milik saya karena itu menambahkan sesuatu, tetapi Anda harus menggunakan solusinya,

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

Ingatlah bahwa sortmasih akan mengurutkan hal-hal dengan cara yang saya jelaskan di atas, Anda masih perlu memberi nama file jika panjangnya tidak sama.

Stefano Palazzo
sumber
4

Kebanyakan orang menyarankan mp3wrap, tetapi ada kerugiannya: file yang dihasilkan tidak melaporkan panjang penuh di beberapa pemain, dan kemudian Anda tidak dapat mencari melewati titik itu.

mp3catmelakukan pekerjaan dengan cepat dan baik, sejauh yang saya tahu. Ini dapat diunduh di http://mulholland.xyz/dev/mp3cat/ , dan digunakan sebagai berikut:

mp3cat file1.mp3 file2.mp3 file3.mp3

kemungkinan lain adalah sox

sudo apt-get install sox libsox-fmt-mp3
sox file1.mp3 file2.mp3 target.mp3

tetapi tampaknya sangat lambat (mungkin ia menerjemahkan dan memasukkan kembali audio?)

josinalvo
sumber
3

Saya menemukan layanan audio-joiner online bekerja dengan sangat baik dan menjaga cap waktu yang benar (bertentangan dengan mp3wrap).

orschiro
sumber
0

Anda mungkin ingin mencoba menggunakan program pengeditan audio khusus (seperti Audacity )

Lawand
sumber
0

Saya suka komentar bmaupin , namun bisa menghasilkan nomor (versi) alami dengan menggunakan sort -V:

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

dan Anda tidak harus berurusan dengan karakter khusus seperti ' " () [] {}dalam nama file.

zhoux
sumber