6

我正在使用FFmpeg此命令在视频上叠加图像/表情符号 -

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

但上面的命令仅在视频上覆盖图像并保持静止。

InstagramSnapchat中有新的pin功能。我想要完全相同,例如blur在移动的面孔上或在下面的视频中 -

在此处输入图像描述

这是链接

可以通过FFmpeg吗?

我认为具有OPENCVArgumented Reality知识的人可以在这方面提供帮助。它很安静,类似于AR,因为我们需要在视频/实时摄像头上准确地移动/缩放表情符号。

4

1 回答 1

6

基于覆盖规范: https ://ffmpeg.org/ffmpeg-filters.html#overlay-1

当您指定时间间隔时,它只会在该时间间隔发生:

例如,要启用从 10 秒到 3 分钟的模糊滤镜 (smartblur):

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)或进行一些图像处理以查找特定区域。

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

于 2017-05-10T19:07:19.107 回答