MLT 视频编辑框架简介编译与 demo 运行

Posted 芥末的无奈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MLT 视频编辑框架简介编译与 demo 运行相关的知识,希望对你有一定的参考价值。

文章目录


1. MTL 简介

MLT(MLT Multimedia Framework)是一个开源的多媒体编辑框架。它是这么介绍自己的:

非线性视频编辑器的引擎,可用于各种应用程序,而不仅仅是桌面视频编辑器。MLT是一个开源的多媒体框架,为电视广播设计和开发。它为广播公司、视频编辑、媒体播放器、转码器、网络流媒体和许多其他类型的应用程序提供了一个工具包。该系统的功能是通过各种即用工具、XML创作组件和可扩展的基于插件的API提供的。

MLT 是一个纯 C 写的库,但它有一颗面向对象的心,使用基于 C 的面向对象开发范式。网络上对于 MLT 的讨论或者资料并不多,官网有较全面的介绍,包括 API、框架介绍等等,但这些资料仍然不够。作为一个初学者,我发现想要成功地运行 MTL 内置的命令行工具是一件困难的事情,而网络上对这部分介绍少之又少。不确定是我的使用姿势有问题,还是是因为我使用的是 Mac M1 导致的,总之在琢磨了一段时间后,我才顺利将 demo 运行起来。接下来我将有一系列的文章来总结学习 MTL 的框架的过程。

而今天,就是 MTL 系列开篇。让我们从最基础的编译和运行 MTL 内置命令行开始。

关于 MTL 的一些资料链接:


2. MTL 编译

MTL 使用 CMake 作为编译构建系统,你可以大致看看它的 CMake 是怎么写的。你会发现 CMake 中有一堆的开关设置,例如 MOD_AVFORMATMOD_SDL2 等等。每一个开关表示一个模块,每个模块最终会被编译成一个 .so 动态库文件。MLT 是插件式的框架,你可以选择开或者关掉某些模块。

简单起见,我们暂时将任务定义为:使用 MLT 播放一个视频。基于这个目标,需要安装 ffmpeg、sdl2 两个库。如何安装,请自行解决,此文不再赘述。

代码下载完毕后,使用 cmake 进行编译,非常简单:

cmake -S . -B build
cmake --build build

编译完成后,你在 build/out 目录下得到编译的产物;在 build/out/llib/mlt 有很多 .so 文件,它们就是各个模块的产物;在 build/out/bin 下有一个 melt 命令行工具,Melt 是作为 MLT 框架的一个测试工具开发的。它可以被认为是一个强大的,尽管有些晦涩的,面向多轨命令行的视频编辑器。

├── bin
│   └── melt
├── lib
│   └── mlt
│       ├── libmltavformat.so
│       ├── libmltcore.so
│       ├── libmltdecklink.so
│       ├── libmltfrei0r.so
│       ├── libmltjackrack.so
│       ├── libmltkdenlive.so
│       ├── libmltnormalize.so
│       ├── libmltoldfilm.so
│       ├── libmltplus.so
│       ├── libmltplusgpl.so
│       ├── libmltqt.so
│       ├── libmltresample.so
│       ├── libmltrtaudio.so
│       ├── libmltrubberband.so
│       ├── libmltsdl2.so
│       ├── libmltvidstab.so
│       ├── libmltvorbis.so
│       ├── libmltxine.so
│       └── libmltxml.so

3. Melt 命令行运行

想要使用 Melt 播放一个视频文件,你可以这么写:

MLT_PRODUCER=avformat ./melt filepath.mp4 \\
-filter rescale \\
-consumer sdl2:1280x720 \\
-repository /Users/user/Documents/develop/mlt/cmake-build-debug/out/lib/mlt
  • MLT_PRODUCER=avformat 通过环境变量 MLT_PRODUCER 来指定默认的 producer
  • -filter rescale 添加一个 rescale filter,否则视频只会显示部分
  • -consumer sdl2:1280x720 添加一个 sdl2 consumer,用于显示视频窗口,冒号后面是窗口的大小参数,自己调整试试效果
  • -repository 参数指定模块 .so 的存放目录

顺利的话,你可以看到一个视频正在播放,melt 还提示可以通过键盘来操作,如果下图:
但此时的视频播放出来的声音还是有问题,一片杂音。原因是 SDL2 音频播放只支持 s16 的音频格式,但你输入的视频可能不是这个格式。可以添加一个 audioconvert 滤镜来解决,命令如下:

MLT_PRODUCER=avformat ./melt filepath.mp4 \\
-filter rescale -filter audioconvert\\
-consumer sdl2:1280x720 \\
-repository /Users/user/Documents/develop/mlt/cmake-build-debug/out/lib/mlt

总结

本文介绍了 MTL 视频编辑框架的编译与命令行工具运行,成功地使用 MLT 播放了一个视频。由于 MTL 代码比较晦涩难懂,且没有很好的文档进行说明,导致你需要去扒代码才能搞清楚其中的逻辑,整体来说 MLT 是一个比较有难度的框架。

参考

以上是关于MLT 视频编辑框架简介编译与 demo 运行的主要内容,如果未能解决你的问题,请参考以下文章

源码编译Kdenlive视频编辑器

Qt 开源音视频框架模块QtAV01:介绍编译以及简单使用

AVAudioFoundation:音视频编辑

音视频demo| 不一样的AR Call

MLT 多媒体框架的 Python 绑定文档

OpenHarmony 3.2 Beta多媒体系列——音视频播放框架