Repository navigation
Releases: mltframework/mlt
Release list
v7.42.0
What's Changed
Framework
- Added list-based image-conversion callback dispatch on mlt_frame.
Usemlt_frame_append_convert_image()to register a converter instead of
settingframe->convert_imagedirectly. 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_imageis now read-only after
init and is permanently set to the dispatchermlt_frame_convert_image().
External code that set this field directly to a custom function will no
longer have that function called. If you really need that (never heard of
someone who does), clear the frame's "_convert_image_callbacks" property
and usemlt_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 used by tractor stacking and this path:mlt_frame_prepend_image_from_service()mlt_frame_push_image_with_fx_cut()
- Fixed crash 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 to rgba64 and does not copy producer-keyed
_movitchain state. Same-producer prepends keep the GPU chain. Playlist
fx_cutframes now set_producerso Movit can key the chain. - Copy
meta.andset.properties from the producer ontofx_cutframes
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).
Addedmlt_audio_format_id()and anmlt_audio_formatproperty on the
multiconsumer. Integer/float conversion is lossless and symmetric
(s16 and u8 round-trips are exact). - Deprecated audio services that only support integer samples.
- Propagate per-track audio-level metadata 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 signed integer overflow in
mlt_luma_map_from_pgm. - Fixed
fx_cutin-point handling inmlt_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 processLC_NUMERIC.
Modules
- Image converters (
movit.convert,avcolor_space,imageconvert) are
now attached data-driven vialoader.inikeyimage_convert. - Movit
rgba64is now a valid input as well as output:FlatInputis
created withGL_UNSIGNED_SHORTandset_pixel_data()uses the 16-bit
overload. Previously rgba64 was uploaded as 8-bit, which distorted the
image when an OpenGL filter ran on anfx_cut. - Added
placeboGPU module (placebo.render,placebo.shader) using
libplacebo for scaling, debanding, dithering, tonemapping, and mpv-style
.hookshaders (D3D11 / Vulkan / OpenGL). - Fixed deadlock in the
decklinkconsumer when pausing, seeking, and
resuming playback. - Added ducking to the
mixtransition (duck_threshold,duck_attenuation,
duck_level,duck_fade_in,duck_fade_out, and an optional prefix for
duck_levelon the frame). - Added
#frame+1#keyword indynamictext(1-based frame number). - Added more audio formats to the
audiolevelfilter. - FFmpeg 9 support in
avformat. - Fixed 10-bit
hevc_vaapiencoding. - Log when the
avformatconsumer finishes. - Fixed
rnnoiseonly working with 48 kHz audio. frei0r.kaleid0sc0peandfrei0r.squigglevisionreport internal threading.- Fixed
frei0r.camerashake(and its blur) with preview scaling. - Skip duplicate OpenFX plugins.
USE_LV2andUSE_VST2requireUSE_LADSPA; install LADSPA
blacklist.txtwithout JACK; expandLV2_PATHcorrectly on Windows.- Fixed
affineandqtblendinsidemask_apply. qtblend: flag to avoid double PAR normalization.- Fixed luma transition alpha scaling, alpha when using a luma file, and
documented theinvertproperty. - Fixed
shapefilter alpha subtraction for rgba. - Fixed motion-tracker shapes clipping outside the frame.
- Fixed colorspace and range of cached images in
qimageandpixbuf. - Fixed
cropwith hardware decode+scale plus preview scale. - Fixed subtitle filter rendering one frame past the end time, and
subtitle_feedend-frame calculation. - Fixed file-name buffer overflows in
gpsgraphicandgpstext. - Fixed the
sdl2consumer freezing on Windows after a few seconds. - Fixed
sdl2_audiohanging inconsumer_stop()when stopped while paused. - Added
s32,float,s32le,f32le, andu8to thenoiseproducer,
ands16,s32,s32le,f32le, andu8totone. Fixedtone
integer conversion to matchaudioconvert. - Fixed a double-free in the
xmlproducer when a filter, transition,
link, or producer fails to load. - Fixed
movit.convertleaking a Movit input on every frame when an
effect chain is reused. - Fixed the heart-rate keyword in
gpstext(#gps_hr#). gpsgraphicno longer setstime_offsetwhen a GPS file is first loaded.
Other
meltprints progress at the end and exits non-zero when interrupted
by a signal.- Fixed
melton Windows ignoring window resize and keyboard transport. - Fixed melt
-jackoption not working with PipeWire.
New Contributors
- @Magnussmari made their first contribution in #1270
- @doruphin made their first contribution in #1279
- @michaeljtbrooks made their first contribution in #1286
- @zhuowei made their first contribution in #1293
- @klg90 made their first contribution in #1307
- @darkdi made their first contribution in #1309
- @iDoMeteor made their first contribution in #1323
Full Changelog: v7.40.0...v7.42.0
v7.40.0
What's Changed
Framework
- Some fixes for
win32_fopen(). - Security fixes for time formatting in
mlt_properties. - Security fix to disable deprecated
ante&postproperties inmlc_consumer. - Added more properties to
metaschema.yaml(new version 7.2):audio_formatsvideo_formatslayout-hinthide-labelnormalized_default
Modules
- Added
audio_formatsandimage_formatsproperties to all service metadata. - Many improvements to the
openfxmodule:- 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(valuesinmetaschema.yaml) parameters - fixed some effects rendering upside-down.
- fixed potential overflows in
- Added
rnnoisemodule for background audio noise reduction (depends on librnnoise). - Added HDR10 SMPTE ST 2084 (PQ) properties to the
decklinkconsumer:hdr_red_xhdr_red_yhdr_green_xhdr_green_yhdr_blue_xhdr_blue_yhdr_white_xhdr_white_yhdr_max_luminancehdr_min_luminancehdr_max_cllhdr_max_fall
- Added the
.lotfile name extension for theloaderproducer to useglaxnimate. - Visual quality improvements for animations in the
qtblendfilter and transition. - Updated
spatialaudiomodule to the libspatialaudio 0.4.0 API. - Fixed a signed int overflow in
pgmproducer. - MSVC compatibility fixes for
kdenlivetitleproducer andfrei0r,plusgpl,jackrack,openfx,rtaudio, &resamplemodules. - Fixed choppy playback and deadlocks in the
decklinkconsumer. - Fixed libopus audio encoder warning about
frame_durationinavformatconsumer. - Fixed crash in
avformatconsumer with unsupportedattached_picformat. - Fixed plugin bundles for
vst2filters on macOS. - Fixed the frame position in the
consumerproducer. - Hardened string formatting for metadata properties in the
vorbisproducer. - Fixed
typewriterinqtextfilter lags when rate properties changed.
Other
- Skip Qt preflight for XML-only consumers in
melt.
New Contributors
- @dirkmueller made their first contribution in #1226
- @Komzpa made their first contribution in #1231
- @guiodic made their first contribution in #1229
- @orbisai0security made their first contribution in #1250
Full Changelog: v7.38.0...v7.40.0
v7.38.0
What's Changed
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_propertiesfor 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_scalefilter with preview scaling (scale_vaapi, scale_vulkan, scale_d3d11, scale_vt (macOS)). - Added an environment variable
MLT_AVFORMAT_HWACCEL_PPSto 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
lutparameter toavformatproducer. - Added
attached_picproperty toavformatconsumer. - Added
movit.overlay_blendvideo filter. - Added
compositingproperty tomovit.overlaytransition. - Added constant-power crossfade to
mixaudio transition. - Added rounded corner support for
rectinkdenlivetitle. - Added typewriter properties to
subtitlefilter. - Added underline and strikethrough to the
textandqtextfilters. - Changed
qtextstyleproperty 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
QImagescaling when downscaling inqtblend. - Deprecated
obscureandwatermarkfilters. - Install the jackrack module's blacklist files.
- Fixed subtitle stream type metadata.
- Fixed mutex initialization in
avformatno-validate mode. - Fixed crash when using
linearblenddeinterlacer. - 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
movitlinear color not matching CPU filters. - Fixed
multiconsumer making extra linear color conversions. - Fixed regression writing raw FLAC.
- Fixed
qtblendfilter returning unexpectedly large frames. - Fixed
qtextoutline encroaching on fill color. - Fixed wrong last+ frame when
eof=loopin Glaxnimate. - Fixed
brightnessfilter 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.
New Contributors
- @oedmilsonfernandes made their first contribution in #1196
- @chocolateimage made their first contribution in #1211
- @balooii made their first contribution in #1110
- @guchangx made their first contribution in #1223
Full Changelog: v7.36.1...v7.38.0
v7.36.1
This version fixes a regression creating a xml-clip producer or producer with a null profile. This broke, for example, nesting a MLT XML project file within another project in Shotcut.
Full Changelog: v7.36.0...v7.36.1
v7.36.0
What's Changed
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_consumerpropertymlt_color_trcto drive a newcolor_transformnormalizer 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)inmlt_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()andMlt::Profile::is_valid(). - Fixed crash on invalid profile (CVE-2025-65834) in:
mlt_consumer_start()mlt_factory_producer()xmlproducer
Modules
- Drop support for Qt 5.
- Fixed bad color in
lumatransition's dissolve (regression in v7.34.0). - Fixed HLG HDR broken in
decklinkconsumer (regression in v7.34.0). - Fixed warnings when flushing audio in the
avformatconsumer. - Added support for
hwaccel=vulkanto theavformatproducer. - Added a
color_transformnormalizer 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.zscalesws_colortransformavfilter.scale
- Added filter
sws_colortransformthat is more efficient thanavfilter.swscalebut requires FFmpeg 8. - Changed the default property values of the
nullconsumer:real_time: -1terminate_on_pause: 1
- Changed the
lumaandmovit.lumatransitions to progress linearly with linearcolor_trc. - Fixed the alpha channel dropped by the
xml-clipproducer. - Added
mlt_image_rgba64format to:avcolor_spacefilteravdeinterlacefilteraffinefilter and transitionaudiolevelgraphfilteraudiospectrumfilteraudiowaveformfilterautofadefilteravformatproducer and consumersbox_blurfilterbrightnessfilterpillar_echofiltercolorproducerdropshadowfilterdynamictextfilter (when used withqtext)frei0r.alpha0psfilterfrei0r.alphagradfilterfrei0r.alphaspotfilterfrei0r.bluescreen0rfilterfrei0r.select0rfilterfrei0r.transparencyfiltergpsgraphicfiltergpstextfiltergradientmapfilterhslprimariesfilterhslrangefilterkdenlivetitleproducerlift_gamma_gainfilterlightshowfiltermask_apply(when used withqtblend)movit.convertfilteroutlinefilterqtblendfilter and transitionqtcropfilterqtextproducershapefilterspot_removerfilterstrobefiltersubtitlefilter (when used withqtext)swscalefiltertextfilter (when used withqtext)timeremaplinktimerfilter (when used withqtext)vqmtransition
- Changed the
mask_applyfilter default transition toqtblend. - Removed the maximum for the
alphaproperty on thebrightnessfilter so that you can increase the opacity of an existing alpha channel. - Fixed background image scaling in the
gpsgraphicfilter. - Fix audio artifacts with pcm_s24le in mkv in
avformatproducer.
Other
- Fixed melt on Windows not reading file path/name with extended characters (regression in v7.34.0).
- Removed bitrate and quality limits in the vp9 and webm
avformatpresets. - Fixed building the ruby bindings with Ruby 3.0.
- More fixes for MSVC.
- Removed
win32/strptime.cand replaced with Qt functions. - Stop showing
meltusage on error exit.
New Contributors
Full Changelog: v7.34.1...v7.36.0
v7.34.1
Fixed compiling with Qt 5.
Full Changelog: v7.34.0...v7.34.1
v7.34.0
What's Changed
Framework
- Added
mlt_image_rgba64format. This change touched core, avformat, and qt modules as well. - Added
mlt_color_trc,mlt_color_primaries, and moremlt_colorspaces along with functions:mlt_image_color_trc_namemlt_image_color_trc_idmlt_image_colorspace_namemlt_image_colorspace_idmlt_image_color_pri_namemlt_image_color_pri_id
- Fixed some minor memory leaks with
cppcheck.
Modules
- Added rgba and rgba64 formats to the
lumatransition. - Added rgba64 format to
affinefilter and transition. - Added rgba64 format to the
qtblendtransition. - Added support for FFmpeg 8 to the
avformatmodule. - Fixed audio
pannerfilter for 5.1 channel layout. - Fixed converting 10-bit full to limited range in
avformatproducer (regression in v7.30.0). - Fixed shadow not working for multi-line template titles in
kdenlivetitleproducer. - Fixed
mask_applyfilter with custom transition. - Added
input_chmask&output_chmaskproperties tomonofilter. - Added
channel_maskproperty to LADSPA/LV2/VST2 filters. - Added
channel_maskto thevolumefilter. - Added an
outlinevideo filter. - Fixed a deadlock on image with a
%in the name inqimageproducer. - Added scrubbing to the
decklinkconsumer. - Fixed
&not decoded to&in thexmlproducer. - Fixed converting BT.709 to BT.2020 in the
avformatmodule. - Fixed building a
ladspamodule without JACK as dependency. - Deprecate a JACK Rack XML file in the
jackrackandladspamodules. - Added filter
qtblend_mode. - Fixed incorrect alpha channel breaking optimization of
qtblend. - Fixed pixel format gbrap (Ut Video with alpha channel) in the
avformatproducer. - Fixed
opencv_trackerfilter on cut playlist clips. - Fixed warning about missing color range for
avfilters that use it (e.g.avfilter.colorspace). - Added typewriter properties to the
qtextfilter. - Fixed color distortion or a crash if using hwaccel with orientation rotation in
avformatproducer.
Other
- Enable Qt 6 and disable Qt 5 modules in CMake by default.
- Disable the SDL1 module in CMake by default.
- Changed
meltnow 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
-progress2option formelt. - Increased the minimum C++ version to C++20.
- Converted many modules to use CMake
find_package(). - Added
libgen.candlibgen.hfor MSVC.
New Contributors
- @sammiler made their first contribution in #1141
Full Changelog: v7.32.0...v7.34.0
v7.32.0
What's Changed
Framework
- Added
mlt_service_set_consumer()andMlt::Service::set_consumer(). - Optimized
mlt_multitrackto not request a frame from a producer that both hidden and muted.
Modules
- Fixed pixel format for VP8/VP9 streams in
avformatproducer. - Fixed
yuva422ppixel format inavformatproducer. - Added
MLT_AVFORMAT_HWACCEL&MLT_AVFORMAT_HWACCEL_DEVICEenvironment variables toavformatproducer. - Updated
decklinkmodule for recent hardware and drivers. - Added
colorspaceandcolor_trc(including HDR) properties to thedecklinkconsumer. - Fixed silencing extra audio channel (e.g. 6 => 8) in
decklinkconsumer. - Fixed 5.1 C/LFE channels swapped over HDMI in
decklinkconsumer. - Fixed text outline had sharp angles in
kdenlivetitleproducer. - Fixed default gamma to be Rec. 709 for 10-bit Y'CbCr from
movitmodule. - Added support for HLG gamma to
movitmodule (requires ddennedy/movit fork). - Fixed
opencv_trackerfilter should require multiple keyframes to be ready. - Fixed OpenCV crash on
rect<= 1 pixel inopencv_trackerfilter. - Fixed aspect ratio in
qtblendfilter and transition. - Fixed
QT_QPA_PLATFORM=offscreennot working in qt and glaxnimate modules. - Improved preview scaling in
qtblendfilter. - Fixed requesting huge images on multiple
qtblendfilters or transitions. - Fixed
sdl2consumer on macOS. - Fixed the
strobefilter not working withmovit. - Fixed color and gamma using
timeremaplink withmovit. - Fixed consumer properties (e.g.
channels) missing onqglslconsumer injected by thexmlproducer.
New Contributors
- @evertvorster made their first contribution in #1066
Full Changelog: v7.30.0...v7.32.0
v7.30.0
What's Changed
Framework
- Fixed
Mlt::Producer::set_creation_time()not exported on i686. - Fixed
Mlt::Properties::set(int64_t)symbol version. - Fixed
mlt_factory_init()on Linux/BSD may fail to initialize when compiled with-DRELOCATABLE. - Added generic non-drop-frame timecode in
mlt_property.c.
Previously, it was only done for 30000/1001 and 60000/1001 frame rates, but 24000/1001 is especially important as well. - Added support for MLT XML embedded in chains.
This, along withxml-clipproducer handles mismatching frame rate between parent and child producers and facilites time-affecting links on the child. - Added
mlt_image_full_range(const char *color_range)where any of the following strings return true (1):full,jpeg,pc.
Modules
- Added
xml-clipproducer. - Fixed link
inandoutproperties arenot serialized in thexmlconsumer. - Added
hslprimariesandhslrangefilters to theplusmodule. - Added a
gradientmapfilter to theplusmodule. - Fixed
avfilteraudio filters with FFmpeg 7. - Fixed incorrect frame rate for AVCHD (and possibly others) in
avformat. - Fixed
window_idproperty in consumersdl2by usingSDL_CreateWindowFrom(), especially important for embedding in GTK+ or Qt. - Fixed text not rendering in transition
vqmsince Qt 6. - Added
decimalskeyword togpstextfilter and moveRAWkeyword check. - Fixed
time_offsetproperty handling ingpstextfilter. - Fixed reading and writing SRT files with unicode in the path.
- Fixed
subtitle_feedfilter on producers with an in point > 0. - Fixed opaque alpha channels become translucent in
lumatransition. - Fixed a crash in the
mixtransition withconsumerproducer. - Fixed
freezefilter freezing too much. - Fixed
avfilter.fillborderswith preview scaling. - Fixed non-proportional scaling in
qtblendtransition and filter. - Fixed
avfiltercolor distortion withmlt_image_rgbandmlt_image_rgba. - Extended support for
colorspace=2020consumer property and the BT.2020 colorspace in theavformatproducer and consumer.
This does not imply HDR, which is signaled through acolor_trcproperty. - Added support for
mlt_image_yuv420p10,mlt_image_yuv444p10, andmlt_image_yuv422p16inavfilter,swscale, andrescalefilters.
This facilitates using these pixel formats end-to-end when using only FFmpeg producers, certain avfilters, andavformatconsumer. This means it is possible to do 10-bit end-to-end on the CPU when being careful to select compatible components and options to avoid conversions. One can pass-through HDR; however, you must set thecolor_trcandpix_fmtproperties on theavformatconsumer (seeffmpeg -h fullfor these values). Theavformatconsumer automatically converts MLTcolorspace(integer value) to FFmpeg'scolorspaceandcolor_primaries(unless explicit) options.
Other
- Cleaned up the examples in
src/swig. - Changed the
x264-mediumpreset to a higher quality.
New Contributors
- @jonata made their first contribution in #1033
- @Integral-Tech made their first contribution in #1048
- @YakoYakoYokuYoku made their first contribution in #1046
Full Changelog: v7.28.0...v7.30.0
v7.28.0
What's Changed
This fixes a couple of major regressions in the previous version 7.26.0:
- Fixed seeking and frozen video due by reverting "Improved performance with intra-only video and reducing the frame rate."
- Fixed using
meltto render MLT XML with OpenGL effects frommovit.
Other fixes and changes:
- Deprecated the
compositetransition and thesdlandndimodules. - Fixed Android camera video has the wrong frame rate (broken in v7.26.0).
- Fixed audio not playing for audio-only DTS WMA.
- Fixed using "https:" URLs in the
xmlproducer. - Fixed crash on exit when running
melt -queryormelt -query links. - Added a
transitionproperty to thewatermarkfilter. Now, it defaults to usingaffine. - Changed
affinetransition argument to setrectproperty if supplied.