当前位置 : 主页 > 手机开发 > 无线 >

在视频中移动对象上的叠加图像(Argumented Reality / OpenCv)

来源:互联网 收集:自由互联 发布时间:2021-06-10
我使用FFmpeg通过此命令在视频上叠加图像/表情符号 – "-i "+inputfilePath+" -filter_complex "+"[0][1]overlay=enable='between(t,"+startTime+","+endTime+")'[v1]"+" -map [v0] -map 0:a "+OutputfilePath; 但是上面的命令只覆
我使用FFmpeg通过此命令在视频上叠加图像/表情符号 –

"-i "+inputfilePath+" -filter_complex "+"[0][1]overlay=enable='between(t,"+startTime+","+endTime+")'[v1]"+" -map [v0] -map 0:a "+OutputfilePath;

但是上面的命令只覆盖视频上的图像并保持静止.

在Instagram和Snapchat中有新的pin功能.我想要完全相同,例如在移动的脸上模糊或在视频下方 –

enter image description here

Here is link.

有没有可能通过FFmpeg?

我认为拥有OPENCV或Argumented Reality知识的人可以为此提供帮助.它与AR类似,因为我们需要在视频/实时摄像头上准确移动/缩放表情符号.

基于覆盖规范:
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 move overlay from one pixel coordinate to another

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)

随着自由行动,并非总是可行.

为了更精确地找到一个对象坐标以覆盖某些东西,应该可以提供类似于overlay的自己的过滤器(ffmpeg是开源的):
https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_overlay.c

根据外部文件计算x和y(如果它是静态视频,您可以一直转储所有x和y)或者执行一些图像处理以查找特定区域.

希望它能给你一个想法和方向.这是非常有趣的功能.

网友评论