Introduction ============ With home made videos or screencasts, we often find a constant noise in our recording due to electric wiring, fan, choke coil of fluorescent lamp etc. This could be irritating.But fortunately, these noises can be easily detected and can be removed with GUI based tools, such as Audacity. To use any GUI based tool, we need to extract audio manually and then feed it to the software, once done we have to again join the noisefree audio with the video. This is OK with 1 or 2 files. But to for automating each step and to handle multiple files we need a simple script. One can simply use `sox` and `ffmpeg` commands shown below in given order to get the same result(see `Working`). UPDATE for 14.04 ---------------- Install **libav-tools** and **sox**. Run as :: $ bash noNoise.sh noisyVideo.mp4 noise-reduction-factor This will create an backup file of original video in **/tmp** and noisefreeVideo in **pwd**. Example :: $ bash noNoise.sh Kazam_screencast_00000.mp4 0.2 It will create **noisefree_Kazam_screencast_00000.mp4.mp4** in **pwd** and a backup of original video in **/tmp/orig_Kazam_screencast_00000.mp4** This is just an early fix, will add more features soon. Please raise issues for any bugs or email me for feature requests. Also, I recently came across **Kazam** package (available in repositories), its a good screen recorder with most needed keyboard shortcuts, such as * start recording: Super + Control + r * pause recording: Super + Control + p * finish recording: Super + Control + f * show Kazam: Super + Control + s * quit: Super + Control + q Required packages (Upto Ubuntu 13.10) ------------------------------------- * sox * ffmpeg * ffmpeg2theora * libmp3lame0 * Linux machine with default python Usage ----- ### Remove noise from a single file $ python noNoise.py VideoWithNoise.ogv CleanVideo.ogv (source file) (destination file) (OR) $ python noNoise.py VideoWithNoise.ogv CleanVideo.ogv 0.21 (source file) (destination file) (noise factor) The third argument is optional(Noise factor). The scale spans from `0.0` to `1.0`. Zero means no noise supression and 1.0 means full. The full scale is avoided. Best optimum result is found between `0.2` to `0.3`. By default script will take `0.26`. One can experiment with noise factor to get best noise free video. NOTE: Careful, destination file will be overwritten if exist in given path. ### Remove noise from all files inside a directory $ python noNoise.py allNoisyFiles allCleanFiles (source dir) (destination dir) (OR) $ python noNoise.py allNoisyFiles allCleanFiles 0.21 (source Dir) (destination dir) (Noise factor) NOTE: Please don't use any '/' after directory name. It will spit error. The fix is possible, but I don't want to spend time on it. This script is dirty but useful(atleast for me). When I find time, I will surely modify it. Meanwhile you all are welcome to add modifications. Working: ------- ###1. Extracting video in less compressed format ffmpeg -i 1.ogv -sameq -an 2.wmv Extracting video in wmv format for easy editing(less compressed than mp4,ogv,avi). We can leave the video intact and combine the noiseless audio later to it, but it will hamper the video quality of the newly joined video. The size of this 'wmv' will be approximately 5 times than that of original 'ogv' video. ###2. Extracting audio in less compressed format ffmpeg -i 1.ogv -sameq 2.wav Extracting audio in wav format for fast & easy editing.The size of the `wav` audio file will be approximately 8 times larger than the original. ###3. Getting noise profile sox 2.wav -t null /dev/null trim 0 0.5 noiseprof myprofile Creating a noise profile of original audio at 0 to 0.5 second. One can change this duration if required. In most cases the standard noise is evenly distributed throughout the recording(eg: fan, PC etc), so the default 0 to 0.5 value will do the trick. ###4. Converting audio according to noise profile sox 2.wav 2-noisefree.wav noisered myprofile 0.26 Creating a noisefree audio based on our noise profile. The value `0.26` is important. This is scale for noise removal. 0 means no removal and 1 means full removal. The full removal will supress most of the orginal audio too. So as per my R&D, I found `0.26` to be most optimized one for noise removal. ###5. Combining back audio and video ffmpeg -i 2-noisefree.wav -i 2.wmv -sameq vid.wmv Merging new noiseless audio and old video together. ###6. Final conversion ffmpeg2theora vid.wmv -o vid.ogv Now converting wmv into our favorite ogv format. This will create a `vid.ogv` of almost same size that of original video. License ------- GNU GPLV3