"I have a simple mission: To create an open-source, non-linear video editor for Linux. Many have tried and fallen before me, but for some reason I feel compelled to try myself. I am documenting my journey in this blog for all to read. It will be a dangerous journey, and I might not make it back alive. Hold on tight, and enjoy the ride! By the way, I'm calling this project OpenShot Video Editor!"

I have now invested many months of my life into designing a video editor for Linux. I have learned new programming languages, become friends with many people from around the world, and had many "Ah ha" moments. I am a huge supporter of FOSS, and I consider this my contribution to the Linux community!

This is old news to some, but the #1 issue when trying to create a multimedia application is choosing the correct framework to build your application on. There are 2 competing video frameworks to choose from (at least in the Python world): Gstreamer + Gnonlin and the MLT Framework.



Gnonlin:

I really thought that Gnonlin was the correct framework in the beginning. Many people recommended it to me, and it it's based on the largest multimedia library on Linux, Gstreamer. There is even a Python based video editor in development, PiTiVi. Sounds great, right? What could possibly go wrong.

Well, just about everything has gone wrong. Now I realize not all these problems are related to Gnonlin... some are related to Gstreamer itself. But regardless of that, here are the main problems I've run into:

  • Terrible support for .DV video files (very choppy playback)
  • No support for mixing an MP3 with Video... sounds crazy, but I could never get it to work, and the community couldn't provide a working example.
  • No support for transitions, regardless of what people say. There are no working examples of this... other than a few theoretical blog entries.
  • Very complicated API (based on Gstreamer). Not kidding here. It's really, really, really, really complicated to understand how to create a Gnonlin pipeline, connect all the signals, and actually get something to happen.
  • Even though Gstreamer has a giant community, the Gnonlin community is actually quite small. In fact, it's so small it's really only 1 person, Edward Hervey. Sorry Edward... not picking on you at all, but you really are the only person in the Gnonlin community. =) Kind of reminds me of the Wizard of Oz... ya know, the little guy behind the curtain.
  • And because the community is sooo small, I have had 0 of my many questions answered by this community. That's right... zero. The first question I asked to the Gnonlin mailing list took over a month for someone to reply.
  • There are no examples, barely any documentation, and only about 3 blog entries explaining the concepts... and some illustrations on how it will work someday... when it's finished.
Now for some positives. Gnonlin is created by Edward Hervey, who is a very smart dude. He is very active in the Gstreamer mailing list, and seems to be one of the very smartest people involved in Gstreamer. In other words, I have lots of respect for Edward, but that doesn't change the fact that Gnonlin has been a pain in my ass.

I'm actually not the first project to dump Gnonlin in favor of the MLT framework. The great Diva Video Editor had an epic falling out with the Gstreamer / Gnonlin community. To refresh your memory:

http://www.mdk.org.pl/2006/12/7/state-of-diva
http://blogs.gnome.org/uraeus/2006/12/08/comment-on-diva/




MLT Framework:

First off, I would like to compliment the MLT Framework (and it's community) for being so professional and patient with me over the past few months. Especially the great Dan Dennedy! They have helped me solve every problem and answered every question I've had so far. In fact, the first night I emailed the MLT mailing list, I received more emails than I have ever received from the Gnonlin community.

I wish I had discovered the MLT framework sooner than I did, but I guess better late than never.

Here are some of the MLT advantages:
  • Great support for .DV video files (very smooth playback)
  • A super simple API, Command line, and XML format which makes developing an application very easy.
  • Can mix any number of audio files and video files together... without crashing, without bugs, and without a problem.
  • A full transition system... including a cool luma translation which will enable all sorts of custom Star Wipes, Key Holes, and other transitions.
  • Most importantly, it's got great documentation, lots of examples, and a responsive community to help answer any questions.
If you haven't figured it out yet, OpenShot Video Editor is leaving Gnonlin for MLT. As usual, I am following in the footsteps of the Diva Video Editor. If you are reading this, and considering which framework is right for you, please strongly consider the MLT framework.

Also, a great framework deserves a great logo. Just for fun, I've prettied up the MLT logo, so it's a bit shinier... to match OpenShot's good looks. =) Please let me know if you want the SVG version, and I'll email it to you.

5 comments

  1. bilboed  

    Hi,

    For starters, yes it seems like I'm the only one *involved* in GNonLin which is bad for the reasons you mentionned. The dead mailing-list/website is also my fault (I should have killed them aeons ago and pointed to the gstreamer website/ml). I think that has lead many people to believe there is a "GNonLin" community, whereas in fact it's just another GStreamer plugin. As to not having enough people knowledgeable about GNonLin... well.. it's just because not that many people seem to need non-linear functionalities in their applications (only audio/video editors need that). So it's kind of hard to push such an argument. Don't email/use dead websites/ml, join the GStreamer community !

    As for switching to MLT away from GStreamer... it's sad. But let's get the record straight, Diva didn't switch away from GNonlin, it *never* used it ! It was internally redoing what GNonLin already provided... without the full knowledge of GStreamer. So yes, I know the frustration was insanely high for MDK and the rest of the Diva team about that, and understand why they switched, but here you just 'leave' GNonLin and GStreamer without any further look. You only got in touch with me by mail once, I wouldn't call that persistence. The whole point of GNonLin is to offer a simpler approach to using streams by allowing you to talk in terms of positions, duration and priorities (instead of nodes and graphs).... but still being able to combine that with the flexibility of GStreamer (i.e. viewing and encoding a timeline are just a different graph).

    Is gnonlin complicated ? I guess it is somewhat, but isn't video editing too from a programming point of view ? Check out the number of video editors that have failed in the past. *PERSIST* !

    Let's carry on to your 'main' problems.

    * DV playback is choppy... wait. You're most likely not using GStreamer correctly or there's something completely screwed up in your system. DV support in GStreamer is pristine *and* fast.

    * No mixing of mp3 with video ? What do you mean by that ? How did you do that ? Did you file a bug ?

    * Transitions work, file a bug requesting an example of using transitions with gnonlin. We also have virtually all smpte transitions available through the smpte plugin. We still haven't got round to integrating it in pitivi right now since we're focusing on other priorities.

    * GStreamer is complicated. Well... yes. It's the price to pay for a highly flexible framework, but once you understand the basic pipeline/element/signal principles, everything follows the same logic and you all of a sudden get access to an always increasing list of plugins. Using a higher-level/simpler-api framework comes with tradeoffs (you lose all the flexibility).

    A final remark I just though about... you're using python right ? So... did you check out pitivi's code (git.pitivi.org) for how we use GNonLin ?

    Please, don't leave GStreamer and GNonLin, come and ask questions, give comments, file bugs and we *will* be answering them (provided you don't use the dead website/ml).

    Regards,

    Edward

  2. Tim  

    It sounds to me more like the main issue here was communication failure on the 'gnonlin community' side. Something, to be sure, that clearly needs to be addressed (e.g. by pointing people towards gstreamer-devel or the gstreamer irc channel).

    None of the technical issues you mentioned look particularly severe, most likely bugs that shouldn't be too hard to fix if they are not fixed already. It would be great if you could file bug reports for the issues you ran into in any case (with a few more details), so we can fix them for the next guy who wants to write a video editor based on gnonlin.

    I was a bit baffled by your one-man-show comment. You're certainly right that it looks like gnonlin is a one-man-show - although more like 1.5 now if you focus on recent commits; however, I'm not sure how swapping the one-man-show gnonlin, which is just a small component based on top of a very actively maintained and used GStreamer framework with a giant community, for MLT, where the *entire framework* is maintained by just one person (judging by the ohloh contributors list), is a good idea. Again, it seems like you're persuaded by your good communication experience (and presumably the fact that the documentation is better, or exists at all). Doesn't seem like the optimal approach to choosing the core component of a long-term software project to me :)

    In any case, I hope you achieve what you set out to do, be it with MLT or GStreamer.

  3. Jonathan Thomas  

    First off, thanks for the comments. Just to clarify, the main reason I'm choosing MLT is based on 2 factors:

    1) It works
    2) It's easy to use

    It only took me a few hours to have a working demo using MLT. I've spend months tinkering with Gnonlin and have nothing to show for it. I don't think these are shallow reasons for choosing a framework.

    As far as communication, I don't think the facts are quite right. I've sent numerous emails to Gstreamer, Gnonlin, and Edward Hervey. I have asked many questions in the Gstreamer IRC. I'm a member of the Gstreamer Mailing list, as well as PiTiVi. I didn't just send a single email, and give up. My decision isn't just based on how responsive the MLT team is. It's just the icing on the cake.

    Also, keep this in mind. The MLT framework is being actively improved... largely due to the involvement of Kdenlive. It's not some old, antiquated framework. If you do an honest evaluation of Gnonlin and MLT (which I feel that I did), you will see than MLT is better than Gnonlin in almost every way. Seriously, it's really good.

    My suggestion to the Gnonlin team would be the following:

    1) Improve the documentation for Gnonlin. Write examples in many languages, and showcase all the features. For example, if it supports transitions, then give some concrete examples of how to use them in multiple languages. Working code examples... not just theory. This would be a HUGE help to developers interested in Gnonlin.

    Thanks,
    -Jonathan

  4. Vadim Peretokin  

    Sad that you had to move over, I've already ran into limitations of the MLT framework (ie no speedup or slowing down of the video).

    Hope it just doesn't turn out to be a short-term advantage.

  5. Jonathan Thomas  

    @Vadim,
    MLT can speed up and slow down video. In fact, there is not much that MLT can not do. There are some holes in the documentation, so sometimes you need to ask for help. But, just about everything I have dreamed up for OpenShot can be easily done with MLT. Thanks for the comment!

Post a Comment

Subscribe to: Post Comments (Atom)