前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【FFmpeg】Filter 过滤器 ③ ( 文字水印 - drawtext 过滤器 | drawtext 过滤器支持库编译配置 | drawtext 过滤器常用参数 )

【FFmpeg】Filter 过滤器 ③ ( 文字水印 - drawtext 过滤器 | drawtext 过滤器支持库编译配置 | drawtext 过滤器常用参数 )

作者头像
韩曙亮
发布2024-05-14 08:43:20
2220
发布2024-05-14 08:43:20
举报
文章目录

  • 一、文字水印 - drawtext 过滤器
    • 1、drawtext 过滤器简介
    • 2、drawtext 过滤器支持库
    • 3、编译 FFmpeg 源码时启用 drawtext 过滤器配置
  • 二、drawtext 过滤器常用参数
    • 1、设置文字参数 - text / textfile
    • 2、设置背景盒子参数 - box / borderw / boxcolor
    • 3、设置颜色值 - RGB / 十六进制 / 英文名称
    • 4、设置字体参数 - font / fontsize / fontcolor
    • 5、设置水印位置参数 - x / y
    • 6、设置水印透明度参数 - alpha
  • 三、drawtext 过滤器添加水印示例
    • 1、添加水印 - 基础设置
    • 2、添加水印 - 设置背景框和文本颜色
    • 3、添加水印 - 显示当前时间
    • 4、添加水印 - 定时显示水印
    • 5、添加水印 - 跑马灯效果

FFmpeg 相关文档 :

一、文字水印 - drawtext 过滤器


1、drawtext 过滤器简介

drawtext 过滤器 是 FFmpeg 中的一个 视频过滤器 , 用于 在 视频画面帧 上绘制文本 , 也就是添加文字水印 , 也可用于添加 标题 , 字幕 等元素 ;

  • 文字水印属性 : drawtext 过滤器 可以 在 视频画面 的任何位置添加任何文字内容 , 并可以 自定义文字的字体 / 大小 / 颜色 / 位置 等属性 ;
  • 动态时间戳显示 : drawtext 过滤器 可以 使用 时间戳 显示 动态变化 的时间信息 , 如 : 在视频上显示从 视频开始 到 当前时间 的经过时间 ;
  • 多语言支持 : 使用 drawtext 过滤器 可以 在视频中添加 包括 中文 的 多种语言的文本 ;

drawtext 过滤器 文档 : https://ffmpeg.org/ffmpeg-filters.html#drawtext-1 , drawtext 过滤器 在上述文档的 " 11.78 章节 绘制文本 " 章节 ;

在这里插入图片描述
在这里插入图片描述

2、drawtext 过滤器支持库

使用 drawtext 过滤器 的 前提是 :

  • 已经 安装 FFmpeg 命令行工具 ;
  • 安装的 FFmpeg 在 编译时 启用了如下库 :
    • libfreetype : 字体引擎库 , 可访问多种字体格式文件 , 支持单色位图 , 反走样位图的渲染 ;
    • libharfbuzz : 文本布局和字形渲染库 , 支持多种字体格式 , 有专门的处理逻辑来确保文本的正确排列和形状形成 ;
    • libfontconfig : 配置和自定义字体访问的库 , 可根据特定的环境和用户需求 选择和调整字体设置 ;
    • libfribidi : 从左到右和从右到左的双向文本渲染库 , 可确保文本的正确显示和布局 ;

如果没有启用上述函数库 , 则无法使用 drawtext 过滤器 ;

3、编译 FFmpeg 源码时启用 drawtext 过滤器配置

FFmpeg 中想要 使用 drawtext 过滤器 功能 , 需要 在编译 FFmpeg 时添加 对 FreeType / FontConfig / iconv 的支持 , 具体 就是使用 libfreetype 库在 视频画面帧的顶部 绘制 文本字符串 , 需要 启用的 编译配置如下 :

  • 启用 libfreetype 配置 : --enable-libfreetype ;
  • 启用 libharfbuzz 配置 : --enable-libharfbuzz ;
  • 启用 libfontconfig 配置 : --enable-libfontconfig ;
  • 启用 libfribidi 配置 : --enable-libfribidi ;

上述编译配置 , 是在 编译 FFmpeg 源码之前 , 调用 ./configure 命令 , 后面带上上述编译配置 ;

具体的配置命令如下 :

代码语言:javascript
复制
./configure --enable-libfreetype --enable-libharfbuzz --enable-libfontconfig --enable-libfribidi

更多编译细节 , 参考 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 ) 十一、交叉编译配置 Shell 脚本 ( 重点 ) 博客 ,

  • 首先 , 调用 ./configure 命令 , 配置编译选项 ;
  • 然后 , 调用 make install 命令 , 正式编译 FFmpeg 源码 ;

二、drawtext 过滤器常用参数


1、设置文字参数 - text / textfile

text 参数 用于 设置要添加的 文本 , 参数值 类型是字符串 ;

参数选项 : text='Hello World' ;

完整的 过滤器 选项 : drawtext=text='Hello World' , 如果有多个选项 , 使用 : 隔开 ;

完整命令 : 将 drawtext 过滤器放在双引号中 , 作为 -vf 参数值设置到 ffmpeg 命令中 ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!'" output.mp4

如果 text 参数设置的 文字字符串很多 , 可以写到文件中 , 使用 textfile 参数 进行设置 , 设置的是 字符串文件 的路径 ;

参考设置 : textfile='/path/to/textfile.txt' ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "textfile='/path/to/textfile.txt" output.mp4

2、设置背景盒子参数 - box / borderw / boxcolor

使用 box 参数 , 可以设置 文字水印 的 背景盒子 ;

显示 文字水印 时 , 可以显示一个背景盒子 , 这个盒子类似于 CSS 中的盒子 , 可以设置边框 , 背景颜色 , 边框可以分别设置 四个方向 的边框属性 , 如 宽度和颜色 ;

box 参数可设置三个值 :

  • 1 : 绘制方框 ;
  • 0 : 不绘制方框 ;
  • borderw : 绘制带有指定边框宽度的方框 ;

配置示例 :

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':box=1:boxcolor=black" output.mp4

borderw 参数 :

  • boxborderw=10 设置上下左右边框 10 像素宽度 ;
  • boxborderw=10|20 设置上下边框 10 像素宽度 , 左右边框 20 像素宽度 ;
  • boxborderw=10|20|30 设置上边框 10 像素宽度 , 左右边框 20 像素宽度 , 下边框 30 像素宽度 ;
  • boxborderw=10|20|30|40 设置上边框 10 像素宽度 , 右边框 20 像素宽度 , 下边框 30 像素宽度 , 左边框 40 像素宽度 ;

配置示例 :

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':borderw=2" output.mp4

使用 boxcolor 参数 , 可以设置 边框的颜色 , 颜色值可以设置 RGB 颜色值 / 英文名称 / 十六进制颜色值 ;

代码语言:javascript
复制
boxcolor=black
boxcolor=0xFF0000
boxcolor=#FF0000

配置示例 :

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':boxcolor=red:borderw=2" output.mp4

3、设置颜色值 - RGB / 十六进制 / 英文名称

颜色值设置 : 在 FFmpeg 中的过滤器中 , 可使用如下方式设置颜色值 :

  • RGB 颜色值 : 使用 RGB 颜色值 来表示颜色 , 如 : 0xFF0000 ;
  • 颜色英文名称 : 使用 颜色的英文名称 表示颜色 , 如 : white 白色 , black 黑色 ;
  • 十六进制颜色值 : 使用 十六进制颜色值 表示颜色 , 如 : #FF0000 红色 , #FFFFFF 白色 ;

在上述使用 boxcolor 参数 可 进行如下设置 :

代码语言:javascript
复制
boxcolor=black
boxcolor=0xFF0000
boxcolor=#FF0000

4、设置字体参数 - font / fontsize / fontcolor

font 参数 设置 字体文件的路径 或 字体名称 ;

  • 字体名称 必须是 系统中已安装的字体的名称 , font=Arial ;
  • 字体文件的路径 , 一般是 ttf 格式的文件路径 , font=/path/to/font.ttf ;

代码示例 :

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':font=/path/to/font.ttf" output.mp4

fontcolor 参数 可用于设置 文本水印 的字体颜色 , 颜色值可以设置 RGB 颜色值 / 英文名称 / 十六进制颜色值 ;

fontsize 参数 用于设置 文本水印 的 字体大小 , 单位是像素 , 如 : fontsize=24 表示字体大小为 24 像素 ;

代码示例 :

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':x=100:y=100:font=/path/to/font.ttf:fontsize=24:fontcolor=white" output.mp4

在 Windows 中可以在 " 个性化 / 字体 " 中查看已安装的字体 ;’

在这里插入图片描述
在这里插入图片描述

Mac 和 Linux 有各自的查询系统已安装字体的方法 ;

5、设置水印位置参数 - x / y

drawtext 过滤器 中 使用 x 参数 和 y 参数 设置文本水印的位置 ;

  • x 参数 用于指定 文本水印 相对于 视频画面帧 左上角的 水平位置 , 单位是 像素 ;
  • y 参数 用于指定 文本水印 相对于 视频画面帧 左上角的 垂直位置 , 单位是 像素 ;
在这里插入图片描述
在这里插入图片描述

命令行示例 :

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':x=100:y=100:fontsize=24:fontcolor=white" output.mp4

6、设置水印透明度参数 - alpha

alpha 参数 可用于 设置 文本水印 的透明度 , 透明度值 范围是 0 到 1 之间的浮点数 ,

  • 0 表示完全透明
  • 1 表示完全不透明

命令行示例 : 下面的命令中设置了 0.5 透明度 ;

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':x=100:y=100:fontsize=24:fontcolor=white:alpha=0.5" output.mp4

三、drawtext 过滤器添加水印示例


1、添加水印 - 基础设置

执行

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':x=100:y=100:fontsize=24:fontcolor=white" output.mp4

命令 , 就会在 输入视频 的 100x100 位置处 , 绘制 24 像素大小的 白色 文本水印 , 水印内容是 “Hello, World!” 字符串 ;

在这里插入图片描述
在这里插入图片描述

2、添加水印 - 设置背景框和文本颜色

执行

代码语言:javascript
复制
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':x=100:y=100:fontsize=24:box=1:fontcolor=green" output.mp4

命令 , 在前面的基础上设置文本框背景 , 默认是白色的 , 此处字体需要设置成 绿色的 ;

执行结果如下 :

在这里插入图片描述
在这里插入图片描述

3、添加水印 - 显示当前时间

执行

代码语言:javascript
复制
ffmpeg -re -i input.mp4 -vf "drawtext=text='Hello, World! %{localtime\:%Y\-%m\-%d %H-%M-%S}':x=100:y=100:fontsize=24:box=1:fontcolor=green" output.mp4

命令 , 在前面的基础上增加时间显示 , 时间显示 文本可设置为 %{localtime\:%Y\-%m\-%d %H-%M-%S} 格式 , 可以拼接到字符串中 ;

注意 , 在命令中需要添加 -re 参数 , 否则时间更新可能不及时 , 每隔几秒才跳一下 ;

执行结果如下 :

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、添加水印 - 定时显示水印

执行

代码语言:javascript
复制
ffmpeg -re -i input.mp4 -vf "drawtext=text='Hello, World! %{localtime\:%Y\-%m\-%d %H-%M-%S}':x=100:y=100:fontsize=24:box=1:fontcolor=green:enable=lt(
mod(t\,3)\,1)" output.mp4

命令 , 在前面的基础上增加 enable 参数用于指定何时应用滤镜效果 ;

enable=lt(mod(t\,3)\,1) 是一个表达式 , 用于控制滤镜的启用时机 ;

  • t 表示时间 , 单位是 秒 ;
  • mod(t\,3) 表示 对 时间 进行 模 3 运算 , 即 秒时间 除以 3 的余数 ;
  • lt(mod(t\,3),1) 表示 将 mod(t\,3) 的计算结果 与 1 进行比较 , 如果相等返回 1 , 如果不等 返回 0 ;

enable=lt(mod(t\,3),1) 的 整体效果 是 : 每 3 秒的周期中的 第一秒时启用滤镜效果 , 在后续的 2 秒内禁用滤镜效果 , 实现了 周期性地启用和禁用滤镜效果 ;

更多的 表达式 内容 参考 https://ffmpeg.org//ffmpeg-utils.html#Expression-Evaluation 文档 的

执行效果 :

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、添加水印 - 跑马灯效果

执行

代码语言:javascript
复制
ffmpeg -re -i input.mp4 -vf "drawtext=text='Hello, World! %{localtime\:%Y\-%m\-%d %H-%M-%S}':x=mod(100*t\,w):y=abs(sin(t))*h*0.7:fontsize=24:box=1:fontcolor=green" output.mp4

命令 , 实现跑马灯效果 , 主要是实时改变 x 和 y 的坐标 ;

执行效果 :

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、文字水印 - drawtext 过滤器
    • 1、drawtext 过滤器简介
      • 2、drawtext 过滤器支持库
        • 3、编译 FFmpeg 源码时启用 drawtext 过滤器配置
        • 二、drawtext 过滤器常用参数
          • 1、设置文字参数 - text / textfile
            • 2、设置背景盒子参数 - box / borderw / boxcolor
              • 3、设置颜色值 - RGB / 十六进制 / 英文名称
                • 4、设置字体参数 - font / fontsize / fontcolor
                  • 5、设置水印位置参数 - x / y
                    • 6、设置水印透明度参数 - alpha
                    • 三、drawtext 过滤器添加水印示例
                      • 1、添加水印 - 基础设置
                        • 2、添加水印 - 设置背景框和文本颜色
                          • 3、添加水印 - 显示当前时间
                            • 4、添加水印 - 定时显示水印
                              • 5、添加水印 - 跑马灯效果
                              相关产品与服务
                              命令行工具
                              腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档