Làm thế nào để tham gia / hợp nhất nhiều tập tin mp3?


59

Tìm kiếm trên Google về cách tham gia / hợp nhất nhiều tệp mp3, nó gợi ý rằng tôi nên catkết hợp chúng lại với nhau.

Điều đó có thể "hoạt động", nhưng rõ ràng đó không phải là cách chính xác để làm điều đó, vì mỗi tiêu đề và bộ thẻ IDv3 cũng sẽ được nối với nhau.

Có một chương trình Linux tồn tại có thể được viết kịch bản để tham gia / hợp nhất nhiều mp3 không?

Mplayer / mencoder / ffmpeg có thể làm điều đó không?

Câu trả lời:


79

Điều này sẽ nối hai tệp mp3 và siêu dữ liệu kết quả sẽ là của tệp đầu tiên:

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

Điều này là do, đối với ffmpeg, toàn bộ phần "concat:" là một "tệp đầu vào" duy nhất và siêu dữ liệu của nó sẽ là tệp được nối đầu tiên. Thay vào đó, nếu bạn muốn sử dụng siêu dữ liệu từ tệp thứ hai, bạn phải thêm nó dưới dạng tệp đầu vào giả và ánh xạ siêu dữ liệu của nó tới tệp đầu ra:

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

Nếu bạn muốn xây dựng siêu dữ liệu của mình từ hai metadatas, bạn sẽ phải làm điều đó bằng tay. Bạn có thể kết xuất siêu dữ liệu của tệp với

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

Sau khi kết xuất cả metadatas và xây dựng siêu dữ liệu mới, bạn có thể thêm nó vào tệp đầu ra -metadatavà bạn có thể vô hiệu hóa sao chép siêu dữ liệu bằng cách đặt -map_metadataánh xạ từ số tệp đầu vào âm. Điều này đặt một giá trị tên và không có siêu dữ liệu khác:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1

FYI này yêu cầu một phiên bản nhất định của ffmpeg. Nếu nó nói tập tin không tìm thấy concat ... hãy thử nâng cấp và chạy lại
Sameer

Hoạt động tốt trong ffmpeg 0.10.4 trong Gentoo. Bạn đang dùng gì? Bạn có chắc là bạn đã không nhập sai lệnh?
Ambroz Bizjak

1
Chỉ muốn làm rõ một vài điều cho người khác: -acodecphương tiện mà audio codec sẽ được sử dụng và copycó ý nghĩa rằng sẽ chỉ được muxing và demuxing, nhưng không mã hóa / chuyển mã (tức là rất nhanh và không làm giảm chất lượng)
Housemd

1
Sẽ thật tuyệt nếu có một chương trình GUI nơi tôi có thể kéo và thả nhiều tệp (ví dụ: được sắp xếp theo thứ tự thời gian cho các bản ghi được ghi liên tục và có lẽ một số tệp được chỉnh sửa) và sau đó nó sẽ xuất ra một tệp.
James Ray

1
Đây là một câu trả lời tốt, tuy nhiên trong hầu hết mọi trường hợp, tệp MP3 kết quả có một khoảng cách (giây phụ) ngắn giữa nơi các tệp được nối. Vì vậy, nếu bạn đang cố gắng hợp nhất các bản nhạc MP3 để tạo một album / bộ phát lại liền mạch, thì điều này không hoạt động hoàn toàn đúng.
Thằn lằn

13

Mp3Wrap - Tiện ích dòng lệnh bao bọc nhiều tệp MP3 thành một tệp MP3 có thể phát, không bị mất tên tệp hoặc thông tin ID3 và không cần mã hóa lại. Cũng hỗ trợ lưu trữ dữ liệu phi âm thanh như danh sách phát, tệp thông tin và hình ảnh bìa trong MP3. Các tệp này có thể được giải nén sau (sử dụng mp3splt, vd); bộ giải mã MP3 thông thường có thể phát toàn bộ luồng âm thanh dưới dạng một bản nhạc dài.


1
Cảm ơn đề xuất này .. giải pháp nhẹ hơn / đơn giản hơn sau đó là ffmpeg, vì tôi đã kết hợp hơn 100 bản mp3 và muốn tùy chọn chia tách trở lại bản gốc.
joshbaptiste

Thuộc tính này không còn hoạt động nữa - hãy thử nối một vài tệp và kiểm tra tệp đầu ra mp3val- nó sẽ báo cáo lỗi đồng bộ hóa. Điều này có nghĩa là nó sẽ không phát sau đoạn đầu tiên trong Chrome 64+ (xem bug.chromium.org/p/chromium/issues/detail?id=794782bug.chromium.org/p/chromium/issues/detail?id = 806601 # c10 )
Housemd

Dường như không hoạt động trên Windows. Không có siêu dữ liệu được bảo tồn.
Gruber

9

Điều này sẽ ghép một thư mục chứa đầy MP3 vào một tệp MP3:

1) Lưu danh sách các tệp MP3 để ghép nối, ví dụ:

$ 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) Chạy lệnh sau ( -safe 0không cần thiết nếu mylist.txt sử dụng đường dẫn tương đối thay vì ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3

3

Nếu bạn muốn nối tất cả các tệp mp3 của thư mục hiện tại:

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

0

Nếu bạn cần tập lệnh, có lẽ bạn nên sử dụng giải pháp ffmpeg. Tuy nhiên, nếu bạn chỉ cần một ứng dụng để làm những việc như vậy, bạn có thể thử Audacity . Đó là mã nguồn mở và đa nền tảng. Tôi đã không sử dụng nó để tham gia mp3, nhưng tôi đã sử dụng nó để cắt các phần ra khỏi mp3 và làm mờ dần chúng ở cuối. Tôi sẵn sàng cá rằng bạn cũng có thể tham gia mp3 và làm mờ dần chúng với nhau.


4
Audacity, theo như tôi biết, hoạt động trên dữ liệu âm thanh thô và việc kết hợp mp3 với nó sẽ dẫn đến sự xuống cấp do chuyển mã.
Ambroz Bizjak

0

zsh:

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

audio-join output.mp3 *.mp3

Chúng tôi mong đợi câu trả lời bao gồm giải thích. (Không phải tất cả các câu trả lời trên trang này đều là ví dụ hay.)
Scott

0

Dựa trên câu trả lời của Miles Wolbe, đây là một lớp lót phù hợp với tôi:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
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.