2012-08-06 20 views
20

Tôi có các tệp MP3 đôi khi bị tắt tiếng ở cuối. Tôi muốn tự động loại bỏ sự im lặng này. Từ những gì tôi có thể nói, nó là "hoàn hảo" im lặng (0 biên độ), không phải là tiếng ồn xung quanh. Độ dài của nội dung và độ im lặng thay đổi.Làm cách nào để tôi có thể xóa im lặng khỏi MP3 theo cách lập trình?

Tôi đã tìm thấy một số câu hỏi khác về cropping to the first 30 seconds hoặc cropping to X and X+N seconds sử dụng ffmpeg. Tôi nghĩ rằng tôi có thể sử dụng một cách tiếp cận tương tự, miễn là tôi có một cách để tìm thấy khi sự im lặng bắt đầu. Làm thế nào tôi sẽ làm điều đó một cách có lập trình?

Ví dụ, một giải pháp có thể là có lệnh tìm phần đầu của "im lặng". Tôi mong đợi một chuỗi như thế này

end=$(ffmpeg some-command-to-find-start-of-silence) 
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3 

Các giải pháp thực hiện không phải sử dụng ffmpeg, nhưng nó cần phải có sẵn trên Ubuntu.

+0

Bạn thực sự chỉ quan tâm đến sự im lặng hoàn hảo? Điều đó rất hiếm, với phối màu từ các bậc thầy 24 bit và nén mất dữ liệu.FFMPEG là con đường để đi, trong mọi trường hợp. – Brad

+0

@Brad Về cơ bản, chúng tôi đang xử lý lỗi trong dịch vụ ghi âm mà chúng tôi sử dụng. Dường như luôn luôn cho sự im lặng "hoàn hảo" này khi vấn đề xảy ra. –

+0

Có vẻ như bạn có thể quan tâm đến bộ lọc âm thanh ['silencedetect' FFmpeg] (http://ffmpeg.org/ffmpeg.html#silencedetect). – blahdiblah

Trả lời

5

Có một cái nhìn tại silencedetect FFmpeg audio filter:

Detect im lặng trong một dòng âm thanh.

Bộ lọc này ghi lại thông báo khi phát hiện âm lượng đầu vào nhỏ hơn hoặc bằng giá trị dung sai tiếng ồn trong một khoảng thời gian lớn hơn hoặc bằng thời lượng tạp âm phát hiện tối thiểu.

Thời gian in và thời lượng được biểu thị bằng giây.

Có thông số để điều chỉnh mức độ yên tĩnh của một thứ gì đó phải được coi là im lặng và khoảng thời gian cần phải chú ý.

+2

Bộ lọc 'silenceremove' được ghi ở đây https://ffmpeg.org/ffmpeg-filters.html#toc-silenceremove Câu trả lời này cũng có thể hữu ích: http://stackoverflow.com/a/29411973/1717535 –

32
sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse 

Thao tác này sẽ cắt mọi khoảng im lặng dài hơn 0,1 giây khỏi tệp của bạn. Nếu bạn chỉ quan tâm đến cắt tỉa Cuối cùng, điều này có thể được đơn giản hóa để:

sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse 

Một cái nhìn chi tiết về cách thức sox 's silence công trình có thể được tìm thấy here.

+0

Giải pháp hoạt động , nhưng lời giải thích của bạn là sai. Tác giả ban đầu cho biết 'cắt im lặng (bất cứ điều gì ít hơn 1% khối lượng) cho đến khi chúng tôi gặp phải âm thanh kéo dài hơn 0,1 giây trong thời gian.'. – duleshi

7

Có thể bạn đang tìm kiếm một giải pháp lossless, có nghĩa là mật mà không không cần mã hóa lại (làm giảm chất lượng).

Tôi tin rằng mp3splt là những gì bạn đang tìm kiếm. Nó có thể được sử dụng từ dòng lệnh và GUI.

sudo aptitude install mp3splt mp3splt-gtk 

sẽ hoạt động trên Debian và Ubuntu.

Từ trang người đàn ông:

Bạn cũng có thể cố gắng để chia nhỏ các file tự động với phát hiện sự im lặng (xem tùy chọn -s), file cắt bằng sự im lặng phát hiện (xem -r tùy chọn), hoặc bằng một thời lượng cố định (xem tùy chọn -t)