探索 FFmpeg Basics 音视频技术(9): 画中画 – overlay

这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 9 篇:FFmpeg   画中画 – overlay。

—— 来自公众号“关键帧Keyframe”的分享

Overlay 视频技术经常被使用。常见的例子包括放置在电视屏幕上的电视频道标志,通常位于右上角,用于标识特定频道。另一个例子是画中画功能,可以在主屏幕的一个角落显示一个小窗口。小窗口包含选定的电视频道或其他内容,而主屏幕上则播放节目——这在等待特定内容或跳过广告时非常有用。

本章仅包含简单的 overlay 示例,更复杂的例子在颜色校正和高级技术章节中。

1、关于 overlay 的介绍

视频 overlay 是一种技术,可以在(通常是较大的)背景视频或图像上显示前景视频或图像。我们可以使用下表中描述的覆盖视频滤波器:

描述在指定位置覆盖第一个输入
语法overlay[=x:y[[:rgb={0, 1}]]
参数 x 和 y 是可选的,默认值为 0。rgb 参数是可选的,取值为 0 或 1。
\\\*********参数描述
x从左上角起的水平坐标,默认值为 0
y从左上角起的垂直坐标,默认值为 0
rgbrgb = 0…输入的颜色空间保持不变,默认值
rgb = 1…输入的颜色空间设置为 RGB
\\\*********可在 x 和 y 表达式中使用的变量
main_w 或 W主输入宽度
main_h 或 H主输入高度
overlay_w 或 w覆盖输入宽度
overlay_h 或 h覆盖输入高度

2、overlay 命令结构

视频覆盖命令的结构如下,其中 input1 是视频背景,input2 是前景:

ffmpeg -i input1 -i input2 -filter_complex overlay=x:y output

请注意,这里使用的是 -filter_complex 选项,而不是 -vf 选项,因为我们有两个输入源(通常是视频文件或图像)。但是,使用带有链接标签的 filtergraph,我们可以使用一个电影视频源,该源包含第二个输入,并且只使用 -vf 选项:

ffmpeg -i input1 -vf movie=input2[logo];[in][logo]overlay=x:y output

另一种方法是将一个输入拆分为多个输出,并使用 pad 滤波器创建更大的背景。此背景在 filterchain 中作为覆盖滤波器的第一个输入,此方法已在第一章的过滤器、过滤链和过滤器图部分中描述。

探索 FFmpeg Basics 音视频技术(9): 画中画 - overlay

3、角落的 Logo

为了让内容保持可见,标志通常被放置在屏幕的四个角落之一。以下四个示例使用 pair.mp4 视频作为第一个输入,其中包含一对婚礼物品,第二个输入是包含文本 M+P(例如,Mary 和 Peter)的红色心形。视频分辨率为 1280×720 像素,标志大小为 150×140 像素,但我们不需要这些尺寸来计算标志的位置。标志的左上角(x 和 y 坐标)的正确位置由背景和前景的宽度和高度决定:

W H – 宽度和背景高度(视频)

w h – 宽度和前景高度(标志)

4、Logo 在左上角

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4
探索 FFmpeg Basics 音视频技术(9): 画中画 - overlay

5、Logo 在右上角

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w pair2.mp4

6、Logo 在右下角

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w:H-h pair3.mp4

7、Logo 在左下角

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=0:H-h pair4.mp4

8、Logo 在指定时间显示

在某些情况下,例如当视频包含一个特别的介绍时,可以使用 -itsoffset 选项在时间间隔后添加标志(或其他源到覆盖层)。例如,在开始的 5 秒后,在蓝色背景上添加一个红色标志,我们可以使用以下命令:

ffmpeg -i video_with_timer.mp4 -itsoffset 5 -i logo.png ^ -filter_complex overlay timer_with_logo.mp4
探索 FFmpeg Basics 音视频技术(9): 画中画 - overlay

在第二个输入之前直接输入 -itsoffset 选项非常重要,否则覆盖效果将从输出的开始处开始。有关 -itsoffset 选项的更多示例,请参见时间操作章节。使用电影滤波器延迟标志的其他方法在高级技术章节中有介绍。

9、视频计时器

此示例使用了 1973 年的公共领域 NASA 视频,记录了阿波罗 17 号从月球表面的发射。视频时长为 29.93 秒,分辨率为 512×384 像素。我们使用一个两位数的计时器,就像裁剪视频章节中的数字一样。

以下命令可以生成 timer.ogg 视频文件:

ffmpeg -f lavfi -i testsrc -vf crop=61:52:224:94 -t 30 timer.ogg

现在我们有一个 61×52 像素的小视频,显示计时器从 0 到 30 秒。此视频将覆盖在阿波罗 17 号月球发射视频的右上角,命令如下:

ffmpeg -i start.mp4 -i timer.ogg -filter_complex overlay=451 startl.mp4

计时器的 x 坐标为 512 – 61 = 451,y 坐标为 0。

探索 FFmpeg Basics 音视频技术(9): 画中画 - overlay

下一个命令将计时器缩放到 1/2,并将其置于底部中心:

ffmpeg -i start.mp4 -vf movie=timer.ogg,scale=15:14[tm];^ [in][tm]overlay=248:371 overlay.mp4
探索 FFmpeg Basics 音视频技术(9): 画中画 - overlay

现在计时器几乎看不见了。我们使用一个名为 [tm] 的标签作为缩放滤波器的输出板,以便将改变大小的计时器作为覆盖滤波器的第二个输入,第一个输入是由默认 [in] 标签表示的 start.mp4 文件。

10、其他 overlay 示例

其他使用了 overlay 技术的示例包括:

  • FFmpeg 基本介绍章节中的过滤器、过滤链和过滤器图部分。
  • 图像处理章节中的切片、旋转和覆盖图像部分。
  • 麦克风和网络摄像头章节中的使用两个摄像头部分。
  • 颜色校正章节。
  • 高级技术章节中将额外媒体输入添加到 filtergraph 的部分。

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 FFmpeg Basics 音视频技术(9): 画中画 - overlay

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论