summaryrefslogtreecommitdiff
path: root/opt/noNoise-master
diff options
context:
space:
mode:
authorSrikant Patnaik2015-02-20 11:52:00 +0530
committerSrikant Patnaik2015-02-20 11:52:00 +0530
commit9f48ccddab51ca849476ce3f5939a04857366e48 (patch)
tree44425c207a1dcfe3d214df4b5608d8685c108e9e /opt/noNoise-master
parent6a7ac64a90782eb300fa8a76e81b55c51e5a3cdb (diff)
downloadFOSSEE-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
Diffstat (limited to 'opt/noNoise-master')
-rw-r--r--opt/noNoise-master/README.rst160
-rw-r--r--opt/noNoise-master/noNoise.py113
-rwxr-xr-xopt/noNoise-master/noNoise.sh32
-rw-r--r--opt/noNoise-master/nonoise.desktop10
4 files changed, 315 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;