• 音视频添 加水印


    一、文字水印

    在视频中增加文字水印需要准备的条件比较多,需要有文字字库处理的相关文件,在编译FFmpeg时需要支持FreeType、FontConfig、iconv,系统中需要有相关的字库,在FFmpeg中增加纯字母水印可以使用drawtext滤镜进行支持,下面就
    来看一下drawtext的滤镜参数

    参数类型说明
    text字符串文字
    textfile字符串文字文件
    box布尔文字区域背景框(缺省false)
    boxcolor色彩展示字体区域块的颜色
    font字符串字体名称(默认为Sans字体)
    fontsize整数显示字体的大小
    x字符串缺省为0
    y字符串缺省为0
    alpha浮点数透明度(默认为1),值从0~1

    (1)将文字的水印加在视频的左上角:

    ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20"
    
    • 1

    将字体的颜色设置为绿色:

    ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green"
    
    • 1

    如果想调整文字水印显示的位置,调整x与y参数的数值即可。

    ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200"
    
    • 1

    修改透明度

    ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200:alpha=0.5"
    
    • 1

    (2)文字水印还可以增加一个框,然后给框加上背景颜色:

    ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':
    fontcolor=green:box=1:boxcolor=yellow"
    
    • 1
    • 2

    至此,文字水印的基础功能已经添加完成。

    (3)有些时候文字水印希望以本地时间作为水印内容,可以在drawtext滤镜中配合一些特殊用法来完成,在
    text中显示本地当前时间,格式为年月日时分秒的方式,

    ffplay  -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%
    d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow"
    
    • 1
    • 2

    在使用ffmpeg转码存储到文件时需要加上-re,否则时间不对。

    ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%
    m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" out.mp4
    
    • 1
    • 2

    (4)在个别场景中,需要定时显示水印,定时不显示水印,这种方式同样可以配合drawtext滤镜进行处理,使
    用drawtext与enable配合即可,例如每3秒钟显示一次文字水印:

    ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:
    boxcolor=yellow:enable=lt(mod(t\,3)\,1)"
    
    • 1
    • 2

    在使用ffmpeg转码存储到文件时需要加上-re,否则时间不对。

    (5)跑马灯效果

    ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=
    abs(sin(t))*h*0.7"
    
    • 1
    • 2

    修改字体透明度,修改字体颜色

    ffplay -i input.mp4 -vf "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='liaoqingfu':x=mod(50*t\,w):y=
    abs(sin(t))*h*0.7:alpha=0.5:fontcolor=white:enable=lt(mod(t\,3)\,1)"
    
    • 1
    • 2

    二、图片水印

    FFmpeg除了可以向视频添加文字水印之外,还可以向视频添加图片水印、视频跑马灯等,本节将重点介绍如何为视频添加图片水印;为视频添加图片水印可以使用movie滤镜,下面就来熟悉一下movie滤镜的参数

    参数类型说明
    filename字符串输入的文件名,可以是文件,协议,设备
    format_name, f字符串输入的封装格式
    stream_index, si整数输入的流索引编号
    seek_point, sp浮点数Seek输入流的时间位置
    streams, s字符串输入的多个流的流信息
    loop整数循环次数
    discontinuity时间差值支持跳动的时间戳差值
    ffmpeg -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]" output.mp4
    Ø 原始视频文件路径:input.mp4
    Ø 水印图片路径:logo.png
    Ø 水印位置:(x,y)=(10,10)<=(left,top)距离左侧、顶部各10像素;
    Ø 输出文件路径:output.mp4
    
    • 1
    • 2
    • 3
    • 4
    • 5

    overlay过滤器
    描述:前景窗口(第二输入)覆盖在背景窗口(第一输入)的指定位置。
    语法:overlay[=x:y[[:rgb={0, 1}]]
    参数 x 和 y 是可选的,默认为 0。
    参数 rgb 参数也是可选的,其值为 0 或 1,默认为 0。
    参数说明:
    x 从左上角的水平坐标,默认值为 0
    y 从左上角的垂直坐标,默认值为 0
    rgb 值为 0 表示输入颜色空间不改变,默认为 0;值为 1 表示将输入的颜色空间设置为 RGB

    参数说明
    main_w 或 W视频单帧图像宽度
    main_h 或 H视频单帧图像高度
    overlay_w水印图片的宽度
    overlay_h水印图片的高度

    对应地可以将overlay参数设置成如下值来改变水印图片的位置:

    水印图片位置overlay值
    左上角10:10
    右上角main_w-overlay_w-10:10
    左下角10:main_h-overlay_h-10
    右下角main_w-overlay_w-10:main_h-overlay_h-10

    在FFmpeg中加入图片水印有两种方式,一种是通过movie指定水印文件路径,另外一种方式是通过filter读取输入文件的流并指定为水印,这里重点介绍如何读取movie图片文件作为水印


    推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
    零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
    https://xxetb.xet.tech/s/VsFMs

  • 相关阅读:
    java基础-基础知识点
    Heuristic (computer science)
    flutter系列之:UI layout简介
    VUE中使用this.$emit()的使用进行父子组件之间传值
    正雅:你的隐形矫正方案选对了吗?
    java面向对象(二)
    AI更改视频语言的神奇网址:让郭德纲讲英语成为现实!
    性能测试:springboot-2.x vs actix-web-4.x benchmark
    SpringBoot 3.0 来啦!
    无重复字符的最长子串
  • 原文地址:https://blog.csdn.net/qq_40135848/article/details/132611165