基于覆盖规范:https://ffmpeg.org/ffmpeg-filters.html#overlay-1
当您指定时间间隔时,它只会在该时间间隔发生:
例如,启用模糊滤镜 (smartblur) 从 10 秒到 3 分钟:
smartblur = enable='between(t,10,3*60)'
您需要做的是将图像覆盖在特定坐标处,例如以下固定 x 和 y 处的图像:
ffmpeg -i rtsp://[host]:[port] -i x.png -filter_complex 'overlay=10:main_h-overlay_h-10' http://[host]:[post]/output.ogg
现在的想法是根据视频的当前帧计算这些坐标,并强制过滤器在每一帧上使用更改后的坐标。
例如基于时间:FFmpeg 将覆盖从一个像素坐标移动到另一个像素坐标
ffmpeg -i bg.mp4 -i fg.mkv -filter_complex \
"[0:v][1:v]overlay=enable='between=(t,10,20)':x=720+t*28:y=t*10[out]" \
-map "[out]" output.mkv
或者使用其他一些表达方式:http://ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation
不幸的是,这需要在使用猫移动头部或画笔表示 x 和 y 的有限表达式之前找到一个公式。它可以是线性的、三角函数的或其他与时间相关的函数:
x=sin(t)
自由移动并不总是可能的。
为了更精确地查找对象坐标来覆盖某些内容,应该可以提供您自己的过滤器(ffmpeg 是开源的),类似于覆盖:https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_overlay.c
根据外部文件计算 x 和 y(如果是静态视频,您可以在所有时间转储所有 x 和 y)或进行一些图像处理以查找特定区域。
希望它能给您一个想法和前进的方向。
这是一个非常有趣的功能。