MLT Multimedia Framework

Author, manage, and run multitrack audio/video compositions.
The engine of a non-linear video editor that can be used in all sorts of apps, not just desktop video editors.
MLT is an open source multimedia framework, designed and developed for television broadcasting. It provides a toolkit for broadcasters, video editors, media players, transcoders, web streamers and many more types of applications. The functionality of the system is provided via an assortment of ready to use tools, XML authoring components, and an extensible plug-in based API.
Download source code. The easiest way to try out and learn MLT is by downloading Shotcut.

Recent News

v7.42.0 released

Oct 3, 2026

You can download it from GitHub.

The highlights of this version are a new placebo GPU module based on libplacebo, a 32-bit float default audio sample format, and Adjustment Clips (fx_cut) that filter only the tracks below them.

Framework

  • Added a list-based dispatch for image-conversion callbacks on mlt_frame. Use mlt_frame_append_convert_image() to register a converter instead of setting frame->convert_image directly. Multiple converters are tried in registration order; the first that succeeds wins. New public API:
    • mlt_frame_prepend_convert_image()
    • mlt_frame_append_convert_image()
    • mlt_frame_convert_image()
    • mlt_frame_next_convert_image()
    • mlt_frame_has_convert_image()
    • mlt_frame_copy_convert_image()
  • API behavior change: mlt_frame_s::convert_image is now read-only after init and is permanently set to the dispatcher mlt_frame_convert_image(). A custom function written directly to this field is no longer called. If you really need that (I have never heard of anyone who does), clear the frame’s _convert_image_callbacks property and use mlt_frame_append_convert_image() instead.
  • fx_cut (Adjustment Clip) now applies its filters only to tracks below it. Higher tracks composite on top of the filtered result. New image-stack helpers are used by tractor stacking and by fx_cut:
    • mlt_frame_prepend_image_from_service()
    • mlt_frame_push_image_with_fx_cut()
  • Fixed a crash when applying a Movit (OpenGL) filter to an fx_cut (Adjustment Clip). Cross-producer image sharing (including the reverse fx_cut share) finalizes an in-progress Movit chain as rgba64 and does not copy producer-keyed _movit chain state. Same-producer prepends keep the GPU chain. Playlist fx_cut frames now set _producer so Movit can key the chain.
  • meta. and set. properties are now copied from the producer onto fx_cut frames so producer annotations reach tractor output. New public API:
    • mlt_producer_pass_frame_properties()
    • Mlt::Producer::pass_frame_properties()
  • Changed the default audio sample format to float32 (mlt_audio_f32le). Added mlt_audio_format_id() and an mlt_audio_format property on the multi consumer. Conversion between integer and float is lossless and symmetric (s16 and u8 round-trip exactly).
  • Deprecated the sox filter, which only supports 32-bit integer samples.
  • Deprecated the volume filter’s normalize parameter because it forces 16-bit integer audio. Use dynamic_loudness instead. The volume filter itself still supports float samples.
  • Per-track audio-level metadata is now propagated to output frames (meta.audio.*).
  • Improved mlt_property_is_anim() so strings that merely contain = (for example URLs) are not treated as animation.
  • mlt_properties_get_data() no longer returns a data pointer for rect properties.
  • Fixed a signed integer overflow in mlt_luma_map_from_pgm.
  • Fixed fx_cut in-point handling in mlt_transition.
  • Fixed Android mlt++ builds by disabling ELF symbol versioning.
  • Fixed a macOS crash in numeric property conversion caused by setlocale. Parsing and formatting no longer change the process LC_NUMERIC.

Modules

  • Image converters (movit.convert, avcolor_space, imageconvert) are now attached from data in loader.ini, using the image_convert key.
  • Movit rgba64 is now a valid input as well as an output: FlatInput is created with GL_UNSIGNED_SHORT and set_pixel_data() uses the 16-bit overload. Previously, rgba64 was uploaded as 8-bit, which distorted the image when an OpenGL filter ran on an fx_cut.
  • Added placebo GPU module (placebo.render, placebo.shader) using libplacebo for scaling, debanding, dithering, tonemapping, and mpv-style .hook shaders (D3D11 / Vulkan / OpenGL).
  • Fixed a deadlock in the decklink consumer when pausing, seeking, and resuming playback.
  • Added ducking to the mix transition (duck_threshold, duck_attenuation, duck_level, duck_fade_in, duck_fade_out, and an optional prefix that records the level on the frame as <prefix>duck_level).
  • Added #frame+1# keyword in dynamictext (1-based frame number).
  • Added more audio formats to the audiolevel filter.
  • Added FFmpeg 9 support in avformat.
  • Fixed 10-bit hevc_vaapi encoding.
  • The avformat consumer now logs when it finishes.
  • Fixed rnnoise so it works at sample rates other than 48 kHz by resampling.
  • frei0r.kaleid0sc0pe and frei0r.squigglevision now report internal threading.
  • Fixed frei0r.camerashake (and its blur) with preview scaling.
  • The OpenFX module now skips duplicate plugins.
  • USE_LV2 and USE_VST2 require USE_LADSPA. The LADSPA blacklist.txt is installed even without JACK, and LV2_PATH is expanded correctly on Windows.
  • Fixed affine and qtblend inside mask_apply.
  • Fixed the qtblend transition so it does not apply pixel-aspect normalization twice.
  • Fixed alpha scaling in the luma transition, including when a luma file is used, and documented the invert property.
  • Fixed shape filter alpha subtraction for rgba.
  • Fixed motion-tracker shapes clipping outside the frame.
  • Fixed colorspace and range of cached images in qimage and pixbuf.
  • Fixed crop when hardware decode and scale are combined with preview scaling.
  • Fixed the subtitle filter rendering one frame past its end time, and fixed the subtitle_feed end-frame calculation.
  • Fixed filename buffer overflows in gpsgraphic and gpstext.
  • Fixed the sdl2 consumer so it no longer freezes on Windows after a few seconds.
  • Fixed sdl2_audio so it no longer hangs in consumer_stop() when stopped while paused.
  • Added s32, float, s32le, f32le, and u8 to the noise producer, and s16, s32, s32le, f32le, and u8 to tone. Fixed tone integer conversion to match audioconvert.
  • Fixed a double-free in the xml producer when a filter, transition, link, or producer fails to load.
  • Fixed movit.convert leaking a Movit input on every frame when an effect chain is reused.
  • Fixed the heart-rate keyword in gpstext (#gps_hr#).
  • gpsgraphic no longer sets time_offset when a GPS file is first loaded.

Other

  • melt prints its progress when it finishes and exits with a non-zero status when interrupted by a signal.
  • Fixed melt on Windows so it no longer ignores window resizing and keyboard transport.
  • Fixed melt -jack option not working with PipeWire.

v7.40.0 released

Jun 24, 2026

You can download it from GitHub.

The highlights of this version are expanded compatibility and capabilities for OpenFX plugins and a new audio noise reduction filter and link.

Framework

  • Some fixes for win32_fopen().
  • Security fixes for time formatting in mlt_properties.
  • Security fix to disable deprecated ante & post properties in mlc_consumer.
  • Added more properties to metaschema.yaml (new version 7.2):
    • audio_formats
    • video_formats
    • layout-hint
    • hide-label
    • normalized_default

Modules

  • Added audio_formats and image_formats properties to all service metadata.
  • Many improvements to the openfx module:
    • fixed potential overflows in snprintf() calls
    • multi-threading: frame- and slice-based
    • many compatibility fixes
    • added support for 2D and 3D numeric parameters (uses mlt_rect)
    • fixed preview scaling
    • fixed the default for choice (values in metaschema.yaml) parameters
    • fixed some effects rendering upside-down.
  • Added rnnoise module for background audio noise reduction (depends on librnnoise).
  • Added HDR10 SMPTE ST 2084 (PQ) properties to the decklink consumer:
    • hdr_red_x
    • hdr_red_y
    • hdr_green_x
    • hdr_green_y
    • hdr_blue_x
    • hdr_blue_y
    • hdr_white_x
    • hdr_white_y
    • hdr_max_luminance
    • hdr_min_luminance
    • hdr_max_cll
    • hdr_max_fall
  • Added the .lot file name extension for the loader producer to use glaxnimate.
  • Visual quality improvements for animations in the qtblend filter and transition.
  • Updated spatialaudio module to the libspatialaudio 0.4.0 API.
  • Fixed a signed int overflow in pgm producer.
  • MSVC compatibility fixes for kdenlivetitle producer and frei0r, plusgpl, jackrack, openfx, rtaudio, & resample modules.
  • Fixed choppy playback and deadlocks in the decklink consumer.
  • Fixed libopus audio encoder warning about frame_duration in avformat consumer.
  • Fixed crash in avformat consumer with unsupported attached_pic format.
  • Fixed plugin bundles for vst2 filters on macOS.
  • Fixed the frame position in the consumer producer.
  • Hardened string formatting for metadata properties in the vorbis producer.
  • Fixed typewriter in qtext filter lags when rate properties changed.

Other

  • Skip Qt preflight for XML-only consumers in melt.

v7.38.0 released

Apr 22, 2026

You can download it from GitHub.

The highlights of this version are basic, minimal support for OpenFX plugins and hardware scaling for preview scaling with hwaccel decoding.

Framework

  • Added dynamic hash table for mlt_properties for better performance.
  • Fixed memory corruption in mlt_pool.
  • Added warning on file open failure when parsing in mlt_properties.

Modules

  • Added basic support for OpenFX filter plugins. OpenFX has many features. This is a summary of what is NOT yet included:
    • GPU rendering
    • exotic parameter types: Integer2D, Integer3D, Double3D, Custom, Bytes, Page, PushButton
    • plugin-driven keyframe animation; but MLT-driven does work
    • tile-, slice-, or frame-based multi-threading (only plugin internal threading)
    • multi-resolution
    • temporal clip access
    • overlays & dialogs
    • timeline queries (e.g. getTime())
    • generator, transition, retimer
    • parametric curves
  • Added hwaccel_scale filter with preview scaling (scale_vaapi, scale_vulkan, scale_d3d11, scale_vt (macOS)).
  • Added an environment variable MLT_AVFORMAT_HWACCEL_PPS to provide a limiter to hwaccel because transfering uncompressed video between memory CPU and GPU memory is heavy. PPS = maximum pixels per second. Anything over it skips hwaccel.
  • Added lut parameter to avformat producer.
  • Added attached_pic property to avformat consumer.
  • Added movit.overlay_blend video filter.
  • Added compositing property to movit.overlay transition.
  • Added constant-power crossfade to mix audio transition.
  • Added rounded corner support for rect in kdenlivetitle.
  • Added typewriter properties to subtitle filter.
  • Added underline and strikethrough to the text and qtext filters.
  • Changed qtext style property to support family named styles.
  • Added anchor point support for arbitrary rotations in qtblend.
  • Allow relative paths for images in kdenlivetitle.
  • Updated Glaxnimate module to version 0.6.0.
  • Switched to QImage scaling when downscaling in qtblend.
  • Deprecated obscure and watermark filters.
  • Install the jackrack module’s blacklist files.
  • Fixed subtitle stream type metadata.
  • Fixed mutex initialization in avformat no-validate mode.
  • Fixed crash when using linearblend deinterlacer.
  • Fixed black bar with HEVC hwaccel decode and scale on Windows.
  • Fixed crash with hardware scaler and interlaced video.
  • Fixed converting 8-bit full to limited range with hwaccel.
  • Fixed alpha in 12-bit ProRes with alpha.
  • Fixed movit linear color not matching CPU filters.
  • Fixed multi consumer making extra linear color conversions.
  • Fixed regression writing raw FLAC.
  • Fixed qtblend filter returning unexpectedly large frames.
  • Fixed qtext outline encroaching on fill color.
  • Fixed wrong last+ frame when eof=loop in Glaxnimate.
  • Fixed brightness filter on track below a clip with transparency.

Other

  • Fixed crash during exit cleanup in melt.
  • Continued build improvements for MSVC.
  • A lot of metadata fixes and improvements.
  • Many fixes to API documentation.
  • Added C++ and Python to the API docs.
  • Added two 10-bit VP9 encoding presets.

v7.36.0 released

Dec 29, 2025

You can download it from GitHub.

This version adds image processing in linear color on the CPU (previously only Movit). Plus, it extends 10-bit video processing on the CPU to many more services.

Framework

  • Added mlt_image_default_colorspace()
  • Added mlt_image_default_trc()
  • Added mlt_image_default_primaries()
  • Added mlt_color_convert_trc()
  • Added the mlt_consumer property mlt_color_trc to drive a new color_transform normalizer filter. This sets the color transfer function to use for image/video effects. It is beneficial and correct to use linear color for any pixel mixing whether for blending or interpolation.
  • Removed atexit(mlt_factory_close) in mlt_factory_init(). Close the factory yourself if you feel the need to (not generally needed when exiting a process).
  • Prevent possible crash in mlt_service_connect_producer().
  • Added mlt_profile_is_valid() and Mlt::Profile::is_valid().
  • Fixed crash on invalid profile (CVE-2025-65834) in:
    • mlt_consumer_start()
    • mlt_factory_producer()
    • xml producer

Modules

  • Drop support for Qt 5.
  • Fixed bad color in luma transition’s dissolve (regression in v7.34.0).
  • Fixed HLG HDR broken in decklink consumer (regression in v7.34.0).
  • Fixed warnings when flushing audio in the avformat consumer.
  • Added support for hwaccel=vulkan to the avformat producer.
  • Added a color_transform normalizer filter to the core module to convert all image/video producers to and from linear color. It is abstract in the core module and drives the following filters:
    • avfilter.zscale
    • sws_colortransform
    • avfilter.scale
  • Added filter sws_colortransform that is more efficient than avfilter.swscale but requires FFmpeg 8.
  • Changed the default property values of the null consumer:
    • real_time: -1
    • terminate_on_pause: 1
  • Changed the luma and movit.luma transitions to progress linearly with linear color_trc.
  • Fixed the alpha channel dropped by the xml-clip producer.
  • Added mlt_image_rgba64 format to:
    • avcolor_space filter
    • avdeinterlace filter
    • affine filter and transition
    • audiolevelgraph filter
    • audiospectrum filter
    • audiowaveform filter
    • autofade filter
    • avformat producer and consumers
    • box_blur filter
    • brightness filter
    • pillar_echo filter
    • color producer
    • dropshadow filter
    • dynamictext filter (when used with qtext)
    • frei0r.alpha0ps filter
    • frei0r.alphagrad filter
    • frei0r.alphaspot filter
    • frei0r.bluescreen0r filter
    • frei0r.select0r filter
    • frei0r.transparency filter
    • gpsgraphic filter
    • gpstext filter
    • gradientmap filter
    • hslprimaries filter
    • hslrange filter
    • kdenlivetitle producer
    • lift_gamma_gain filter
    • lightshow filter
    • mask_apply (when used with qtblend)
    • movit.convert filter
    • outline filter
    • qtblend filter and transition
    • qtcrop filter
    • qtext producer
    • shape filter
    • spot_remover filter
    • strobe filter
    • subtitle filter (when used with qtext)
    • swscale filter
    • text filter (when used with qtext)
    • timeremap link
    • timer filter (when used with qtext)
    • vqm transition
  • Changed the mask_apply filter default transition to qtblend.
  • Removed the maximum for the alpha property on the brightness filter so that you can increase the opacity of an existing alpha channel.
  • Fixed background image scaling in the gpsgraphic filter.
  • Fix audio artifacts with pcm_s24le in mkv in avformat producer.

Other

  • Removed bitrate and quality limits in the vp9 and webm avformat presets.
  • Fixed melt on Windows not reading file path/name with extended characters (regression in v7.34.0).
  • Fixed building the ruby bindings with Ruby 3.0.
  • More fixes for MSVC.
  • Removed win32/strptime.c and replaced with Qt functions.
  • Stop showing melt usage on error exit.

v7.34.0 released

Nov 3, 2025

You can download it from GitHub.

This versions adds 10-bit video processing on the CPU, but you must ensure you are using compatible filters and transitions.

Framework

  • Added mlt_image_rgba64 format. This change touched core, avformat, and qt modules as well.
  • Added mlt_color_trc, mlt_color_primaries, and more mlt_colorspaces along with functions:
    • mlt_image_color_trc_name
    • mlt_image_color_trc_id
    • mlt_image_colorspace_name
    • mlt_image_colorspace_id
    • mlt_image_color_pri_name
    • mlt_image_color_pri_id
  • Fixed some minor memory leaks with cppcheck.

Modules

  • Added rgba and rgba64 formats to the luma transition.
  • Added rgba64 format to affine filter and transition.
  • Added rgba64 format to the qtblend transition.
  • Added support for FFmpeg 8 to the avformat module.
  • Fixed audio panner filter for 5.1 channel layout.
  • Fixed converting 10-bit full to limited range in avformat producer (regression in v7.30.0).
  • Fixed shadow not working for multi-line template titles in kdenlivetitle producer.
  • Fixed mask_apply filter with custom transition.
  • Added input_chmask & output_chmask properties to mono filter.
  • Added channel_mask property to LADSPA/LV2/VST2 filters.
  • Added channel_mask to the volume filter.
  • Added an outline video filter.
  • Fixed a deadlock on image with a % in the name in qimage producer.
  • Added scrubbing to the decklink consumer.
  • Fixed &amp; not decoded to & in the xml producer.
  • Fixed converting BT.709 to BT.2020 in the avformat module.
  • Fixed building a ladspa module without JACK as dependency.
  • Deprecate a JACK Rack XML file in the jackrack and ladspa modules.
  • Added filter qtblend_mode.
  • Fixed incorrect alpha channel breaking optimization of qtblend.
  • Fixed pixel format gbrap (Ut Video with alpha channel) in the avformat producer.
  • Fixed opencv_tracker filter on cut playlist clips.
  • Fixed warning about missing color range for avfilters that use it (e.g. avfilter.colorspace).
  • Added typewriter properties to the qtext filter.
  • Fixed color distortion or a crash if using hwaccel with orientation rotation in avformat producer.

Other

  • Enable Qt 6 and disable Qt 5 modules in CMake by default.
  • Disable the SDL1 module in CMake by default.
  • Changed melt now exits with 1 if the producer is invalid.
  • Various changes to work with MSVC compiler.
  • Changed SVT-AV1 encode presets to VBR for Opus audio.
  • Fixed initializing Qt on the main thread in melt.
  • Documented the -progress2 option for melt.
  • Increased the minimum C++ version to C++20.
  • Converted many modules to use CMake find_package().
  • Added libgen.c and libgen.h for MSVC.

Search

Featured Apps

Flowblade

Kdenlive

Shotcut

Subscribe

Subscribe to Newsvia RSS.

About

MLT enables you to author, manage, and run multitrack audio/video compositions. Copyright © 2008-2026 by Meltytech, LLC.

Social Links