3

I need to write a software that does:

  1. Get an uncompressed video from disk
  2. Compress it into MPEG-1 or MPEG-2 being able to change quantization matrix, GOP size and/or macroblock size for DCT/motion search
  3. Apply a repetition code to add redundancy
  4. Simulate transmission over a noisy channel with given error rate
  5. Reconstruct the original stream from the repetition code
  6. Decode the video and compare it with the original one by gathering stats like frame-by-frame difference, file size and stuff like that

This should by done by a nice GUI to show the input and output videos, alongside their frame difference.

Given what I need to do, I can write some requirements:

  • An encoder which allows me to change some of the parameters (needed for point 2)
  • A language that allows me to work at bit level (needed for points 3 and 5)
  • A language that allows me to build a nice GUI using a designer (GUI is not the core of the project so I can't afford wasting time by writing one)

So far my searches have led to mixed results that are not giving me enough resources to start.

My first find was this MATLAB project which implements MPEG and has some parameters that can be tweaked (like quantization matrix and GOP pattern for example). The problem here is that I don't know MATLAB at all, so I have no idea on how to link everything and build a GUI.

So the next step was to move to JAVA, and I found a LOT of FFMPEG wrappers, but none seems to allow me to set the parameters that I need. My last try was with Xuggler but the Wiki is down and the documentation does not talk about what I need. Plus, JAVA doesn't work at bit level so I'd have issues applying the repetition code.

Failing with JAVA led me to C# and DirectShowNet, but the documentation is quite lacking and I don't know how to start because I didn't find anything related to setting the parameters that I need using Filters.

The question now is: is there any language/framework/platform that allows me to do what I need without having to deal with pure C/C++? I'd expect a lot of stuff on this matter since we're talking about well known codecs, still I'm having a hard time finding what I need.

1

I suggest that you take a look at python + :

  • the many python ffmpeg wrappers for stages 1 & 2. I would also look at the python OpenCV wrapper for a wealth of video manipulation tools.
  • Then you could look at using numpy/scipy for stages 3 & 5
  • And you have a choice of GUI construction libraries such as wxPython & pySide/pyQT for providing the GUI.
  • You could also look at using Jupyter/iPython for experimenting with settings, presenting results, etc.

This gives you the following features:

  • Free Gratis & FOSS
  • Much shallower learning curve than C++ or C#
  • Very rapid prototyping & good problem location & debugging
  • Cross Platform
  • In general the documentation tends to be more comprehensive, (ducks).
  • Huge range of libraries out there
  • Very active user community

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.