FFmpeg - 如何实现圆形视频叠加..?

FFmpeg - 如何实现圆形视频叠加..?

我正在帮助我的女儿和她的朋友建立他们的 Youtube VLOG 频道,现在他们想要进行屏幕录制,并放置一个较小的圆形面部特写(例如在右上角或左上角),这样你就可以看到他们谈论他们正在屏幕录制的实际内容。我使用 FFmpeg 处理更基本的东西已有近十年了,但我可以看出这是一项更复杂的任务。

我偶然发现了另一个问题帖子(https://stackoverflow.com/questions/42518592/circular-movie-overlay-in-ffmpeg) 感谢谷歌,我认为他试图完成或多或少相同的事情,除了他对小圆形覆盖和“主”视频使用相同的源,而我想使用单独的输入;如果有人愿意解决这个微妙的任务,请使用“main.mkv”和“facecloseup.mkv”作为命令行示例!;)

为了简单起见,我可能已经拥有具有优化分辨率的两个源,例如 main.mkv 为 1080p,facecloseup.mkv 为 240x240 或类似的分辨率,然后我只需要数学语法从 facecloseup.mkv 中裁剪出一个中心圆并放在某个角落,为简单起见,取左上角。

干杯!

答案1

使用

ffmpeg -i main.mkv -i facecloseup.mkv
 -filter_complex "[1]trim=end_frame=1,
  geq='st(3,pow(X-(W/2),2)+pow(Y-(H/2),2));if(lte(ld(3),pow(min(W/2,H/2),2)),255,0)':128:128,
  loop=-1:1,setpts=N/FRAME_RATE/TB[mask];
  [1][mask]alphamerge[cutout];
  [0][cutout]overlay=x=W-w:y=0[v];
  [0][1]amix=2[a]"
 -map "[v]" -map "[a]"  out.mp4

评论视频用于构建一个以视频中心为中心的圆形灰度蒙版。然后将其作为 alpha 通道与源合并。它覆盖在右上角。音频混合在一起。-map "[a]"如果主视频没有音频,请删除最后一个过滤器。

答案2

对于将来看到此问题的人来说,-filter_complex_threads 1由于多线程错误,您需要在末尾添加才能使其正常工作。

该代码对我有用:

ffmpeg -i main.mkv -i facecloseup.mkv
 -filter_complex "[1]geq='st(3,pow(X-(W/2),2)+pow(Y- 
  (H/2),2));if(lte(ld(3),pow(min(W/2,H/2),2)),255,0)':128:128,
  setpts=N/FRAME_RATE/TB[mask];
  [1][mask]alphamerge[cutout];
  [0][cutout]overlay=x=W-w:y=0[v];
  [0][1]amix=2[a]" -map "[v]" -map "[a]"  out.mp4 -filter_complex_threads 1

我发现我们可以简单地删除 loop=-1:1 并修剪部分,因为它似乎不会影响最终结果。事实上,循环过滤器导致命令在 ffmpeg 版本 4.4.2-0 ubuntu 上永久生成视频。

答案3

我正在尝试理解 geq 过滤器。文档不太完善,我不确定正在使用的 3 个值(其中 2 个固定为 128)代表什么。

您能否分享一些详细信息或重定向到此过滤器的详细文档?谢谢!

相关内容