Transmageddon and Arista pursue simple transcoding

Please consider subscribing to LWN Subscriptions are the lifeblood of LWN.net. If you appreciate this content and would like to see more of it, your subscription will help to ensure that LWN continues to thrive. Please visit this page to join up and keep LWN on the net.

Christian Schaller's Transmageddon and Daniel Taylor's Arista are both easy-to-use video file conversion tools for GNOME, but they share more than just a vision for simple file transcoding. Rather than competing head-on (or attempting a merge), the two developers are collaborating in the middle; sharing information and utilizing the similar aims of their projects to strengthen the underlying GStreamer multimedia framework on which both code bases depend.

Schaller is a longtime GStreamer contributor; he started Transmageddon in March of 2009 for several reasons. First, as a personal exercise in developing in Python, but also as an attempt to find real-world areas of improvement for application developers using GStreamer, and to scratch a personal itch — the lack of an easy-to-use, GStreamer-based video transcoder. Said itch also prompted Taylor to start work on Arista, as a personal project in 2008, with its first public release in April of 2009. He discovered Transmageddon through Schaller's blog, and the two began discussing how best to proceed.

A variety of motives

That two developers independently decided to write simple GUI transcoding applications should come as no surprise. Video transcoding is increasingly in demand as more and more portable devices have the graphics hardware to support it and digital content distribution skyrockets. Command line encoders like FFmpeg and MEncoder can perform almost any conversion, but require the user to know exactly which options to enable, and, in most cases, demand that every codec switch be specified or else they fail to produce a usable result. That leads to obtuse (and extremely long) commands that are difficult to get right and even more difficult to troubleshoot. Several graphical transcoding applications have appeared for Linux desktops in recent years — Thoggen, OGMRip, K9Copy, AcidRip, dvd::rip, HandBrake, and WinFF, to name a few — but as both Taylor and Schaller commented, all have their shortcomings.

Some, like Thoggen, OGMRip, and Oggconvert, are limited to specific output codecs. Others, like dvd::rip, attempt to offer every option under the sun, making them difficult for casual users to use. "There are dozens of GUIs that are essentially the same confusing options with a nice graphical label. To me that doesn't really help," Taylor observed. "The point of Arista is not to be everything to everyone, just to be a simple way to transcode your media for various devices. That's it."

In addition, many of the existing transcoders are built as stand-alone front-ends, and offer little in the way of desktop integration. "Most of the other GUIs I've seen directly use FFmpeg (libavformat, libavcodec, etc)," said Taylor. "I wanted to make use of GNOME technologies to make a real GNOME app, which means using GTK+, GStreamer, Gconf, GIO, etc. Arista should fit into the desktop." Taylor said he has a few features in mind for future releases (such as subtitle and DVD menu support), but also hopes to add a D-Bus interface that will enable other applications to control Arista.

For Schaller, building a GUI transcoder is also a way to field test GStreamer. He mentioned the possibility in a 2008 blog post, speculating that such a small-scale application could be used to "test and make sure our muxers and encoders keep working" better than a more complex tool like a video player or editor. So far, he said, a few bugs may have been discovered, but the more important benefits are from testing GStreamer features that have not been used before — such as property presets, which allow the application to set bundles of individual encoder settings by name (either for encoder profiles like H.264 Baseline, or to target specific hardware devices).

The benefits extend beyond the existing code to other applications, Schaller added:

The other thing we are doing as part of this is to try to figure out what kind of higher level encoding and transcoding API could be useful to application developers. ... One of GStreamer's goals is to make things as easy as possible for developers, so packaging some of the steps we take in our applications into some C helper APIs is probably a good idea.

Collaboration and divergence

After Schaller and Taylor touched base, they decided to stay in close touch and share code whenever possible, but to take their respective applications on slightly different paths. Taylor would take the conservative, end-user-oriented approach, making sure that Arista would always run on the current release of Ubuntu. Schaller would try to more closely track the development version of GStreamer, including reliance on GStreamer features not yet available downstream. That way, there will always be a transcoder available for and usable by "non-techies" in Arista, and Transmageddon can serve as a test bed for new features.

The cross-project collaboration is already reaping rewards. Schaller says that he has incorporated Arista's existing preset support into Transmageddon, and is extending it using some bleeding-edge changes from the development version of GStreamer. Once the Linux distributions are shipping the next update of GStreamer, the plan is to roll Transmageddon's improved preset support back into Arista.

The projects are also helping GStreamer. They are accumulating a collection of presets that will be valuable to other applications, have uncovered bugs in the capabilities system, and exposed that GStreamer needs a better encoder and decoder for the Adaptive Multi-Rate (AMR) audio format.

Schaller said he is also planning on turning his notes on the development process into a guide for others:

I have decided to try to use my experience with doing Transmageddon to write a series of tutorials for developing python applications with GStreamer. I think applications like PiTiVi Jokosher , Arista and Transmageddon prove that you can do quite complex applications quite easily using Python, we just need some more basic tutorials to give more Python developers the entry point into GStreamer that they need to get started.

Test drive

You can download both applications and try them out to compare. Transmageddon is available from Schaller's web site as a source code package and as an RPM package. The latest release is 0.9, from May 3, 2009. It does require Python and a development branch of GStreamer, though, which may place it out of reach for most users.

Arista is available for download from the project's Launchpad site. The most recent version is 0.9.1, also from May 3. A source code package is provided, as is an ArchLinux build through the ArchLinux User-community Repository (AUR), and those running Ubuntu 9.04 can add Taylor's Personal Package Archive (PPA) to their Apt repositories list and install the application through the package manager. 0.9.1 also requires Python and GStreamer, but only GStreamer 0.10, which is widely available.

Arista allows the user to select source videos in any encoding and file type readable by GStreamer (including DVD content), and select an output format — including presets configured for a range of portable hardware devices. Beyond that, there is little to the interface but a progress bar estimating the time remaining in the transcoding job and a two-frame-per-second preview window useful for monitoring the output.

Other transcoders offer far more options, but at the cost of far more complexity. Users must often know the audio and video codecs, output width and height, frame rate or bit rate, and many other options. Arista and Transmageddon make the job drastically simpler merely by abstracting away all of those details in device presets — the correct settings are still chosen, but the confusion and chance for human error are not. It will be interesting to watch the projects evolve in the months ahead; the notion of a simple to use video transcoder is appealing, but even more appealing is what can happen when that functionality is available to other desktop applications through D-Bus.