You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于在MLT中添加多输入自定义FFmpeg AVFilter的技术咨询

关于MLT不识别多输入AVFilter的问题解答

1. MLT为何不支持多输入AVFilter?

MLT核心架构最初围绕非线性编辑的单轨/单输入滤镜流程设计,滤镜系统默认绑定单个上游媒体生产者,对多输入资源的同步、调度逻辑支持不足。同时AVFilter的多输入节点模型与MLT的轨道/clip管理模型存在适配门槛,加上历史上社区对多输入AVFilter的需求优先级不高,因此MLT没有原生支持这类滤镜。

2. 代码中何处限制了该功能?

核心限制集中在MLT的AVFilter模块实现中:

  • 滤镜注册逻辑:在src/modules/avfilter/filter_avfilter.c的filter_avfilter_init函数里,会检查AVFilter的输入端口数量,若filter->nb_inputs != 1,则跳过该滤镜的注册流程;
  • 帧处理逻辑:mlt_filter_process函数默认仅处理单个输入帧,未实现多输入帧的同步获取与传递逻辑;
  • 结构体设计:MltFilter核心结构体没有存储多输入生产者的字段,无法同时绑定多个上游媒体源;
  • 探针逻辑:avfilter_probe函数会过滤掉多输入的AVFilter,不会将其纳入MLT的滤镜元数据列表。

3. 添加该滤镜的最佳方式是什么?

根据需求场景,有两种主流方案:

方案一:快速适配(无需修改MLT源码)

在FFmpeg层面将你的多输入滤镜包装为单输入滤镜:通过FFmpeg滤镜链,把第二个输入源用movie滤镜加载后作为参数传入自定义滤镜,或是将多输入逻辑封装为单输入的复合滤镜。这样MLT可直接识别包装后的滤镜,无需修改MLT代码。

方案二:原生支持(修改MLT源码,长期复用)

若需要长期支持多输入AVFilter,可修改MLT的AVFilter模块:

  1. 修改filter_avfilter.c中的注册逻辑,允许nb_inputs > 1的AVFilter被注册;
  2. 扩展MltFilter结构体,添加存储多输入生产者的字段;
  3. 实现多输入帧的同步逻辑,等待所有输入源的帧就绪后,再调用AVFilter的处理函数;
  4. 调整mlt_filter_process的逻辑,支持多输入帧的传递与处理。

备选方案

如果滤镜逻辑不复杂,也可直接基于MLT原生API开发多输入滤镜,完全绕过AVFilter的适配问题。

内容的提问来源于stack exchange,提问作者Shivam gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:01:17