Saturday, December 31, 2011

End of 2011 Update

It might seem this project is rather quiet lately, but nothing could be farther from the truth. So, here is a quick update on what has been happening lately, what will be in the next release, and what to look forward to in 2012.

New Logo
Did you notice the new logo in the top, left of the page? It certainly can be improved, but the concept is represented. It is kind of like a wax seal, but not exactly - more like a flattened, melted blob.

ASI Consumer
This is mainly interesting only to the broadcast users of MLT. This component actually started development in 2010, but was finally wrapped up and verified DVB compliant recently. For playout, this basically provides a channel-in-a-box solution. When coupled with SDI input, it makes a live encoder for broadcast. This is not yet an open source component, but its existence is not exactly a secret since it has been listed on our Documentation page. With just a little work, I am certain this could be used for ATSC and CBR UDP output as well. If you are interested in this, contact us or B.C.E.

This is an exciting new consumer plugin for the next release that basically lets you have multiple outputs! That could mean encoding from any sort of MLT playlist or composition to multiple files at the same time, each with their own unique attributes including different resolution and frame rate. Here are some other example use cases: simultaneous SDI/HDMI and IP streaming for playout, preview while capturing from SDI/HDMI, simultaneous GUI and SDI/HDMI preview in video editor.

Frame rate adaption
In addition to the multi consumer letting you have outputs with different frame rates, in the next release the special consumer producer lets an input with a different frame rate conform to the composition's profile. Most people do not notice this because the avformat producer is used most often, and it has performed this from the beginning. However, the decklink SDI producer is not quite as flexible. Basically, this means you can do simple (non-interpolated) frame rate conversion with SDI input, but it also means in the future we can fully enable the telecide filter for smart inverse telecine. Also, as a result of this work, now the decklink producer is compatible with the YADIF deinterlacer for superior results when encoding to progressive file or stream.
I have a working prototype of running melt on Amazon Web Services under a job queue that dynamically adds and removes render nodes. The idea here is that there are a number of web and mobile app developers that want to use the power of MLT for advanced processing of XML-based audio/video compositions, but they do not want to deal with the hassle of dependencies, a good-working and current build of melt, compiling melt themselves, or command line usage of melt. Via HTTP, one can simply POST MLT-XML to the web service where the XML contains HTTP or S3 links to the file resources. Then, another service API call lets the client application check on the status and get links to the outputs. This is not quite ready to make available as I have a few more things to do, but it will be a paid service.

Shotcut is an old MLT project that provides a FLTK-based video editor suited to the very particular requirements of the original project sponsor UEL. That project has not been active for a very long time, and I am not really fond of FLTK or the app's design, but I liked the name well enough to reuse it for a new Qt-based cross-platform, open-source video editor. It will also work with the Melted server for broadcast customers that want a client that runs on non-Linux desktops. I am not ready to provide much more information or to provide a sneak peak, but I will soon because this is much more than just an idea at this point - the progress has been very steady and promising!

Now, put this altogether plus the addition of proper support for time formats and property animation, and you get an idea of what is in store for 2012.

Monday, October 31, 2011

version 0.7.6 released

This is a bugfix and minor enhancement release.
  • Improved support for v53 of libavcodec/libavformat (0.7 and 0.8 releases)
  • Major DeckLink consumer improvements
  • Much more metadata
  • Added audio-only JACK consumer
  • Added video stabilization filters
  • Added dual pass audio normalization to sox filter
  • Added VITC and VANC capture to DeckLink producer
  • Added support for writing timecode tracks
  • Added MLT, frei0r, and SoX version to xml serialization
  • Added D-10, XDCAM, DNxHD, and Sony-PSP encoding presets
  • Can now use rotoscoping for masking filters
  • Added dynamictext filter makes burned-in timecode and similar easier
  • Added support for consumer element in MLT XML
  • Added outlining, padding, and alignment to pango filter
Special thanks go to contributors Maksym Veremeyenko, Brian Matherly, and Marco Gittler.

Tuesday, August 16, 2011

Image stabilization added

A new filter for image stabilization was contributed by Marco Gittler and improved by Dan Dennedy. It is built upon the excellent work by Lenny at

Sunday, July 17, 2011

version 0.7.4 released

This is a bugfix and minor enhancement release.


  • Important: change consumer property profile to mlt_profile.
  • Improve frame-dropping and drop_max property to mlt_consumer.
  • Added support for presets for any service through special property named "properties"
  • Added mlt_profile_from_producer() for auto-profile.
  • Added mlt_properties_set_lcnumeric() and mlt_properties_get_lcnumeric().
  • Added LC_NUMERIC to YAML Tiny metadata schema and parser.


  • Added support for more than 2 channels of greater than 16-bit audio.
  • Added discrete filters for each SoX effect.
  • Added discrete filters for each LADSPA audio plugin.
  • Added automatic service metadata for SoX and LADSPA plugins.
  • Added at least basic metadata for nearly every service.
  • Added support for decklink on Windows (tested) and Mac OS X (untested).
  • Added support for JACK transport synchronization.
  • Added blacklist.txt to jackrack plugin (contains dssi-vst).
  • Rewrite of decklink consumer.
  • Added support for live network, multi-stream device, and pipe/fifo sources in avformat producer.
  • Added LC_NUMERIC attribute to root XML element.


  • Added '-query presets' option.
  • Added -jack option for transport synchronization.
  • Send -help and -query output to stdout to make it convenient for pagers.


  • Added mlt.Frame.get_image() for Python.
  • Removed configure option --avformat-svn.
  • Fixes for locales that use comma for decimal point.
  • Added presets for DVD, DV, x264, and WebM encoding.

Since FFmpeg forked and there were a few releases, there is no recommended version at this time. With that said, there were changes to accomodate the API changes with some moderate testing of the 0.6, 0.7, and 0.8 series releases of both FFmpeg and Libav.

Sunday, June 12, 2011

network stream and pipe inputs supported

MLT now supports libavformat's protocols to read network streams such as multicast MPEG2-TS/UDP, RTP, RTMP (librtmp recommended), RTSP (your mileage may vary), MMS, and HTTP Live Streaming. It also lets you read various formats such as DV, HDV, and TS over pipes. Of course, you can use them with all the other services MLT offers such as SDI output and filters. However, you can not seek on it, so things such as in point and speed changes are ignored.

Thursday, June 2, 2011

html5 and QML 3D video fx!

Andrew Wason has been working on a video effects engine, called WebVfx, that allows effects to be implemented using HTML or QML. It includes producer, filter and transition plugins for MLT.

Video effects can be authored using web technologies like CSS3, Canvas, WebGL etc. Video frames decoded by MLT are available to the effect as JavaScript Image or ImageData objects. QML is supported as an alternative to WebGL for 3D based transitions, by extending it with QtQuick3D.

3D scenes can be modeled in a tool like Blender, the scene can be rendered and baked to a texture and the 3D camera path can be animated and exported using a Blender plugin included with WebVfx. Then video frames can be applied as textures to portions of the scene. Here is the source to a simple 3D example with demo video.

Here is an example of a more sophisticated 3D birthday card theme developed internally, rendered with WebVfx and MLT using the avformat consumer.

Advanced 2D image effects can be implemented using WebGL and a GLSL fragment shader. WebVfx includes a support framework so only the shader code needs to be written. Here is the source to PageCurl and CrossZoom GLSL transitions (with links to demo videos).

Source code and docs are available on github:

Monday, May 30, 2011

plugin documentation online

I made a simple ruby script using the MLT API binding that enumerates all services of all plugins, fetches their metadata/documentation, and generates a wiki page. The results appear under the Services section of the Documentation page of the web site.

Of course, do not forget that all of this is also available at the command line using melt -query.

Monday, May 16, 2011

audio improvements

Since the last release there have been four big enhancements in the area of audio:

  • Reading files with more than 2 channels of greater than 16-bit audio - including floating point.
  • Exposing each SoX effect as a separate audio filter making it possible to enumerate them and get metadata for them.
  • Exposing each LADSPA plugin as a separate audio filter with metadata so you no longer need to use JACK Rack XML.
  • Supporting JACK transport synchronization (melt -jack).

Monday, May 2, 2011

version 0.7.2 released

This is a minor release to fix a few things between the 0.7.0 release and the release of Kdenlive 0.8. I recommend Kdenlive v0.8 users to upgrade to this version of Mlt. Beyond that there are some exciting additions to the Blackmagic Design DeckLink plugin!

  • Added mlt_profile_list().
  • Added decklink producer (i.e. capture, live encoding).
  • Added keyer output for decklink consumer.
  • Added AVOptions to the avformat service metadata.
  • Added support for new major API versions (53) of FFmpeg.
  • Added '-query profile' option.
  • Added '-query formats', '-query audio_codecs' and '-query video_codecs'.

Monday, April 18, 2011

mvcp-client improvements

If you are using Melted, then you will be interested in some improvements I made to mvcp-client that lets you run MVCP commands and exit immediately. This is very handy for use in shell scripts at/cron jobs. Also, you can use it to send XML to the server. After updating, run mvcp-client -h to get usage help.

Friday, April 8, 2011

encoding documentation

Often people want to know how to set encoding parameters for MLT. So, I improved the service metadata for the avformat producer and consumer by improving their existing metadata and extending them with AVOptions from the FFmpeg/libav libraries. The result is on the MLT website.

This same information can be obtained from the command 'melt -query consumer=avformat'.

Sunday, April 3, 2011

DeckLink enhancements

dorfTV, a community television station in Austria, has sponsored two enhancements to the decklink plugin. First is input support so you can capture and do live encoding. The second is support for keying, which makes the DeckLink hardware composite the MLT video output over live SDI video input with full alpha blending. You can get more information from the online help: melt -query producer=decklink  or melt -query consumer=decklink.

Monday, March 28, 2011

version 0.7.0 released

This is a major new release due to signficant additions to API, framework, and build.


  • Added support for Windows via MinGW.
  • Enabled linsys module by default.
  • Disabled VDPAU by default and added --avformat-vdpau to enable it.
  • Added support for swfdec 0.7.


  • Added parallelism to mlt_consumer when 'real_time' > 1 or < -1.
  • Added mlt_deque_insert() and mlt_deque_peek().
  • Added mlt_profile parameter to mlt_producer_new().
  • Let transitions with no out point run forever.
  • Added mlt_frame_unique_properties().
  • Added mlt_frame_set_image() and mlt_frame_set_alpha().
  • Added mlt_image_format_size() and mlt_audio_format_size().
  • Added mlt_filter_get_length() and mlt_transition_get_length().
  • Added mlt_filter_get_progress(), mlt_transition_get_progress(), and mlt_transition_get_progress_delta().
  • Added mlt_filter_get_position() and mlt_transition_get_position().
  • Added mlt_properties_lock() and mlt_properties_unlock().


  • Added rotoscoping filter.
  • Improve libavdevice support (V4L2, ALSA, libdc1394).
  • Added support for new FFmpeg metadata API.
  • Various fixes, refactoring, and improvements.

Friday, March 25, 2011

build scripts

I have published some scripts that can build and rebuild MLT, Melted, and Kdenlive and many of its multimedia dependencies (x264, libvpx, FFmpeg, frei0r). The script pulls the latest of each from their source code repositories on each build and rebuild. Each build is output to a dated folder without requiring any "system" installation, and the folder can be simply copied to other compatible machines and run again without any packaging or system installation.

Saturday, January 29, 2011

cross-platform GUI starter project

Since MLT is now working on Mac OS X, Windows, Linux, and BSD, I added a cross-platform C++ Qt starter project to the git repository:

It is just a very simple media player with menu, toolbar, status bar, and video frame. The build system is qmake, which is very convenient to use with the cross-platform Qt Creator tool. The code includes the special OpenGL playout widget needed for Mac OS X. It is licensed under the liberal MIT open source license. On OS X, BSD, and Linux, it uses pkg-config to locate the MLT dependencies. Therefore, on OS X, the easiest way to get up and running is to use the mlt port. On Windows, a couple of extra steps are needed to copy files from the mlt build area to the Qt project build area.

Monday, January 24, 2011

Windows compatibility and parallelism merged

Just as 2010 came in strong, so does 2011! The work on Windows compatibility and the parallel consumer have been merged into master. I plan to release these after a month or so of additional testing.

version 0.6.2 released

This is just a minor release to address a few things prior to introducing major changes from other branches.

  • Added force_aspect_ratio property to pixbuf and qimage producers.
  • Added opacity handling in geometry property of the affine filter and transition.
  • Added use_normalised property to affine filter.
  • Added always_active property to affine transition.
  • Fix building on NetBSD.

Sunday, January 2, 2011

version 0.6.0 released

There were quite a few enhancements and changes including a minor interface change. Therefore, this release gets a jump in the versioning.


  • mlt_profile
    • Added (Y'CbCr) colorspace attribute.
    • Added mlt_profile_clone().
  • Added mlt_consumer_position() and Mlt::Consumer::position().
  • Added Mlt::Properties::wait_for(string).
  • Added a version API: mlt_version_get_int() and others.
  • Added Mlt::Producer::pause().
  • Added mlt_frame_write_ppm() for debugging.


  • Added automatic detection of profile from first input when profile not specified.
  • Now exits with error result when consumer fails fatally.


  • Added swfdec producer for Flash files including variables support. (Does not support audio.)
  • Added consumer for Blackmagic Design DeckLink SDI and Intensity HDMI.
  • Added Y'CbCr colorspace conversion and option to use full luma range.
  • Added (de)serialization of profile to XML.
  • Added support for #frame# variable to the data_show filter.
  • Added support for frei0r string parameters.
  • Make FFmpeg formats and codecs available as properties (not just stderr).
  • Try to load .xml file as MLT XML.
  • Added a consumer-sdl-paused event to sdl_preview.
  • Added a consumer-fatal-error event to avformat.
  • Change composite transition to default to progressive rendering; field-based rendering available only explicitly.