Очищення голосових записів із командного рядка?


28

Раніше я використовував Audacity для видалення шуму із записів, однак він має дуже обмежене використання командного рядка. У мене є ~ 100 коротких відео лекцій, які я буду дивитись протягом наступних кількох місяців, і я хотів би простий спосіб їх очищення за один раз або за потребою перед переглядом.

Чи є інструмент командного рядка або бібліотека популярних мов, яку я можу використовувати для цього?

Відповіді:


17

Подивись на sox

Цитування man sox:

SoX - Sound eXchange, the Swiss Army knife of audio manipulation

[...]

SoX is a command-line audio processing  tool,  particularly  suited  to
making  quick,  simple  edits  and to batch processing.  If you need an
interactive, graphical audio editor, use audacity(1).

Таким чином, це повинно бути придатним як супутник командного рядка, альтернативного audaciy!


Що стосується власне завдання очищення записів, подивіться на фільтр, noiseredякий дорівнює фільтру зменшення шуму Audacity :

man sox | less -p 'noisered \['

           [...]
   noisered [profile-file [amount]]
           Reduce noise in the audio signal by profiling and filtering.
           This effect is moderately effective at  removing  consistent
           background  noise such as hiss or hum.  To use it, first run
           SoX with the noiseprof effect on a  section  of  audio  that
           ideally  would  contain silence but in fact contains noise -
           such sections are typically found at the  beginning  or  the
           end  of  a recording.  noiseprof will write out a noise pro‐
           file to profile-file, or to stdout if no profile-file or  if
           `-' is given.  E.g.
              sox speech.wav -n trim 0 1.5 noiseprof speech.noise-profil
           To  actually remove the noise, run SoX again, this time with
           the noisered effect; noisered will reduce noise according to
           a  noise  profile  (which  was generated by noiseprof), from
           profile-file, or from stdin if no profile-file or if `-'  is
           given.  E.g.
              sox speech.wav cleaned.wav noisered speech.noise-profile 0
           How  much  noise  should be removed is specified by amount-a
           number between 0 and 1 with a default of 0.5.   Higher  num‐
           bers will remove more noise but present a greater likelihood
           of removing wanted components of the audio  signal.   Before
           replacing  an  original  recording with a noise-reduced ver‐
           sion, experiment with different amount values  to  find  the
           optimal one for your audio; use headphones to check that you
           are happy with the results, paying particular  attention  to
           quieter sections of the audio.

           On  most systems, the two stages - profiling and reduction -
           can be combined using a pipe, e.g.
              sox noisy.wav -n trim 0 1 noiseprof | play noisy.wav noise
           [...]

7
На жаль, я вважаю, що опис, який використовує Sox на сторінці, дуже шумно читає - каламбур призначений Чи не є набагато простішим способом, щоб лише одна команда перемикатись шумовим зменшенням?
шеві

Звичайно, немає проблем - просто напишіть одним простим реченням те, що ви хочете змінити, але досить точним, щоб бути технічно зрозумілим ... Добре, це не працюватиме так, оскільки вам потрібно зрозуміти, що таке шум і яка з частин шум, який ви хочете видалити, який ви можете зменшити, а також який може зменшити якість звуку, інакше робить зменшення шуму. Щоб перемикатись зі зменшенням шуму, ви повинні знати свої жонглюючі клуби - види шуму, який можна перемикати, і як їх можна збалансувати, коли вони стикаються у повітрі. Тоді, сокс - це ваш інструментарій та аптечка!
Волкер Зігель

12

Прийнята відповідь не дає практичного прикладу (див. Перший коментар до неї), тому я намагаюся надати тут. На Ubuntu з apt слід встановити soxта підтримувати аудіоформати

sox

Спочатку встановіть soxта підтримайте формати (включаючи mp3):

sudo apt install sox libsox-fmt-*

Потім перед тим, як запустити команду над файлом / файлами спочатку, вам потрібно створити профіль, зробити зразок шуму, це найважливіша частина, яку ви повинні вибрати найкращий час, коли відбувається шум, переконайтеся, що ви цього не зробите мати голос (або музику / сигнал, який ви намагаєтесь зберегти) у цьому зразку:

ffmpeg -i source.mp3 -ss 00:00:18 -t 00:00:20 noisesample.wav

Тепер зробіть профіль із цього джерела:

sox noisesample.wav -n noiseprof noise_profile_file

І нарешті запустіть зменшення шуму у файлі:

sox source.mp3 output.mp3 noisered noise_profile_file 0.31

Де noise_profile_fileпрофіль і 0.30значення. Значення найкраще перебуває десь від 0,20 до 0,30, понад 0,3 дуже агресивно, менше 0,20 - м'яке і добре працює для дуже галасливих аудіозаписів.

Спробуйте пограти з цим, і якщо ви знайдете інші хитрощі налаштування, будь ласка, прокоментуйте результати та налаштування налаштувань.

як їх пакетна обробка

Якщо шум подібний, ви можете використовувати однаковий профіль для всіх mp3-файлів

ls -r -1 *.mp3 | xargs -L1 -I{} sox {}  {}_noise_reduced.mp3  noisered noise_profile_file 0.31

або якщо є структура папки:

tree -fai . | grep -P ".mp3$" | xargs -L1 -I{} sox {}  {}_noise_reduced.mp3  noisered noise_profile_file 0.31

1
якщо це розмовне аудіо та окремі ліво-праві канали не потрібні, тоді ви можете додати remix -до змішування всіх вхідних каналів до моно
Джейк Бергер

2
@EduardFlorinescu Ваша відповідь на місці. Я мав статичний запис шуму на тлі кожного запису. Я прочитав вашу відповідь і перші 2 секунди з мого звукового файлу створив профіль і, нарешті, використав його для видалення шуму від запису. Дуже дякую за це.
Абрар Хоссейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.