Membersihkan rekaman suara dari baris perintah?

28

Saya telah menggunakan Audacity untuk menghilangkan noise dari rekaman sebelumnya, namun ia memiliki penggunaan baris perintah yang sangat terbatas. Saya punya ~ 100 video ceramah singkat yang akan saya tonton beberapa bulan ke depan dan ingin cara mudah untuk membersihkan semuanya sekaligus atau sesuai kebutuhan sebelum menonton.

Apakah ada alat baris perintah atau perpustakaan bahasa populer yang dapat saya gunakan untuk melakukan ini?

Annan
sumber

Jawaban:

17

Melihat sox

Mengutip 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).

Jadi, itu harus cocok sebagai alternatif perintah baris pendamping untuk audaciy!


Mengenai tugas sebenarnya membersihkan rekaman, lihat filter noiseredyang sama dengan filter pengurangan kebisingan 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
           [...]
Volker Siegel
sumber
7
Sayangnya saya menemukan deskripsi yang digunakan sox di halaman manual yang sangat bising untuk dibaca - pun dimaksudkan. Apakah tidak ada cara yang lebih sederhana, dengan hanya satu perintah saja untuk bermain dengan noisereduction?
shevy
Tentu, tidak ada masalah - cukup tulis dalam satu kalimat sederhana apa yang ingin Anda ubah - tetapi cukup tepat untuk menjadi jelas secara teknis ... Ok, itu tidak akan berfungsi seperti ini karena Anda perlu memahami apa itu kebisingan, dan bagian mana dari kebisingan yang ingin Anda hapus, yang dapat Anda kurangi, dan apa yang dapat mengurangi kualitas suara jika tidak melakukan pengurangan kebisingan. Untuk bermain-main dengan pengurangan kebisingan, Anda perlu mengetahui klub-klub juggling Anda - jenis-jenis kebisingan untuk menyulap, dan bagaimana mereka dapat diseimbangkan ketika mereka bertabrakan di udara. Kemudian, sox adalah kotak peralatan Anda dan pertolongan pertama!
Volker Siegel
12

Jawaban yang diterima tidak memberikan contoh praktis (lihat komentar pertama) jadi saya mencoba memberikannya di sini. Di Ubuntu dengan apt Anda harus menginstal soxdan mendukung format audio

sox

Pemasangan pertama soxdan dukungan untuk format (termasuk mp3):

sudo apt install sox libsox-fmt-*

Kemudian sebelum Anda menjalankan perintah Anda pada file / file pertama Anda perlu membangun profil, membuat sampel suara, ini adalah bagian paling penting yang harus Anda pilih waktu terbaik ketika kebisingan terjadi, pastikan Anda tidak memiliki suara (atau musik / sinyal yang Anda coba simpan) dalam sampel ini:

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

Sekarang buat profil dari sumber itu:

sox noisesample.wav -n noiseprof noise_profile_file

Dan akhirnya jalankan pengurangan noise pada file:

sox source.mp3 output.mp3 noisered noise_profile_file 0.31

Di mana noise_profile_fileprofil dan 0.30nilainya. Nilai lebih baik di suatu tempat antara 0,20 dan 0,30, lebih dari 0,3 sangat agresif, di bawah 0,20 agak lunak dan bekerja dengan baik untuk audio yang sangat bising.

Cobalah dan mainkan dengan itu dan jika Anda menemukan trik pengaturan lainnya dan silakan berkomentar dengan temuan dan pengaturan tuning.

cara batch memprosesnya

Jika suaranya mirip, Anda dapat menggunakan profil yang sama untuk semua mp3

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

atau jika ada struktur folder:

tree -fai . | grep -P ".mp3$" | xargs -L1 -I{} sox {}  {}_noise_reduced.mp3  noisered noise_profile_file 0.31
Eduard Florinescu
sumber
1
jika itu yang diucapkan audio dan saluran kiri-kanan terpisah tidak perlu, maka Anda dapat menambahkan remix -untuk mencampur-down dari semua saluran masukan ke mono
Jake Berger
2
@EduardFlorinescu Jawaban Anda tepat. Saya memiliki rekaman suara statis di latar belakang setiap rekaman. Saya membaca jawaban Anda dan, menggunakan 2 detik pertama dari file suara saya untuk membuat profil dan akhirnya, menggunakannya untuk menghilangkan suara dari rekaman. Terima kasih banyak atas ini.
Abrar Hossain