前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【FFmpeg】Filter 过滤器 ⑤ ( 画中画 - overlay 过滤器 | overlay 过滤器可选参数设置 | 内置参数 | 基础用法 | 控制画中画尺寸及播放效果 | 跑马灯效果 )

【FFmpeg】Filter 过滤器 ⑤ ( 画中画 - overlay 过滤器 | overlay 过滤器可选参数设置 | 内置参数 | 基础用法 | 控制画中画尺寸及播放效果 | 跑马灯效果 )

作者头像
韩曙亮
发布2024-05-24 10:18:58
1040
发布2024-05-24 10:18:58
举报

本博客中实现的画中画效果 :

执行如下命令 , 实现基础的画中画效果 ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4[vedio_inner];[in][vedio_inner]overlay=x=10:y=10[out]" output.mp4

执行如下命令 , 实现画中画跑马灯效果 ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4,scale=200x200[vedio_inner];[in][vedio_inner]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]" output.mp4

一、画中画 - overlay 过滤器


1、overlay 过滤器语法

overlay 过滤器 可以 将多个 视频流 / 设备 / 视频文件 合并到一个 视频界面 中 ,

代码语言:javascript
复制
overlay=x=position_x:y=position_y[:options]

上述 overlay 过滤器 中的 x 和 y 参数 解析 :

  • x=position_x 参数 , x 是参数名称 , position_x 是实际的参数值 , 这是在输出视频中 叠加内容 的水平位置 ;
  • y=position_y 参数 , y 是参数名称 , position_y 是实际的参数值 , 这是在输出视频中 叠加内容 的垂直位置 ;
  • 上述 position_x 和 position_y 参数值 可以是 像素值 , 也可以是 相对位置百分比值 ;
  • (0, 0) 是视频左上角位置 , x 值向右增加 , y 值向下增加 ;

2、overlay 过滤器可选参数设置

overlay 过滤器 还可以设置 若干 可选 options 参数 , 如下所示 :

  • format : 设置叠加内容的像素格式 , 可设置的值如 : yuv420p / yuv422p / yuv444p / rgb24 / rgba / gray 等值 ; ( 一般情况下不会使用 )
    • yuv420p : 最常见的像素格式 , Y 表示亮度 Luma , 而 U 和 V 表示色度 Chrominance ;
    • rgb24 : RGB 格式 , 每个像素由 24 位表示 : 8 位红色 / 8 位绿色 / 8 位蓝色 ;
  • eof_action : 设置在叠加内容结束时的处理行为 , 如 : 停止叠加或者循环播放 , 可设置的值如下 :
    • repeat : 参数值为 0 , 当输入视频结束时 , 重复最后一帧 , 叠加图像将保持在最后一帧的状态直到整个视频处理完毕 ;
    • endall : 参数值为 1 , 当输入视频结束时 , 结束叠加 , 即 : 主视频结束 , 叠加效果终止 ; 只要有一个播放完毕 , 整体停止播放 ;
    • pass : 参数值为 2 , 保留 主图层 ;
  • repeatlast : 如果设置为 1,当叠加内容结束后,将重复最后一帧的内容。
  • enable : 控制叠加内容的显示和隐藏 , 可以是布尔值或者视频时钟表达式 ;
  • shortest : 最短的视频播放完毕后 , 是否全部终止 , 设置一个布尔值 , 默认为 false ;
    • 如果设置为 true , 则在最短的视频播放完毕时 , 整个画面会停止 ;

3、overlay 过滤器内置参数

在 overlay 过滤器中 , 也可以使用 之前 movie 过滤器 中介绍的四个内置参数 :

  • main_w : 表示 输入视频的画面宽度 ;
  • main_h : 表示 输入视频的画面高度 ;
  • overlay_w : 表示 叠加视频的宽度 ;
  • overlay_h : 表示 叠加视频的高度 ;

更多细节参考 【FFmpeg】Filter 过滤器 ④ ( 图片水印 - movie 过滤器 / overlay 过滤器 | movie 过滤器内置参数值简介 | 图片水印示例 ) -> movie 过滤器内置参数值简介 博客章节 , 详细介绍了上述四个参数的使用状况 ;

二、画中画命令示例解析


1、画中画命令默认设置 - 基础用法

下面的命令中 , 使用了 movie 过滤器 和 overlay 过滤器 , 实现了画中画效果 ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4[vedio_inner];[in][vedio_inner]overlay=x=10:y=10[out]" output.mp4
  • movie=input2.mp4[vedio_inner] 部分 用于设定 movie 过滤器 , 指定了一个输入视频文件 input2.mp4 , 加载该视频流 , 并将其命名为 vedio_inner , 这个名称可以随意命名 , 任意字符串即可 ;
  • [in][vedio_inner]overlay=x=10:y=10[out] 部分 用于设置 overlay 过滤器 , 将 input.mp4 输入视频 和名为 vedio_inner 的视频 进行叠加 , 叠加位置 x=10 和 y=10 指定了叠加的位置为 (10, 10) 坐标 ;
    • [in] 参数表示 input.mp4 输入视频 ;
    • [vedio_inner] 参数 表示 movie 过滤器 加载的 input2.mp4 文件对应的视频流 ;
    • [out] 参数表示 output.mp4 输出文件 ;

执行上述命令 , 执行结果如下 :

先执行上述转换命令生成 output.mp4 输出文件 , 然后执行 ffplay output.mp4 播放 输出文件 ;

2、画中画命令 - 设置 eof_action 参数

设置 eof_action 参数 , 设置 eof_action=0 选项 , 这是默认选项 , 其执行效果与上个章节的执行效果相同 ;

eof_action=1 选项是 overlay 过滤器选项 , 在 y 坐标设置后 , 使用 冒号 分隔符 进行分割设置 ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4[vedio_inner];[in][vedio_inner]overlay=x=10:y=10:eof_action=1[out]" output.mp4

上述命令执行后 , 生成的视频 , 内部嵌入视频时长比外部视频时长短 , 内部视频播放结束后 , 外部视频也停止 ; ( 音频没有停止 )

3、画中画命令 - 设置 shortest 参数

设置 shortest=1 参数 与设置 eof_action=1 参数效果相同 ;

执行

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4[vedio_inner];[in][vedio_inner]overlay=x=10:y=10:shortest=1[out]" output.mp4

命令 , 实现的画中画效果如下 , 左上角小视频播放完毕后 , 整个视频停止播放 ;

4、画中画命令 - 设置 scale 参数控制画中画尺寸

执行

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4,scale=200x200[vedio_inner];[in][vedio_inner]overlay=x=10:y=10[out]" output.mp4

命令 , 在 movie 过滤器中 , 设置了 scale=200x200 参数 , 该参数控制加载的 input2.mp4 视频流画面设置为 200x200 像素 ,

执行效果如下 : 画中画的尺寸设置为了 200x200 像素大小 ;

5、画中画命令 - 设置跑马灯效果

执行

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "movie=input2.mp4,scale=200x200[vedio_inner];[in][vedio_inner]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]" output.mp4

命令 , 设置 x 和 y 的属性 , 其中使用了表达式 , 根据时间动态改变 嵌入视频的位置 ;

将 x 的值设置为 mod(50*t\,main_w) 实现的是 每秒 向右移动 50 像素的执行效果 ;

设置 y 的值为 abs(sin(t))*main_h\*0.7 , 这是在 y 方向以正弦函数进行运动 ;

参考 【FFmpeg】Filter 过滤器 ④ ( 图片水印 - movie 过滤器 / overlay 过滤器 | movie 过滤器内置参数值简介 | 图片水印示例 ) 3、添加图片水印 - 水印跑马灯不停移动 博客章节的 FFmpeg 表达式解析 ;

执行效果如下 : 嵌入的画中画视频有跑马灯效果 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、画中画 - overlay 过滤器
    • 1、overlay 过滤器语法
      • 2、overlay 过滤器可选参数设置
        • 3、overlay 过滤器内置参数
        • 二、画中画命令示例解析
          • 1、画中画命令默认设置 - 基础用法
            • 2、画中画命令 - 设置 eof_action 参数
              • 3、画中画命令 - 设置 shortest 参数
                • 4、画中画命令 - 设置 scale 参数控制画中画尺寸
                  • 5、画中画命令 - 设置跑马灯效果
                  相关产品与服务
                  媒体处理
                  媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档