VP8/9 vs h264/5 for personal videos

Recently I needed to encode some clips taken with my phone to a web optimized format since the videos were already in mp4 my initial thought was to keep them in mp4 format h264 video/AAC Audio.
First things first to get the videos to a web optimized format a re-encode would be needed so I had to accept that some drop in quality was going to happen. That was the easy part. A little googling and I found that libfdk_aac is the best AAC codec currently to use with ffmpeg, so I uninstalled my RPM installed ffmpeg and tried to compile my own. Getting sources for all the codecs I needed to have in my ffmpeg was pretty straight forward, but the build failed with some make error gcc was having issues building for the platform. This left me with 2 options wipe the OS fedora 20 and upgrade to the latest 21 or spin up a VM and use that to do the compile. The second option seemed like the way to go but I still wasn’t sold on the idea of having to do all this extra effort just to encode some phone clips.

During this thinking period when I was trying to get some time to go with option two I came across an article about vp9 and it hit me I was willing to jump through all this hoops to use a proprietary codec while there was a comparable opensource codec I could use with ffmpeg out of the box. So I re-installed ffmpeg from RPM spent about an hour tweaking some scripts to do the conversion and rotation of the clips.
Played back the newly encoded webm files and I could barely notice a difference with the original files, they were also 50% – 70% the size of the original files. Getting my video hosting application to work with webm files took about another hour as it was not on the list of supported extensions this was uprising since it’s an open source application.

Right now am feeling pretty happy with my choice as expected safari and IE don’t support webm so for those needing to watch the clips am just telling them to use Chrome or firefox. While the video hosting application allows me to share the clips with outsiders for my internal consumption of the clips I use Plex Media Server once they add support for webm to their native clients I will be converting the whole collection of clips from mp4 to webm.

Update: I received some feedback from family members and they are able to view the videos without a problem, so looks like I will be sticking with VP8/9.

Useful Git commands

Sometimes when using apps checked out from Git an update might break something so it’s good to know a few git commands. Move to root of the app folder you had checked out to perform git commands.

git log

This command will list all the commits so you can see at which commit you are and pick the one before yours and copy the commit hashcode it will be a long string.

git checkout hashcode

With ‘hashcode’ being the commit hashcode copied from the log. This command will move/revert your app/code to the commit you specified. Just restart your app after that to run it with the new code.

git checkout master

This command will move your code to the master branch from development. Do this if you want your app to be more stable Alpha/Developement branches break now and then as people checkin new code. They have the benefit of getting new features before the stable branch if you don’t mind having something break now and then which is ok with me 🙂

Python IMAP search and SMTP with Gmail

Recently I had a need to search through my gmail and fwd some emails on a daily basis. I checked out Gmails rest interface but it was a bit of an overkill for what I was doing. So I settled on just plain IMAP and SMTP. The main idea was search through my inbox using several search parameters, get all the emails that match the pattern and fwd them to a list of emails. So I wrote a script to do this and had cron call the script at the end of the day. I put up the source in github for anyone interested.

Love OOP Python

Python makes it easy to automate manual tasks. Over time I have accumulated some scripts each for a different task but not sharing any code between them but having some similar logic, basically a few of them were having duplicate logic. So this week as I was adding another script to download and add the latest plex media server to my local repo, I came over an article about OOP python on Stackoverflow.
After creating a class for all the common logic in my scripts I was able to reduce the size of most of them by over half, I make my living writing OOP code for java but OOP for python was new to me. I wish there was OOP for bash 🙂 I have a bunch of bash scripts that need culling.

[Solution] ALSA lib conf.c:4514:(parse_args) Unknown parameter AES0

I would get this error while trying to watch certain movies over HDMI with XBMC on my tv and no audio would be available.

ALSA lib conf.c:4514:(parse_args) Unknown parameter AES0
ALSA lib conf.c:4647:(snd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM plughw:0,0,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2

My solution to this error is in audio settings section under passthrough output device choose custom and enter whatever output you use for your HDMI mine is “plughw:1,7”. To my understanding it’s an ALSA issue with ac3 where it passes the wrong output parameters, and the AES0 parameter is supposed to set the digital audio output connector in the right mode. Thats my understanding from what I have read about it so google it if you want to find out more on this. As for me am content that it all works and I can stream all my stuff with sound to my tv.

The ResourceConfig instance does not contain any root resource classes

I have finished building a web service several times start up tomcat and get the above error even though my classes have @path annotations and my web.xml is properly setup for web services.

Here is a solution I found out, make sure to do a manual project build from Eclipse when you are done working on it. For some unknown reason even though the project is on auto build, the resource configurator did not pick up my new restful project until I did a manual build. The manual build is only required the first time you need to add the restful service to your resources, the servlet entry below is all you need to add to your web.xml to enable restful services to be configured by resource locator.


p7zip Command Line

In CentOS to use p7zip  from command line the cmd is 7za and not p7zip or 7z, I wasted some time on this as most manuals online tell you to use p7zip [options] filename.

To extract a file you would do:

7za x filename.7z

You can substitute the .7z extension with whatever archive extension you are trying to xtract e.g tar,gz,zip etc as long as its an extension that can be handled by 7zip which should be most of the common formats.

get Junit4 working on Centos5

Like most people I prefer to use centos supplied apps from their repos as it just makes keeping things updated easier. So I use the eclipse supplied by centos which does not have Junit4 if you would like to enable it here are the steps I followed:

1.Download eclipse from there site the .tar version

2.Extract folder org.junit4_4.5.0.v20090423 and file org.eclipse.jdt.junit4.runtime_1.1.0.v20090513-2000.jar and copy them to folder /usr/share/eclipse/plugins/ download file junit-4.1jar and place it in folder org.junit4_4.5.0.v20090423

3.Restart eclipse and you should be set. Happy Testing!!!!

NB: Depending on the eclipse version you download the numbers on the folders and files may be different, and incase the new versions require a different file than junit-4.1.jar eclispe will tell you the new version needed.

the Junit-4.1.jar I used is here or you can google it if you want.

Play music with Gtkpod and xmms

By default Gtkpod uses xmms to try and play songs from your Ipod, a few linux distributions come with xmms. If yours came installed with it first remove it as it does not play music from your Ipod. Then go ahead and install

You should now be able to play music from your Ipod with Gtkpod. Although xmms is not the latest player I like it because it’s small and lightweight.