Ghép một số tệp .mp3 thành một .mp3


46

Như đã đề xuất ở đây, tôi đang sử dụng catlệnh để ghép một số tệp .mp3 thành một tệp .mp3.

Hãy tưởng tượng, tôi có các tệp .mp3 sau trong thư mục hiện tại:

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

hoặc, như thế này:

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

Tôi cần nối các tệp .mp3 này theo thứ tự tăng dần, tức là 001001.mp3+001002.mp3+001003.mp3+etc.

Để nối các tệp .mp3 này thành một tệp tôi đang thực hiện lệnh sau trong thư mục hiện tại:

cat *.mp3 > final.mp3

Tôi đã thử nghiệm tệp .mp3 cuối cùng và đó là những gì tôi mong đợi, nhưng tôi cần chắc chắn rằng lệnh trên chọn các tệp trong chuỗi tăng dần.

Tôi có thể chắc chắn rằng lệnh trên luôn nối các tệp theo thứ tự tăng dần không?

Cảm ơn ngài !

Câu trả lời:


46

catkhông phải là công cụ phù hợp cho công việc này. Định dạng MP3 có tất cả các loại rác có thể ẩn ở phía trước và cuối tập tin và điều này cần phải được loại bỏ. mp3wraplà những gì bạn muốn. Nó sẽ loại trừ bất kỳ siêu dữ liệu nào trong các tệp và gắn âm thanh lại với nhau.

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

Trước khi bạn làm điều đó, hãy chạy ls *.mp3để kiểm tra xem chúng có đúng thứ tự không. Khi ban đầu tôi viết câu trả lời này (hơn sáu năm trước!) Các ký tự đại diện rõ ràng không hoạt động tốt nhưng tôi nghĩ họ làm ngay bây giờ.

Bạn có thể cần phải đổi tên các tệp nếu chẳng hạn, chúng được đánh số nhưng không có phần đệm, {1-11}.mp3sẽ được sắp xếp theo 1 10 11 2 3 4 5 6 7 8 9. Điều này có thể được sửa chữa dễ dàng .


2
Right - cat sẽ thu thập định dạng tệp mp3 bằng cách "tạo một mảng" (như bản gốc) của các tệp mp3 trong một tệp mp3. Nhưng nó có vẻ hoạt động nếu phần mềm máy nghe nhạc đủ thông minh.

Điều này làm việc tốt hơn đối với tôi, vì nó xử lý các bản mp3 có khoảng trắng trong tên tệp:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin

@bmaupin Một điểm công bằng nhưng tôi không chắc tại sao tôi không sử dụng mở rộng ký tự đại diện của Bash. *.mp3nên đủ (và làm việc với không gian).
Oli

Có sẵn cho mac từ người quản lý gói bia ! $ brew install mp3wrap.
Rubens

1
Trong bash, *.mp3được đảm bảo để giữ trật tự bảng chữ cái. Nếu tập tin của bạn được đặt tên 09.mp3, 10.mp3, 11.mp3, đó có thể là những gì bạn muốn. Nếu các tệp của bạn được đặt tên 9.mp3,, 10.mp3thì 11.mp3đó có thể không phải là những gì bạn muốn, nhưng bạn có thể làm `ls *.mp3 | sort -n`.
Jo Liss

27

mp3wrap dường như là một giải pháp đủ tốt, nhưng khi tôi phát tệp kết quả, dấu thời gian không chính xác. Có vẻ như mp3wrap được sử dụng tốt nhất khi bạn kết nối mp3 vào một tệp mà bạn biết bạn sẽ muốn chia sau.

Tôi chỉ đơn giản muốn kết nối vĩnh viễn một số mp3 với nhau. Tôi đã kết thúc bằng cách sử dụng ffmpeg để nối các tệp:

  1. Đầu tiên, cài đặt ffmpeg

    • Ubuntu 15.04 trở lên

      sudo apt install ffmpeg
    • Ubuntu 14.10 trở xuống Truy
      cập http://ffmpeg.org/doad.html , tải xuống một trong các bản dựng tĩnh, gỡ bỏ nó và sao chép vào / usr / local / bin

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

Thông tin thêm: https://trac.ffmpeg.org/wiki/Concatenate#protatio
https://superuser.com/a/314245


ffmpegbị thiếu, nhưng avconvthay thế nó: Askubfox.com/questions/432542/ mẹo
muru

2
Vâng, tôi đã sử dụng avconv một thời gian, nhưng sau đó tôi cần một số tính năng mà ffmpeg có và avconv không có, và tôi đã không sử dụng nó kể từ đó. Ngày nay, tôi cảm thấy lãng phí thời gian kiểm tra xem avconv có các tính năng tôi cần hay không khi tôi đã biết ffmpeg.
bmaupin

Xin vui lòng mời tham gia thảo luận báo cáo lỗi này .
orschiro

Tôi đã thử điều này và nó không hoạt động tốt; hãy thử chạy output.mp3qua mp3valvà bạn sẽ thấy tất cả các loại lỗi sẽ tạo ra sự cố phát lại trong Chrome64 + (xem bug.chromium.org/p/chromium/issues/detail?id=794782bug.chromium.org/p/chromium/ các vấn đề / chi tiết? id = 806601 # c10 )
Nino kopac

giải pháp tuyệt vời. Dù sao để bình thường hóa các bài hát quá?
ar2015

8

Như đề xuất trước đây, mp3wraplà một giải pháp tốt. Nó có thể không hoạt động tất cả thời gian mặc dù. Theo như tôi biết, mp3wrapgiả sử rằng tất cả các tệp đầu vào có các đặc điểm giống nhau như VBR so với CBR, bitrate, v.v. Nếu giả định này không được đáp ứng, nó có khả năng thất bại. Trong trường hợp đó, giải pháp duy nhất là giải mã tất cả các tệp mp3 thành định dạng thô như .wav, nối chúng với một chương trình như soxvà kết thúc bằng cách mã hóa lại tất cả thành mp3.


Lưu ý rằng mã hóa lại các tệp mp3 (còn được gọi là "chuyển mã") sẽ dẫn đến giảm chất lượng. Tôi sẽ không khuyên bạn nên nó.
Martin Tournoij

5

Nó thực hiện sắp xếp theo thứ tự chữ cái dựa trên các ký tự đơn. Điều đó có nghĩa là "01" xuất hiện trước "1", vì không có giá trị thấp hơn một.

Đây là một ví dụ. Tôi đã có một thư mục chứa các tệp có tên 1, 2, 3, 04, 05 và 06. Chúng là các tệp văn bản chứa tên tệp của riêng chúng:

test$ cat *
04
05
06
1
2
3

Vì vậy, nó sẽ; nhưng bạn cần đảm bảo rằng tất cả các tệp của bạn được 'đệm' đúng cách.

Dòng bash script tiện lợi này sẽ cho phép bạn so sánh trực quan tên tệp, giúp dễ dàng phát hiện ra bất kỳ lỗi nào:

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

Đầu ra của nó sẽ trông như thế này:

   04
   05
   06
    1
    2
    3

Nếu chúng không có, bạn sẽ cần phải đệm tên tệp: Bash script để đệm tên tệp trên StackOverflow giải thích cách thực hiện.


Biên tập. Bình chọn cho câu trả lời của Oli's, nó tốt hơn nhiều. : P
Tôi sẽ rời khỏi tôi vì nó thêm một cái gì đó, nhưng bạn nên sử dụng giải pháp của anh ấy,

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

Hãy nhớ rằng sortvẫn sẽ sắp xếp mọi thứ theo cách tôi đã mô tả ở trên, bạn vẫn sẽ cần phải điền tên tệp nếu chúng không dài bằng nhau.


4

Hầu hết mọi người đang đề xuất mp3wrap, nhưng nó có nhược điểm: tệp được tạo không báo cáo toàn bộ thời lượng của nó ở một số người chơi và sau đó bạn không thể tìm kiếm điểm đó.

mp3catlàm công việc nhanh và tốt, như tôi có thể nói. Nó có thể được tải xuống trong http://mulholland.xyz/dev/mp3cat/ và được sử dụng như sau:

mp3cat file1.mp3 file2.mp3 file3.mp3

một khả năng khác sẽ là sox

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

nhưng có vẻ rất chậm (chắc chắn nó giải mã và mã hóa lại âm thanh?)


3

Tôi thấy công cụ nối âm thanh dịch vụ trực tuyến hoạt động rất tốt và giữ đúng dấu thời gian (trái với mp3wrap).



0

Tôi thích nhận xét của bmaupin , nhưng nó có thể tạo ra các loại (phiên bản) số tự nhiên bằng cách sử dụng sort -V:

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

và bạn không phải đối phó với các ký tự đặc biệt như ' " () [] {}trong tên tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.