The result of the past few months of hacking

November 30th, 2009 by Edward Hervey

As some people noticed in the PiTiVi community, I haven’t been working that much on PiTiVi over the past few months. I did mention the work I was doing was somewhat related to PiTiVi and that hopefully I’d be able to talk about it openly.

That day has now arrived.

GStreamer editing services

The “GStreamer Editing Services” is a library to simplify the creation of multimedia editing applications. Based on the GStreamer multimedia framework and the GNonLin set of plugins, its goals are to suit all types of editing-related applications.

The GStreamer Editing Services are cross-platform and work on most UNIX-like platform as well as Windows. It is released under the GNU Library General Public License (GNU LGPL).

Why ?

Because writing audio/video-editors is a lot of work, and we should make it as easy as possible for people to write such applications while being able to leverage the power of GStreamer and not requiring a PhD in nuclear engineering.

The GStreamer Editing Services (GES) introduces 3 concepts:

  • GESTimeline : This is your central container corresponding to a TimeLine, you can add Tracks and Layers to it. It is also a GStreamer Element, so you can use it in any GStreamer pipeline.
  • GESLayer : This corresponds to the User-visible part of the Timeline. This is where the user lays out the various LayerObjects (files, transitions) he wishes to use. The LayerObjects can be as simple or advanced as required (ex : a FileSource can have a mute property, an ‘overlay’ property, a rotate video property, …) and those objects will take care of properly filing up the Tracks. Applications can create their own subclasses of LayerObjects for their custom usage, implementing the logic of what TrackObjects to create in the background and not have to worry about anything else).
  • GESTrack : This corresponds to the media part of the Timeline. An audio editor will only require one audio Track, a video editor will require one Audio and one Video Track, etc … These parts don’t have to be visible to the user… nor the application developer :)

Why another library in addition to GNonLin?

The answer to that is that GNonLin will remain a media-agnostic set of elements whose goals are to be able to easily use parts of streams (i.e. from GStreamer elements) and arrange them through time. While this makes GNonLin very flexible… it also means there is quite a bit of extra code to write before getting to the ‘video-editing’ concepts.

Can I write a slideshow/audio/video/cutter/<crack-editor-idea> with it ?

Short answer : yes. Longer version : yes, but you might have to write your own LayerObject subclasses if you have some really specific use-cases in mind.

Where can I find it ?

The git repository is located here . Documentation can be generated in docs/libs/ if you have gtk-doc , and you can find some minimalistic examples in tests/examples/ . I will be gradually adding more documentation and examples.

GstDiscoverer, Profile System and EncodeBin

GES alone isn’t enough to end up with a functional editor. There are a couple of peripheral multimedia-related tasks that need to be done, and to solve that I’ve also been working on some other items. All of the following can be found in the gst-convenience repository.

GstDiscoverer

Those of you familiar with PiTiVi/Jokosher/Transmageddon/gst-python development might already be using the python variant of this code. The goal is to be able to get as much information (what’s the duration, what tags does it have, how many streams, of what type, using what codecs, …) from a given URI (file, network stream ,…) as fast as possible. While the code already existed, it was only python-based. So I rewrote one in C, with several improvements over it. It can be used synchronously or asynchronously, and comes with a command-line test application in tests/examples/

EncodeBin

Creating encoding pipelines, despite what many people might think, is not a trivial business and requires constantly thinking about a lot of little details. In order to make this as smooth as possible, I have written a convenience element for encoding : encodebin. It only has one required property : a GstEncodingProfile. Once you have set that property, you can then add that element to your pipeline, connect the various streams you wish to encode, connect to your sink element… and put the pipeline to PLAY.

Encoding profiles are not a new idea, and there has been many discussions in the past on how to properly solve this problem. Instead of concentrating on how to best store the various profiles for encoding… I decided to tackle the beast the other way round and, after having sent a RFC to the GStreamer mailing-list and collected as many use-cases as possible, came up with a proposal for a C based encoding profile description (see gst-libs/gst/profile/gstprofile.h). I still have some more use-cases to test and a few extra things to implement in encodebin, but so far the current profile system seems to fit all scenarios.

The remaining problem to solve… is to figure out how to store those encoding profiles in a persistent way for all applications to benefit from them.

Next steps

Using all of the above in PiTiVi :) But also looking forward to seeing comments/feedback/requests from people who wish to use any of the above in their applications.

In addition to that, I will be at the Maemo Barcelona Long Weekend starting from Friday, where we will try to corner down the UI and code requirements for creating a video editor for Maemo. All of the above should make it much easier to do than anticipated :)

Answering questions…

November 20th, 2009 by Edward Hervey

(This was initially posted as a reply to a blogpost regarding PiTiVi being proposed as a default application in the upcoming Ubuntu Lucid. That comment was removed for an unknown reason, so I thought it best to put it here, and it would also be interesting for other people)

What a depressing post (in some aspects). I’ll answer the various questions/comments/rants all the same.

PiTiVi doesn’t support DV/mpeg4/whatever-format

Where did you get that idea from ? PiTiVi doesn’t come shipped with codecs, it relies on GStreamer to provide the needed plugins/decoders/etc… If you load a DV file in pitivi and you don’t have the plugins, the application missing-plugin system should appear proposing you to download the needed plugin.

Collabora pushed PiTiVi aggresively into ubuntu

That’s 100% totally wrong. I personally had chats with Jono and Rick Spencer about having PiTiVi shipped as a default application, and canonical were interested by the idea of having a video editor shipped by default. All of this was far from being enforced, or us (Collabora) going out of our way to have PiTiVi shipped by default. And nothing’s engraved in stone at this point. If we (pitivi development team) get feedback/help on improving what’s bothering people by the Lucid release date and people deem it good enough to be shipped by default, great ! If we get no help… well.. PiTiVi won’t die and people will still be able to use it via PPAs.

Why ship PiTiVi as default app and not another video editor ?

I’d say the main reason is that all the dependencies (except for goocanvas, which is pretty slim) are already shipped by default : GStreamer, GTK, python. All the other editors would require bringing in more dependencies. I’ll let Canonical/Ubuntu confirm that or not.

lack of features …

On this part we have always taken the stand of making sure features are as solid as possible before adding new features. In terms of video editing, that means you do need to have input/output format support rock solid, trimming/cutting rock solid. Check out how many clips/movies/documentaries/… out there and see how much of them make use of video effects, for how long, and how many don’t.
The two features we find critically missing are : video transitions and overlaying. I just merged yesterday the videomixing branch yesterday to master which enables setting transparency on every video streams (like Sony Vegas does). It still has some issues, but having it in master will force/speedup the bugfixing process.
Video effects are not a top-priority. Getting those… without being able to do the features above are pointless. We won’t diverge from that point of view. Helping us get the above rock solid as fast as possible … will mean you will see video effects faster.

To people throwing generic rants about <video-editor-name> sucking

Write a video editor (or any non-trivial multimedia applicatoin), then come back and rant about other people’s application sucking. Then we might have a proper discussion. In the meantime… you’re not improving the situation.

PiTiVi is dead or no longer maintained

The 3 main developers (who also happen to be hired by Collabora and that includes myself) have been working on some other company work in the meantime. Keeping Collabora hiring those 3 developers, means ensuring they have time to be paid to work on it also. (I’d personnaly love to have people working 100% of the time on PiTiVi … but you need to take into account the reality of running a business).
We’re progressively getting more company time for PiTiVi (Brandon has been back on it full time for the past frew weeks for example). It’s far from being abandoned/dead, just that we do it at our own pace. It’s freely available (LGPL, no copryight attributions required) and will always stay that way. We always welcome contributions and are pretty fast to review/commit patches.

Drop in on #pitivi on irc.freenode.net or send us a mail on pitivi-pitivi@lists.sourceforget.net and come and give your feedback, what can be improved, what’s good and should be kept and … who knows … be part of the pitivi team :)

Edward Hervey: PiTiVi creator/maintainer, GStreamer hacker, Collabora Multimedia co-director

PiTiVi 0.13.3 “… we shall never (sur)render”

September 12th, 2009 by Edward Hervey

Hi all,

The PiTiVi team is proud to announce a new release of the PiTiVi open-source video editor.

Features:

  • Fix rendering failures
  • UI beautifications
  • Switch to themeable ruler
  • Speed optimisations
  • Show the project name in the window title

More details can be found in the release notes. As usual, packages are available for debian/unstable as well as Ubuntu Jaunty in the gstreamer-developers PPA.

PiTiVI 0.13.2 “Jailbreak (out of Deadlock City)”

August 13th, 2009 by Edward Hervey

Hi all,

A quick post to announce the latest release of PiTiVi. You’ll be able to find more details here but here’s a short summary of what you can expect:

  • Undo/Redo support
  • Audio mixing
  • Ripple/Roll edit
  • And the usual truckload of misc improvements/bugfixes

Packages should be available really soon on the gstreamer-developers PPA for Ubuntu Jaunty here : https://launchpad.net/~gstreamer-developers/+archive/ppa

And I’m now off for two well deserved weeks of vacation back in France.

PiTiVi 0.13.1 : “L’Aquila Immota Manet : The eagle remains unmoved”

May 27th, 2009 by Edward Hervey

The PiTiVi team is very proud to announce the first release in the unstable 0.13 PiTiVi series.


This release is in memory of those who have lost their lives, friends, houses in the April 6th 2009 earthquake in l’Aquila, Italy.

You will find more info of the changes, bugfixes and so forth in the online release notes here .

To sum up this release :

  • 3 developers working mostly full time : Alessandro Decina, Brandon Lewis and myself
  • An insane QA/usability nazifreak who has overwhelmed the bugtracker with issues : Jean-Francois Fortin Tam
  • Over 700 commits !
  • Complete core rewrite, new multi-layered timeline, audio waveforms, video thumbnails
  • Speed improvements

This is not the end, far from it. We’re already working on the next 0.13.2 release which should be available just before the Gran Canaria Desktop Summit in July with exciting improvements like : transitions, mixing, effects, more speed/memory improvements…

People say an image is worth a thousand words… then I guess a video is worth a million words. Jean-Francois did a screencast showing off the latest features of PiTiVi… and of course edited it with PiTiVi. You can find it in ogg or on youtube. Thanks Jean-Francois !

Enjoy the Show !

PiTiVi video editor 0.13.0.2 pre-release !

May 21st, 2009 by Edward Hervey

We got a bit delayed, but it’s happened at last. The PiTiVi team is proud to announce the first 0.13 pre-release.

Tarball available here: http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.13/pitivi-0.13.0.2.tar.bz2

For those using Jaunty, we’ve also made pitivi (and all required dependencies) available on the gstreamer-developers PPA:  https://launchpad.net/~gstreamer-developers/+archive/ppa

Testing, feedbacks, bug reports are welcome as usual on bugzilla:  http://bugzilla.gnome.org/enter_bug.cgi?product=pitivi

Unless blockers popup, expect the 0.13.1 release next monday (25th May).

Update : I didn’t put the details of the changes since summarizing 700+ commits is not trivial. The release will have more details, but to summarize : back-end rewritten, multi-layer editing, speed improvements and awesomeness :)

PiTiVi progress, Summer Of Code and Android

March 24th, 2009 by Edward Hervey

As usual, a long time since the last update. But “as usual”, plenty of updates :)

PiTiVi updates

Over the past 3-6 months hacking has been going at an insane rate, thanks mostly to Collabora Multimedia hiring Brandon Lewis (who worked the 2 past Summer Of Code on PiTiVi) and Alessandro Decina (Python god and GStreamer hacker) to work on PiTiVi and the related technologies.

We’ve been refactoring most of the code based on the past 5 years of feedbacks and a 3 month re-design I carried on last summer. At this point we’re on schedule for the end-of-April 0.13.1 release. Everything is available in the new GIT repository.

What’s new  you ask ?

  • multiple layers (yes, like a real editor :) )
  • trimming/cutting support, ripple/roll, slip/slide
  • audio-only or video-only support (yes, along with pictures)
  • Faster backend with many improvements and bugfixing in GNonLin and GStreamer
  • cleaner API for extensions
  • and much more

Since the current git version depends on bugfixing done in unreleased GStreamer packages, Alessandro set up a PPA for ubuntu with latest packages so you can try PiTiVi the right way. Available here : https://launchpad.net/~gstreamer-developers/+archive. It’s also a good way to tryout the latest GStreamer and plugins.

Feedbacks and comments are welcome as usual. The more feedback we get, the better suited PiTiVi will be for you.

Summer Of Code

Want to earn some cash while making PiTiVi rock even more ? How about participating in Summer Of Code 2009 ?

There are many ways you can help PiTIVi due to it’s modular approach:

  • Since we rely entirely on GStreamer for multimedia processing, you can propose a project with GStreamer [see existing proposals].
    Amongst the various proposals, there’s one very interesting one (not only for PiTiVi but for multimedia in general on Linux) is to bring the awesome collection of AVISynth filters to GStreamer by creating a wrapper to load existing AVISynth filters as GStreamer elements.
    Another one that would benefit everybody is to wrap VDPAU/VA-API  as decoder/filters/sink elements in GStreamer, bringing us closer to real-time editing of HD content. Ask us on the pitivi or gstreamer mailing-list if you’re unsure, we’ll give you more pointers.
    Yet another one would be to help make the consumer Video Camera (DV/HDV/AVCHD) support in GStreamer pristine (capture, seeking, auto-cut, editing, rendering, …), which requires some help in various elements (like the mpegts demuxer, add some parsers, etc…).
  • You can also hack at the PiTiVi level by adding better integration to existing tools or online services. One existing proposal in the GNOME project is to have a tight integration with Brasero. Proposals to integrate PiTiVi with Telepathy for real-time collaborative editing would also be much welcome. For application-level proposals we’d recommend choosing a desktop-style organisation (like GNOME, or KDE).
  • Helping FFMpeg by adding new decoders/encoders  or improving the existing ones would also be beneficial for everybody.

As a side note, there’s also a few other organisations which have got GStreamer-related proposals or could do with some GStreamer loving, like Wine who have got a proposal to have a GStreamer backend for playback, or you could propose adding GStreamer support in Moonlight (reusing all the available GStreamer plugins) ! Don’t limit yourselves to the GStreamer/GNOME organisations if you have GStreamer ideas, the sky’s the limit, ask us for pointers and we’ll be able to find GStreamer hackers to co-mentor projects in other organisations.

GStreamer on Android

Over the past few weeks, I’ve been working along with Prajnashi porting GStreamer to Android. We’ve been making big progress and are at the point where we can actually replace OpenCore (the ‘official’ Android multimedia framework) with GStreamer. Funnily enough, this happens exactly at the time where the official Android build is broken due to OpenCore :) Those interested can join the dedicated google group site.

Along with Zaheer’s recent efforts to port GStreamer to S60, it looks like there will soon be no device not running GStreamer :)

PiTiVi on linux.com

November 7th, 2008 by Edward Hervey

linux.com has got an article regarding where pitivi is going. You can read it here.

PiTiVi 0.11.2 “Milanesa de Lomo”

October 16th, 2008 by Edward Hervey

The PiTiVi team is proud to announce the third release in the unstable 0.11
PiTiVi series.

This release series is not intended to be production-ready, but instead to allow
users to try more often new features that will be available in the next stable
series.

The developers will not be held accountable for any work lost, flooding or war
caused by this unstable series.

Due to its dependency on GStreamer, The PiTiVi team strongly recommends users have
all official latest gstreamer libraries and plugins installed for the best user
experience.

Features of this release

  • New advanced timeline interface by Brandon Lewis (SoC)
  • Capture interface for webcams and network sources by Sarath Lakshman (SoC).
  • Simple Timeline is gone.
  • Project save/load now activated by default
  • Cutting/Trimming/Removing features added to advanced timeline.
  • Misc fixes and improvements

Bugs Fixed

  • 552777 : [ruler.py] BadAlloc error with big sources
  • 353870 : Save/Load project from/to file
  • 332473 : Capture from given gstreamer input source
  • 334631 : xvsink crash with python in pitivi
  • 339895 : [Advanced Timeline] Zooming in too much causes X error
  • 432678 : [discoverer] Files that report a duration of 0s is BUGGY !!!
  • 458944 : Cancelling while rendering does not work
  • 461738 : [Advanced Timeline] Scrollbar always comes back to beginning
  • 498071 : [Simple Timeline] Drag and Drop puts clips in the wrong slot
  • 498904 : incorrect indentation: some tabs are mixed with spaces in…
  • 501028 : Missing files from POTFILES.in
  • 501068 : Uses make instead of $(MAKE)
  • 518301 : Pitivi won’t start under KDE: &quot; Icon ‘misc’ not present in…
  • 547095 : [Export Settings] Filter unusable muxers
  • 554544 : net_capture.glade not installed
  • 554602 : seeking is not working correctly …

Requirements

  • gstreamer >= 0.10.14
  • gst-python >= 0.10.6
  • gnonlin >= 0.10.9
  • pygtk >= 2.8.0
  • zope.interface (http://www.zope.org/Products/ZopeInterface)
  • setuptools (http://peak.telecommunity.com/DevCenter/setuptools)
  • pygoocanvas (http://live.gnome.org/GooCanvas)
  • dbus and HAL for capture support

Contributors

  • Edward Hervey
  • Sarath Lakshman
  • Brandon Lewis

Download
PiTiVi source tarballs are available on gnome FTP:
http://ftp.gnome.org/pub/GNOME/sources/pitivi/0.11/
See the website for distribution-specific packages : http://www.pitivi.org/

Lost my phone…

July 14th, 2008 by Edward Hervey

… so yeah, I actually managed to lose my phone while in Istanbul. Just got myself a new phone/card with the same phone number as before (+34 666 …). If you have my phone number in your address book… send me an sms or a mail with your name and phone number so I can rebuild my address book.

Will write a post soon about GUADEC istanbul.