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 的一些资料链接:
- 源码:github - mlt
- 官方文档:MLT Document
2. MTL 编译
MTL 使用 CMake 作为编译构建系统,你可以大致看看它的 CMake 是怎么写的。你会发现 CMake 中有一堆的开关设置,例如 MOD_AVFORMAT
、MOD_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 运行的主要内容,如果未能解决你的问题,请参考以下文章