Help
Difference between revisions of "SoX"
(Create page about terminal audio tool SoX ! :D) |
|||
(13 intermediate revisions by one other user not shown) | |||
Line 7: | Line 7: | ||
== Denoise == | == Denoise == | ||
=== Extract noise file from silence + room’s noise === | === Extract noise file from silence + room’s noise === | ||
− | Given a file with silence in | + | Given a file with silence in its first 0.3sec. : |
− | < | + | <source lang="bash"># sox in.ext out.ext trim {start: s.ms} {duration: s.ms} |
sox audio.wav noise-audio.wav trim 0 0.300 | sox audio.wav noise-audio.wav trim 0 0.300 | ||
# or : | # or : | ||
− | ffmpeg -i audio.wav -vn -ss 00:00:00 -t 00:00:00.300 noise-audio.wav</ | + | ffmpeg -i audio.wav -vn -ss 00:00:00 -t 00:00:00.300 noise-audio.wav</source> |
+ | |||
=== Generate a noise profile in sox: === | === Generate a noise profile in sox: === | ||
− | < | + | <source lang="bash">sox noise-audio.wav -n noiseprof noise.prof</source> |
=== Clean the noise from the audio === | === Clean the noise from the audio === | ||
Single file : | Single file : | ||
− | < | + | <source lang="bash">sox audio.wav audio-clean.wav noisered noise.prof 0.21</source> |
Batch of files: | Batch of files: | ||
− | < | + | <source lang="bash">mkdir -p ./clean; |
− | for file in ./*.wav;do key=$(basename | + | for file in ./*.wav;do key=$(basename "$file" .wav); sox "$file" ./clean/"$key".wav noisered ./noise.prof 0.21; done;</source> |
According to source : | According to source : | ||
Line 34: | Line 35: | ||
== Fades == | == Fades == | ||
− | To fade-in on 0.3s and out in 0.4s, you can use a simple bash script, as | + | To fade-in on 0.3s and out in 0.4s, you can use a simple ./fadeWav.sh bash script, such as: |
+ | |||
+ | <source lang="bash"> | ||
+ | sox input.wav output.wav fade "0:0.3" `soxi -d input.wav` "0:0.3" | ||
+ | </source> | ||
− | < | + | Or as a script: |
+ | <source lang="bash">#! /bin/bash | ||
WAV_IN=$1 | WAV_IN=$1 | ||
WAV_OUT=$2 | WAV_OUT=$2 | ||
− | FADE_IN_L= | + | FADE_IN_L="0:0.3" |
− | FADE_OUT_L= | + | FADE_OUT_L="0:0.4" |
LENGTH=`soxi -d $WAV_IN` | LENGTH=`soxi -d $WAV_IN` | ||
− | sox $WAV_IN $WAV_OUT fade $FADE_IN_L $LENGTH $FADE_OUT_L</ | + | sox $WAV_IN $WAV_OUT fade $FADE_IN_L $LENGTH $FADE_OUT_L</source> |
<code>soxi -d</code> returns the length of the wav file. See sox documentation for more on [http://sox.sourceforge.net/soxi.html soxi]. | <code>soxi -d</code> returns the length of the wav file. See sox documentation for more on [http://sox.sourceforge.net/soxi.html soxi]. | ||
You can run this bash script as follows: | You can run this bash script as follows: | ||
− | < | + | <source lang="bash">./fadeWav.sh input.wav faded.wav</source> |
=== Sources === | === Sources === | ||
* [https://stackoverflow.com/a/24307805?stw=2 Answer:SOX and fade in and fade out] | * [https://stackoverflow.com/a/24307805?stw=2 Answer:SOX and fade in and fade out] | ||
Line 56: | Line 62: | ||
* [https://stackoverflow.com/questions/20014064/ How to batch split audio files wherever there is silence?] | * [https://stackoverflow.com/questions/20014064/ How to batch split audio files wherever there is silence?] | ||
* [https://people.xiph.org/~jm/demo/rnnoise/ RNNoise] | * [https://people.xiph.org/~jm/demo/rnnoise/ RNNoise] | ||
+ | |||
+ | {{Lingua_Libre_scripts}} | ||
+ | |||
+ | [[Category:Lingua Libre:Help]] |
Revision as of 17:46, 19 January 2021
Dependencies
- SoX - Sound eXchange, the Swiss Army knife of audio manipulation
- FFmpeg - ffmpeg video converter
- -ss: the time offset from beginning. (
h:m:s.ms
). - -t duration: record or transcode duration seconds of audio/video.
- -ss: the time offset from beginning. (
Denoise
Extract noise file from silence + room’s noise
Given a file with silence in its first 0.3sec. :
# sox in.ext out.ext trim {start: s.ms} {duration: s.ms}
sox audio.wav noise-audio.wav trim 0 0.300
# or :
ffmpeg -i audio.wav -vn -ss 00:00:00 -t 00:00:00.300 noise-audio.wav
Generate a noise profile in sox:
sox noise-audio.wav -n noiseprof noise.prof
Clean the noise from the audio
Single file :
sox audio.wav audio-clean.wav noisered noise.prof 0.21
Batch of files:
mkdir -p ./clean;
for file in ./*.wav;do key=$(basename "$file" .wav); sox "$file" ./clean/"$key".wav noisered ./noise.prof 0.21; done;
According to source :
Change 0.21 to adjust the level of sensitivity in the sampling rates (I found 0.2-0.3 often provides best result).
Sources
Fades
To fade-in on 0.3s and out in 0.4s, you can use a simple ./fadeWav.sh bash script, such as:
sox input.wav output.wav fade "0:0.3" `soxi -d input.wav` "0:0.3"
Or as a script:
#! /bin/bash
WAV_IN=$1
WAV_OUT=$2
FADE_IN_L="0:0.3"
FADE_OUT_L="0:0.4"
LENGTH=`soxi -d $WAV_IN`
sox $WAV_IN $WAV_OUT fade $FADE_IN_L $LENGTH $FADE_OUT_L
soxi -d
returns the length of the wav file. See sox documentation for more on soxi.
You can run this bash script as follows:
./fadeWav.sh input.wav faded.wav