Video Compression

VideoNerd

Introduction

Theora video coding standard released in 2008 by Xiph.Org Foundation, and its specifications are here   .  Theora’s code sources are here     .

Notice that the ffmpeg tool by default supports Theora encoding ‘-c:v  libtheora‘  (provided that in the configuration of ffmpeg set –enable-libtheora), but the output stream is not played, ffplay reports the errors:  error in unpack_block_qpis

Theora is a VLC coding, DCT-based compression scheme, like most common video codecs.

As reported in the article  “COMPARISON OF OPEN AND FREE VIDEO COMPRESSION SYSTEMS A Performance Evaluation”, Till Halbach, 2009,  H264 and Dirac significantly outperform Theora:

Interesting paper on Ogg Theora and H264 “Ogg Theora vs. H.264: head to head comparisons”   by Jan Ozer

Despite Ogg Theora is inferior to h264 and Daala, i believe that for some marginal applications Ogg Theora is still attractive due to its simplicity and patent-free.

How Compile Theora Codec in Windows

First of all you need to get Ogg and Vorbis sources , you can unpack tar.gz with a free 7z tool .

Under libtheora-1.1.1\include\  create the folder ‘vorbis‘ and copy codec.h , vorbisenc.h and vorbisfile.h  from  libvorbis-1.3.3\include\vorbis\  .

Building Vorbis Static Library

Open Win32 solution vorbis_static.sln in libvorbis-1.3.3\win32\VS2010  (if you have more advanced Visual Studio apply retargetting). Build libvorbis_static.lib in Win32 Release and copy this library to libtheora-1.1.1\win32\VS2008\Win32\Release

 

Building Ogg Static Library

Open Win32 solution libogg_static.sln in ogg\win32\VS2010  (if you have more advanced Visual Studio apply retargetting). Build libogg_static.lib in Win32 Release and copy this library to libtheora-1.1.1\win32\VS2008\Win32\Release

 

Building Theora Encoder

Open Win32 solution libtheora_static.sln  in libtheora-1.1.1\win32\VS2008 (if you have more advanced Visual Studio apply retargetting). 

In encoder_example.c  remove ‘static’ before the function ‘rint’

double rint(double x)
{
if (x < 0.0)
return (double)(int)(x – 0.5);
else
return (double)(int)(x + 0.5);
}

Build the project encoder_example_static in Win32 Release/

you get libtheora-1.1.1\win32\VS2008\Win32\Release\encoder_example_static.exe  , the encoder_example_static.exe  is statically built and hence can be moved to any place.

 

How Run Theora Codec (encoder_example_static)

encoder_example_static.exe gets as input only y4m files, if you have yuv420p file you need to convert it to y4m format with ffmpeg (for example) as follows:

ffmpeg -s 352×288 -i  test_cif.yuv  -vsync 0  -y test_cif.y4m

 

encoder_example_static.exe -h  provides full help.

Example [encoding y4m-file with the frame rate 30 fps (-f 30 -F 1), with key frame distance 30 frames and video quality middle (the quality is in the range 0..10)]

encoder_example_static.exe -o test.ogg -f 30 -F 1 -k 30 -v 5 test_cif.y4m

 

 

 

 

 

 

21 Responses

  1. I do agree with all of the ideas you have presented in your post. They are really convincing and will certainly work. Still, the posts are too short for starters. Could you please extend them a bit from next time? Thanks for the post.

  2. Very nice post and straight to the point. I don’t know if this is in fact the best place to ask but do you folks have any thoughts on where to employ some professional writers? Thanks in advance 🙂

  3. It is appropriate time to make some plans for the future and it is time to be happy. I have read this post and if I could I want to suggest you some interesting things or suggestions. Maybe you can write next articles referring to this article. I wish to read even more things about it!

  4. Wonderful work! This is the type of information that should be shared around the web. Shame on Google for not positioning this post higher! Come on over and visit my website . Thanks =)

  5. Please let me know if you’re looking for a article author for your weblog. You have some really good articles and I think I would be a good asset. If you ever want to take some of the load off, I’d really like to write some content for your blog in exchange for a link back to mine. Please send me an e-mail if interested. Kudos!

  6. I’ve been exploring for a bit for any high-quality articles or blog posts on this kind of area . Exploring in Yahoo I at last stumbled upon this site. Reading this info So i’m happy to convey that I have an incredibly good uncanny feeling I discovered just what I needed. I most certainly will make sure to do not forget this site and give it a look on a constant basis.

  7. Hiya, I’m really glad I have found this info. Nowadays bloggers publish only about gossips and net and this is actually frustrating. A good site with exciting content, that’s what I need. Thank you for keeping this website, I will be visiting it. Do you do newsletters? Can’t find it.

  8. Hi there! This post couldn’t be written any better! Reading through this post reminds me of my previous room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thank you for sharing!

  9. Thank you for sharing superb informations. Your web site is so cool. I am impressed by the details that you¦ve on this web site. It reveals how nicely you understand this subject. Bookmarked this website page, will come back for extra articles. You, my friend, ROCK! I found just the information I already searched everywhere and just couldn’t come across. What a perfect website.

Leave a Reply

Your email address will not be published. Required fields are marked *