Thêm sự im lặng vào cuối MP3


12

Có ai trong các bạn biết cách thêm sự im lặng của một khoảng thời gian cố định vào cuối MP3, trong Linux không? Ví dụ: sử dụng MEncoder, FFmpeg, v.v?

Nó cần phải là dòng lệnh vì nó sẽ được viết kịch bản và chạy trên máy chủ của chúng tôi.

Tôi đã hiểu được điều này và điều tốt nhất tôi có thể làm là sử dụng padchức năng trong SoX , nhưng điều đó sẽ không hoạt động với MP3.

Tôi có thể chuyển đổi nó thành WAV, sử dụng SoX, sau đó chuyển đổi lại thành MP3 và sao chép siêu dữ liệu (trừ thời lượng) từ bản gốc sang MP3 mới. Nhưng, trước khi tôi viết một kịch bản cho điều đó, tôi đã nghĩ rằng tôi sẽ xem liệu có giải pháp một lần nào không.


2
Tôi nghĩ rằng bạn có thể thực hiện một cái gì đó như thế này với mp3DirectCut (chỉ dành cho Windows, nhưng họ nói rằng nó tương thích với Linux trong Wine), điều này giúp tránh việc giải nén dữ liệu âm thanh. Nếu bạn định đi MP3 -> WAV -> MP3, bạn sẽ giải nén lại luồng dữ liệu đã nén MP3, làm mất rất nhiều chất lượng trên đường đi.
Đột phá

Cảm ơn. Bạn có thể chạy phần mềm windows qua Wine từ dòng lệnh không? Tôi muốn tránh các giải pháp Wine nếu có thể vì tôi không muốn cài đặt Wine trên máy chủ của chúng tôi.
Max Williams

Hmm, bạn có thể muốn tránh tuyến đường Wine nếu bạn chưa có nó. Wine tự nó là một tải xuống khá lớn, cao hơn một hoặc hai megabyte cho một công cụ cắt / hợp nhất MP3 đơn giản. Tôi chắc chắn có một giải pháp tương đương, dựa trên Linux. Nếu tôi tìm thấy bất kỳ công cụ bổ sung nào, tôi chắc chắn sẽ cho bạn biết.
Đột phá

Câu trả lời:


9

Bạn có thể thực hiện dễ dàng với padđối số của SoX và cú pháp sau:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

Thí dụ:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

Những khoảng lặng đó chỉ trong vài giây. (Các cách sử dụng khác có thể sử dụng một cú pháp khác, để chèn các khoảng lặng đó vào các vị trí cụ thể. Xem tài liệu SoX để biết thêm.)


Tôi nên lưu ý rằng tôi đã kiểm tra nó ổn với các tệp MP3 (với libmad-0.dll và libmp3lame-0.dll được cài đặt, tương ứng để giải mã và mã hóa MP3.) Càng nhiều càng tốt, tôi khuyên bạn nên làm việc với định dạng lossless và chỉ chuyển đổi sang MP3 ở cuối chỉ.
Fabien Snauwaert

điều đó thật tuyệt - cảm ơn Fabien!
Max Williams

Đây có phải là mất mát?
Lão máu

Cập nhật: Tôi đọc trong trang sox rằng nó chuyển đổi sang định dạng nội bộ sau đó mã hóa lại
Geremia

MP3 là một định dạng mất mát. Mã hóa và mã hóa lại thành định dạng lossy sẽ dần dần làm giảm chất lượng âm thanh (dù bạn có nghe hay không.) Vì vậy, tốt nhất là bạn nên làm việc với các định dạng lossless và cuối cùng chỉ mã hóa thành định dạng lossy. Để biết danh sách các codec âm thanh bị mất: en.wikipedia.org/wiki/Lossy_compression#Audio và danh sách các codec âm thanh lossless en.wikipedia.org/wiki/Lossless_compression#Audio
Fabien Snauwaert

15

Với ffmpeg, bạn có thể sử dụng bộ lọc aevalsrc để tạo sự im lặng và sau đó trong lệnh thứ hai sử dụng giao thức concat để kết hợp chúng một cách dễ dàng:

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

Bạn có thể kiểm soát độ dài của sự im lặng bằng cách thay đổi -t 10thành bất cứ lúc nào trong vài giây bạn muốn. Tất nhiên, bạn chỉ cần tạo khoảng lặng một lần, sau đó bạn có thể giữ tệp xung quanh và sử dụng nó để đệm từng tệp bạn muốn. Bạn cũng có thể muốn tìm kiếm bộ giải mã concat - nó chuyên sâu hơn một chút về bộ xử lý, nhưng bạn có thể thấy việc thả vào tập lệnh shell dễ dàng hơn.

Nếu bạn muốn thực hiện nó trong một lệnh duy nhất, bạn có thể sử dụng bộ lọc concat - điều này sẽ yêu cầu bạn mã hóa lại âm thanh của bạn (vì các bộ lọc không tương thích với -codec copy), vì vậy tùy chọn ở trên có thể sẽ phù hợp nhất với bạn. Nhưng điều này có thể hữu ích cho bất kỳ ai làm việc với PCM thô, muốn thêm khoảng lặng vào cuối trước khi mã hóa âm thanh:

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3

Kiểm soát độ dài của khoảng lặng bằng cách thay đổi d=10thành bất kỳ thời gian nào (tính bằng giây) bạn muốn. Nếu bạn sử dụng phương pháp này, bạn có thể thấy hướng dẫn mã hóa MP3 FFmpeg này hữu ích.


cảm ơn @evilsoup. Tôi vừa thử nó và nhận được những thứ sau - max-thinkpad-linux: ~ $ ffmpeg -filter_complex aevalsrc = 0 -t 4.61 quiet.mp3ffmpeg version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Unrecognized option 'filter_complex' Failed to set value 'aevalsrc=0' for option 'filter_complex'
Max Williams

@max Trước hết, bạn thực sự đang sử dụng avconv từ dự án libav - chúng là một nhánh của FFmpeg mà Debian & Ubuntu đang sử dụng thay vì dự án chính và chúng cung cấp một phiên bản ffmpeg bị tê liệt. Hãy thử sử dụng avconvthay thế - cú pháp nên giống nhau, chỉ cần thay thế ffmpegbằng avconv.
evilsoup

Nếu điều đó không hiệu quả, hãy thử nâng cấp lên phiên bản mới hơn của ffmpeg. Vì bạn đang sử dụng Ubuntu, nên bạn có thể sử dụng PPA này hoặc cho phiên bản mới nhất mà bạn có thể biên dịch nó từ nguồn .
evilsoup

1
@MaxWilliams Hoặc bạn có thể tải xuống bản dựng tĩnh mà trước tiên bạn không phải biên dịch. Chỉ cần tải về, giải nén, sử dụng.
slhck

1
để tham khảo trong tương lai: nếu bạn gặp phải lỗi như tôi, hãy thử thay thế dấu ngoặc đơn bằng dấu ngoặc kép
SZT
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.