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

news/2024/7/10 19:21:46 标签: ffmpeg, 字体,

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

http://www.niftyadmin.cn/n/1336063.html

相关文章

[FFMPEG]2.命令使用:图片水印叠加

1.研究可行性: <1>针对实时流; <2>可实现图片水印的控制显示;2.参考 http://ffmpeg.org/ffmpeg-all.html#overlay-1 ffmpeg提供了overlay滤镜来支持图层覆盖&#xff0c;且第一个输入为"main"视频&#xff0c;第二输入覆盖层。3.参数: eof_action设置…

10 行代码解决漏斗转换计算之性能优化

大话数据计算性能优化大数据分析的性能优化&#xff0c;说道底&#xff0c;就优化一个事情&#xff1a;针对确定的一个计算任务&#xff08;数据确定&#xff0c;结果确定&#xff09;&#xff0c;以最经济的方案得到结果。 这个最经济的方案主要考量三个成本&#xff1a;时间成…

Ant是什么

Ant是什么&#xff1f; 一、总结 一句话总结&#xff1a; 编译 打包 测试 工具 xml Ant是Java的生成工具&#xff0c;是Apache的核心项目&#xff1b; Ant类似于Unix中的Make工具&#xff0c;都是用来编译、生成&#xff1b; Ant是跨平台的&#xff0c;而Make不能&#xff1b;…

[FFMPEG硬件加速]Intel® Media Server Studio

##1.安装Linxu版本Intel Media Server Studio 2017 操作系统&#xff1a;CentOS Linux release 7.2.1511 (Core)下载Intel Media Server Studio 2017&#xff0c;参考media server studio getting started guide使用install_sdk_CentOS.sh进行安装;使用 vainfo进行测试, 使用s…

初探Subject and Subscribe (Ionic4 Angular6)

类似的东西很多&#xff0c;但是不得不说大部分资料中的例子不是难以理解就是形而上学&#xff0c;所以我想分享一点自己的代码来帮助更多初学者。 起源&#xff1a;我打算做一个弹出登录&#xff0c;里面包含一个注册按钮&#xff0c;点击注册则切换到弹出注册&#xff0c;当然…

给图片加图片边框 图片边框要求为PNG格式

2019独角兽企业重金招聘Python工程师标准>>> package com.product.utils;import javax.imageio.ImageIO;import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.URL; import java.net.URLConnection;/*** 图片边框类* * auth…

[FFMPEG]选项

ffmpeg wiki ##1.帮助调试信息 -L 显示 license. -h, -?, -help, --help [arg] arg可能值: long full decoderdecoder_name encoderencoder_name demuxerdemuxer_name muxermuxer_name filterfilter_name-formats -devices -codecs -decoders -encoders -bsfs -protocols -f…

Run custom shell script '[cp] embed pods frameworks ..... errSecInternalComponent

2019独角兽企业重金招聘Python工程师标准>>> 项目添加证书后, clean 然后 archive, 一直报错: Run custom shell script [cp] embed pods frameworks ..... errSecInternalComponent 原因: 这似乎是签名机制(code signing mechanism) 的 bug, Xcode 中账号多了&am…