[FFMPEG]2.命令使用:文字水印叠加参数

1.研究可行性:

<1>针对实时流;
<2>可实现文字平滑滚动;
<3>文字大小,颜色,字体可更改;
<4>背景框颜色,透明度,大小可更改;

参考 http://ffmpeg.org/ffmpeg-all.html#drawtext-1

2.第三方库:

2.1.完善支持drawtext滤镜所需要使能的库:

--enable-libfreetype      画字库
--enable-libfribidi       字幕形状相关
--enable-libfontconfig    字体库

2.2.安装第三方库:

apt install *fontconfig*
apt install *fribidi*

3.参数:

3.1.box参数:

box:
  是否启用背景框,默认值0-不启用;
boxborderw:
  边框宽度,默认值0;
boxcolor:
  边框颜色,默认为"white"
line_spacing
  边框与边界的行距离
borderw:
  边框厚度,默认值0
bordercolor
  边框厚度填充颜色,默认值"black"
expansion
  文本内容扩展方式,可能值为  none, strftime (不推荐使用) 或 normal (默认),详细见"Text expansion"
fix_bounds
  是否采用固定坐标.若是,应该严格检查坐标,避免字幕被裁剪(其实是未显示)

3.2.text参数:

fontcolor
  字体颜色,默认为 "black"
fontcolor_expr
  扩展字体串的字体颜色,默认不设置.若设置,则将覆盖fontcolor的设置. 
  
font
  字体,默认为Sans.和fontfile选项2设置1即可
fontfile
  字体库文件.若未使能fontconfig,则必须包含该选项. 
  
draw
  This option does not exist, please see the timeline system
alpha
  透明度,值范围为0.0到1.0之间.,默认值为1.The expression accepts the same variables x, y as well. 
fontsize
  字体大小,默认值16.  
text_shaping
  若值为1,将尝试去修改文字(如:翻转),默认值为1.
ft_load_flags
  加载字体的标志,默认值为"default",更多信息参考FT_LOAD_* libfreetype 标志,可能值如下:
    default
    no_scale
    no_hinting
    render
    no_bitmap
    vertical_layout
    force_autohint
    crop_bitmap
    pedantic
    ignore_global_advance_width
    no_recurse
    ignore_transform
    monochrome
    linear_design
    no_autohint
  
shadowcolor
  文本阴影颜色,默认值是"black".
shadowx
shadowy
  阴影相对文本偏移量,它可以使正值,也可以时负值,默认是"0".
text
  绘制的文本的内容,必须是UTF-8编码,若没有指定textfile,则必须指定该选项.
textfile
  绘制的文本的内容,必须是UTF-8编码,若没有指定text,则必须指定该选项.若同时指定了text和textfile,将会出错.
reload
  若设置为1,textfile将会在每帧自动加载. 要确保自动更新,否则可能引起只读取部分,甚至失败      

3.3.其他参数:

start_number
  n/frame_num中的起始帧号,默认值"0".
tabsize
  The size in number of spaces to use for rendering the tab. 默认值是4.
timecode
  设置初始的timecode,格式为"hh:mm:ss[:;.]ff",必须指定timecode_rate选项. 
timecode_rate, rate, r
  设置timecode的帧率(只适用于timecode)
x
y
  用于指定文本绘制的相对偏移坐标,参考点为左上角边缘,默认值为"0",可能用于计算x和y的常亮和函数:
    dar
      宽高比,和(w / h) * sar类似
    hsub
    vsub
      水平和垂直色度采样值. 如"yuv422p"的hsub是 2,vsub是1.
    line_h, lh
      每行文本的高度
    main_h, h, H
    main_w, w, W
      视频输入高度和宽度 

    max_glyph_a, ascent
      用于放置一个字形从基线到最高网格坐标的距离,在Y轴上它是一个正数

    max_glyph_d, descent
      用于放置一个字形从基线到最低网格坐标的距离,在Y轴上它是一个负数

    max_glyph_h
    max_glyph_w
      字形的最大高度和宽度
    n
      输入视频的帧数,由0开始
    rand(min, max)
      返回一个介于min和max的随机值
    sar
      输入视频采样的宽高比
    t
      时间戳,单位s。未知,使用NAN表示
    text_h, th
    text_w, tw
      文本的高度和宽度
    x
    y
      文本的坐标,它们可以互相引用,如y=x/dar

3.例

3.1.

使用字体FreeSerif绘制"Test Text"
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"

3.2.

使用字体FreeSerif,字体大小24,位置为(100,50),文字颜色为黄色,边框颜色为红色,且文字和边框的透明度为20%.
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text': x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
注意:若参数列表中无空格,则可以不使用双引号.

3.3.

在视频正中显示文字:
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"

3.4.

每隔30秒,随机显示一段文字:
Show the text at a random position, switching to a new position every 30 seconds:
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"

3.5.

在视频最后一行上从左到右显示一行文字,假设文字内容(LONG_LINE)中不包含任何的换行符
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"

3.6.

从视频底部往上滚动文字行(CREDITS)
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"

3.6.

在视频中央显示单词"g".字形基线为半个视频高度.
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"

3.7.

每隔3秒显示1秒文字
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"

3.8.

使用fontconfig来设置字体. 
drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'

3.9.

打印实时编码时间
drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'

3.10.

设置文本淡入淡出:
#!/bin/sh
DS=1.0 # display start
DE=10.0 # display end
FID=1.5 # fade in duration
FOD=5 # fade out duration
ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"

3.11.

文字对齐.注意:max_glyph_a和字体大小也包含在y偏移中
drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷咪哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值