You need to enable JavaScript to run this app. MLT dynamictext滤镜#timecode#参数仅显示分秒的格式化方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

MLT dynamictext滤镜#timecode#参数仅显示分秒的格式化方法咨询

MLT框架dynamictext滤镜的自定义时间实现方案

dynamictext滤镜里的#timecode#宏本身不支持和#localtime#一致的自定义格式化规则——两者的解析逻辑从设计上就存在本质区别,你之前尝试的#timecode %M:%S#语法无法生效是符合设计预期的,并非配置错误。

  • #localtime# 直接对接系统时间格式化接口,原生支持标准strftime格式占位符,只要在宏标记内写入格式即可生效,可以直接按需求定义展示内容
  • #timecode# 是内置的固定结构时间码渲染宏,默认输出时:分:秒:帧的固定格式,本身没有预留自定义格式的解析分支
  • 语法失效的直接原因:#timecode#宏的识别是严格匹配成对闭合标记的,只有完整出现#timecode#才会触发替换,在两个#之间插入格式参数的写法,根本识别不到目标宏,自然无法触发替换逻辑

你之前用qtcrop滤镜隐藏小时、帧字段的实现方式属于绕路方案,完全可以利用dynamictext滤镜原生支持的嵌入式动态表达式能力,从输出源头直接生成你需要的分:秒格式文本,不需要叠加额外的裁剪滤镜,实现逻辑更简洁,也没有画面裁切的冗余计算开销。

场景1:和原生timecode计时基准完全对齐

这种方式不需要重新计算时间,直接对内置timecode的输出做字符串拆分截取即可,保证和原生时间码的计时精度完全一致:

  • 利用动态表达式调用原生timecode的生成接口
  • 按冒号分割时间码字符串(原生结构为时:分:秒:帧)
  • 取拆分后对应分钟、秒的字段拼接成目标格式,跳过不需要展示的小时、帧字段

对应的滤镜配置写法:

dynamictext argument="\
  raw_tc = timecode(); \
  parts = split(raw_tc, ':'); \
  # parts[0]为小时字段,parts[3]为帧字段,直接跳过
  text = parts[1] + ':' + parts[2]; \
  text"

场景2:自定义精度的时间展示

如果不需要保留帧信息,只需要精确到秒的分:秒展示,也可以直接基于播放位置计算,灵活性更高:

dynamictext argument="\
  # 基于当前播放帧位置计算准确播放秒数
  total_sec = consumer.frame() / consumer.fps();
  min = int(total_sec / 60);
  sec = int(total_sec % 60);
  # 自动补零保持两位数格式
  text = sprintf('%02d:%02d', min, sec);
  text"

和qtcrop裁切的方案相比,上述实现的优势很明显:

  • 没有额外的滤镜叠加,减少渲染管线的计算量
  • 输出的文本内容直接是目标长度,不会因为时间码字段长度变化出现文本位置偏移
  • 格式调整灵活,后续需要增加、删减展示字段时,不需要重新调整裁切区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 11:24:10