diff options
author | Srikant Patnaik | 2015-02-20 11:52:00 +0530 |
---|---|---|
committer | Srikant Patnaik | 2015-02-20 11:52:00 +0530 |
commit | 9f48ccddab51ca849476ce3f5939a04857366e48 (patch) | |
tree | 44425c207a1dcfe3d214df4b5608d8685c108e9e | |
parent | 6a7ac64a90782eb300fa8a76e81b55c51e5a3cdb (diff) | |
download | FOSSEE-netbook-patcher-9f48ccddab51ca849476ce3f5939a04857366e48.tar.gz FOSSEE-netbook-patcher-9f48ccddab51ca849476ce3f5939a04857366e48.tar.bz2 FOSSEE-netbook-patcher-9f48ccddab51ca849476ce3f5939a04857366e48.zip |
New application under FOSSEE-tools to reduce noise from recorded videosNoNoise-1
-rw-r--r-- | opt/noNoise-master/README.rst | 160 | ||||
-rw-r--r-- | opt/noNoise-master/noNoise.py | 113 | ||||
-rwxr-xr-x | opt/noNoise-master/noNoise.sh | 32 | ||||
-rw-r--r-- | opt/noNoise-master/nonoise.desktop | 10 | ||||
-rw-r--r-- | usr/share/applications/nonoise.desktop | 10 |
5 files changed, 325 insertions, 0 deletions
diff --git a/opt/noNoise-master/README.rst b/opt/noNoise-master/README.rst new file mode 100644 index 0000000..0efdbd4 --- /dev/null +++ b/opt/noNoise-master/README.rst @@ -0,0 +1,160 @@ +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 diff --git a/opt/noNoise-master/noNoise.py b/opt/noNoise-master/noNoise.py new file mode 100644 index 0000000..cfff188 --- /dev/null +++ b/opt/noNoise-master/noNoise.py @@ -0,0 +1,113 @@ +#!/usr/bin/python env + +"""This script can be used to remove audio noise from 'ogv' videos. + + Usage:(for future Srikant & all users) + + 1)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. + + + + 2)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. Please find this copy and future updates + at http://github.com/srikantpatnaik. + Thanks for your time. + + Details of each commands are in README.rst. + +""" + +from os import system, path, listdir, chdir, mkdir +from sys import argv +from time import sleep + +def checkType(): + #Check for type of first argument(file or dir). + if path.isdir(argv[1]): + processDir() + else: + processFile() + return + + +def processDir(): + #make dir to save all new files + mkdir(argv[2]) + #cd to source dir + chdir(argv[1]) + for eachfile in listdir('.'): + execute(setCommands(eachfile)) + return + + +def processFile(): + #Calling setCommands with source file. + #Will return list of commands to be executed + execute(setCommands(argv[1])) + return + + +def execute(cli): + #total 7 commands with some delay for disk + #write and sync + for each in cli: + system(each) + sleep(0.2) + return + + +def setCommands(filename): + #The dirty function. + cli = [None]*7 + cli[0] = 'ffmpeg -i ' + ' ' + filename + ' -sameq -an ' + '.rawVideo.wmv' + cli[1] = 'ffmpeg -i ' + ' ' + filename + ' -sameq ' + '.rawAudio.wav' + cli[2] = 'sox .rawAudio.wav -t null /dev/null trim 0 0.5 noiseprof myprofile' + #Checks for noise factor. + if len(argv)>3: + cli[3] = 'sox .rawAudio.wav .noisefree.wav noisered myprofile ' + argv[3] + else: + #The default value for noise factor is 0.26. Change accordingly. + cli[3] = 'sox .rawAudio.wav .noisefree.wav noisered myprofile 0.26' + #Creating a less compressed file to retain video quality. + cli[4] = 'ffmpeg -i .noisefree.wav -i .rawVideo.wmv -sameq .combined.wmv' + #Checks for file or directory. If dir, the output is saved in different directory. + if not path.isfile(argv[1]): + cli[5] = 'ffmpeg2theora .combined.wmv -o ' + '../' + argv[2] + '/' + filename + else: + #Will create the final ogv video from wmv. + cli[5] = 'ffmpeg2theora .combined.wmv -o ' + argv[2] + cli[6] = 'rm .rawVideo.wmv .rawAudio.wav .noisefree.wav .combined.wmv myprofile' + return cli + + + +if __name__ == '__main__': + checkType() diff --git a/opt/noNoise-master/noNoise.sh b/opt/noNoise-master/noNoise.sh new file mode 100755 index 0000000..f247568 --- /dev/null +++ b/opt/noNoise-master/noNoise.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Please install 'libav-tools' for Ubuntu 14.04 onwards +# As ffmpeg is obsolete, it has been replaced by 'avconv' +# Instead of python script, a simple bash one is sufficient + +# A beta release for noNoise-v2 + +# Usage example +# $ bash noNoise.sh noisyVideo.mp4 noise-reduction-factor + +# noise-reduction-factor: 0 means no reduction, 1 means +# maximum damping of noise (recommended is 0.2 to 0.4) + + + +# Making a backup of the original video +echo "Back up original video at /tmp/orig_$1" +cp -v $1 /tmp/orig_$1 + +# Extracting audio from noisyVideo +avconv -i $1 -f wav -ab 192000 -vn /tmp/noisy.wav + +# Creating a noise profile, basically looking for white noise +# in 0 to 0.5 sec of the clip (change if you like) +sox /tmp/noisy.wav -n trim 0 0.5 noiseprof myprofile + +# Removing noise using noise profile +sox /tmp/noisy.wav /tmp/noisefree.wav noisered myprofile $2 + +# Replacing noisyAudio with noisefree audio in original video +avconv -i $1 -i /tmp/noisefree.wav -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 noisefree_$1.mp4 diff --git a/opt/noNoise-master/nonoise.desktop b/opt/noNoise-master/nonoise.desktop new file mode 100644 index 0000000..676111e --- /dev/null +++ b/opt/noNoise-master/nonoise.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Keywords=FOSSEE updates +Name=FOSSEE-updates +Comment=FOSSEE updates +Exec=bash /opt/noNoise-master/noNoise.sh +#Icon=/opt/FOSSEE-netbook-patcher/patcher.png +Terminal=false +Type=Application +MimeType=text/plain +Categories=GTK;Other; diff --git a/usr/share/applications/nonoise.desktop b/usr/share/applications/nonoise.desktop new file mode 100644 index 0000000..676111e --- /dev/null +++ b/usr/share/applications/nonoise.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Keywords=FOSSEE updates +Name=FOSSEE-updates +Comment=FOSSEE updates +Exec=bash /opt/noNoise-master/noNoise.sh +#Icon=/opt/FOSSEE-netbook-patcher/patcher.png +Terminal=false +Type=Application +MimeType=text/plain +Categories=GTK;Other; |