3 days left to prepare your summer

Hi folks,

The Google Summer of Code deadline for student application is nearing and thought it would be good to highlight some projects that are dear to me:

  • PiTiVi : The inclusion of PiTiVi in Ubuntu Lucid has brought about a lot more interest, and while the reception is overall positive for what it can do right now, we know there’s still a lot more work to make it the swiss-army-penknife of editing. A student has already proposed adding the support for effects, but other items that would be great to have are:
    • Collaborative editing : Allowing several people across a network/internet to work on a common project, using the telepathy project.
    • Improving the Media Asset Management support of PiTiVi (i.e. solving the problem of having hours and hours of footage, how to search/sort/tag them efficiently). Leveraging existing technologies instead of reinventing the wheel is a must here
    • Auto-cleanup of editing: Average consumers don’t know how to shoot, the camera moves, there’s some hissing in the audio, the color-balance is always changing,  …  This would be an excellent project for somebody with lots of video editing experience who has got an eye to making an editing project look professional (i.e. anti-youtube) and wants to help automatize all the tedious little tasks one has to take care of. The goal would be to come up with a system to cleanup footage on import, help define proper transitions,.. This would go hand in hand with effects support.
  • Wine DirectShow GStreamer backend. I mentored Trevor Davenport last year who proved that using GStreamer as a back-end for DirectShow on Wine is possible, but quite a bit of work is required to finish up this task to have it merged in wine trunk.
  • GStreamer: Supporting VA-API in GStreamer would be a must, especially considering the awesome work Gwenole Beauchesne has done to make it support VDPAU as a backend. VLC has already switched to supporting only VAAPI for hardware-accelerated and it’s time GStreamer catches it up 🙂

The PiTiVi proposals can be proposed both in the GStreamer and GNOME organization, the Wine/DirectShow project with the Wine organization and the GStreamer projects… with GStreamer.

You can also hop into the IRC channels of the various projects to discuss your proposals. On the freenode network: #gstreamer, #pitivi, #winehq

The best proposals are always the ones where students have got an itch they want to scratch as opposed to being told what to do, so if you’ve got something in particular you’d like to hack on in the projects above, don’t hesitate to contact the maintainers/developers of those projects and propose your ideas… but hurry up… tic tic tic

PiTiVi 0.13.4 “Cabernet d’Anjou”

Hi all,

The PiTiVi development team is thrilled to announce a new release of the PiTiVi video editor.

Amongst the new features:

  • video mixing/transparency support
  • icon view in source list
  • smoother scrolling
  • modeless splitting
  • seek on click
  • faster waveforms
  • zoom slider
  • UI beautifications
  • Speed optimisations
  • dbus/hal dependency now optional
  • translated in 30 languages

More info in the release notes , tarballs available on ftp.gnome.org and should be available on your distros any time soon (will be included in Lucid Lynx).

Update : The gstreamer-developers PPA has been updated for Ubuntu Karmik with 0.13.4 and all required dependencies : https://launchpad.net/~gstreamer-developers/+archive/ppa

The result of the past few months of hacking

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.


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/


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 🙂

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

Hi all,

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


  • 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.11.2 “Milanesa de Lomo”

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

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

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 …


  • 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


  • Edward Hervey
  • Sarath Lakshman
  • Brandon Lewis

PiTiVi source tarballs are available on gnome FTP:
See the website for distribution-specific packages : http://www.pitivi.org/