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

如何基于鼠标光标坐标为视频添加光标Overlay?

解决FFmpeg添加大量鼠标光标Overlay的方案

核心思路

放弃多次叠加overlay滤镜的方式,改用单个overlay配合动态参数控制,彻底避免命令行参数爆炸或脚本长度超限的问题。以下是三种实用方案:

方案1:单个Overlay + 分段时间表达式(适合时间点数量中等场景)

利用FFmpeg的between()函数生成分段坐标表达式,让单个overlay滤镜在不同时间区间自动切换坐标。

操作步骤:

  1. 整理所有鼠标时间戳与坐标,按时间从小到大排序,格式为时间戳, x坐标, y坐标。
  2. 用PHP脚本自动生成x、y的表达式,示例逻辑:
    • 对于时间区间[t0, t1),坐标为(x0,y0);[t1, t2)为(x1,y1),以此类推。
    • 生成的表达式示例(假设3个时间点):
      x='if(between(t,0,2),100,if(between(t,2,5),300,500))'
      y='if(between(t,0,2),200,if(between(t,2,5),400,600))'
      
  3. 执行FFmpeg命令:
    ffmpeg -i input.mp4 -i cursor.png \
    -filter_complex "[1]format=rgba,alpha=0.5[cursor]; \
    [0][cursor]overlay=x='if(between(t,0,2),100,if(between(t,2,5),300,500))':y='if(between(t,0,2),200,if(between(t,2,5),400,600))'" \
    output.mp4
    
    • format=rgba确保光标图片带透明通道,alpha=0.5设置光标透明度可按需调整。

方案2:Sendcmd滤镜(适合超大量时间点场景)

通过外部命令文件控制overlay参数,彻底避免命令行或filter脚本过长的问题。

操作步骤:

  1. 生成命令文件cursor_cmds.txt,每行对应一个时间点的坐标指令:
    0.0 set overlay@cursor_overlay x 100 y 200;
    2.0 set overlay@cursor_overlay x 300 y 400;
    5.0 set overlay@cursor_overlay x 500 y 600;
    # 更多时间点...
    
  2. 执行FFmpeg命令,用sendcmd加载命令文件动态修改overlay坐标:
    ffmpeg -i input.mp4 -i cursor.png \
    -filter_complex "[1]format=rgba,alpha=0.5[cursor]; \
    [0][cursor]overlay@cursor_overlay=x=0:y=0[vid]; \
    [vid]sendcmd=c='cursor_cmds.txt'" \
    -map "[vid]" output.mp4
    
    • overlay@cursor_overlay给滤镜命名,方便sendcmd精准控制;sendcmd=c='cursor_cmds.txt'加载外部命令文件。

方案3:预先生成光标轨迹视频(适合逻辑分离场景)

先单独生成仅包含光标移动的透明视频,再与原视频叠加,处理流程更清晰。

操作步骤:

  1. 生成与原视频同分辨率、同时长的透明背景视频:
    ffmpeg -f lavfi -i color=c=black@0:s=1920x1080:r=30:d=30 -pix_fmt rgba cursor_bg.mp4
    
    • s=1920x1080替换为原视频分辨率,d=30替换为原视频时长(秒),r=30为帧率。
  2. 用方案2的sendcmd方法,给透明视频添加光标轨迹,生成cursor_track.mp4:
    ffmpeg -i cursor_bg.mp4 -i cursor.png \
    -filter_complex "[1]format=rgba,alpha=0.5[cursor]; \
    [0][cursor]overlay@cursor_overlay=x=0:y=0[vid]; \
    [vid]sendcmd=c='cursor_cmds.txt'" \
    -map "[vid]" cursor_track.mp4
    
  3. 将原视频与光标轨迹视频叠加:
    ffmpeg -i input.mp4 -i cursor_track.mp4 -filter_complex "[0][1]overlay" output.mp4
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:53:16