[FFMPEG-AVFILTERS]文字
来源:互联网 发布:看淘宝 编辑:程序博客网 时间:2024/06/16 19:05
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: 边框厚度,默认值0bordercolor 边框厚度填充颜色,默认值"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 systemalpha 透明度,值范围为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_autohintshadowcolor 文本阴影颜色,默认值是"black".shadowxshadowy 阴影相对文本偏移量,它可以使正值,也可以时负值,默认是"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)xy 用于指定文本绘制的相对偏移坐标,参考点为左上角边缘,默认值为"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/shDS=1.0 # display startDE=10.0 # display endFID=1.5 # fade in durationFOD=5 # fade out durationffplay -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
4.结论
ffmpeg的drawtext滤镜能很好的满足我的需求,下一步就是研究如何编写代码
0 0
- [FFMPEG-AVFILTERS]文字
- [FFMPEG-AVFILTERS]水印
- [FFMPEG-AVFILTERS]多个同时使用
- php使用ffmpeg向视频中添加文字字幕
- FFMPEG添加文字中文显示乱码的问题
- FFmpeg
- FFMPEG
- ffmpeg
- ffmpeg
- ffmpeg
- FFmpeg
- ffmpeg
- ffmpeg
- ffmpeg
- ffmpeg
- FFmpeg
- ffmpeg
- ffmpeg
- nignx配置 underscore的排序函数 sortBy
- Julia实现任意时间周期转换,比如Tick转5分钟周期
- 数据规整化
- android_69_camera_videoCapture
- static关键字
- [FFMPEG-AVFILTERS]文字
- CSS3弹性布局内容对齐(justify-content)属性使用详解
- 战略管理概述
- 中英文字体对照表
- maven 为何要模块划分-聚合/继承
- 大一BFS入门
- ACM测试---5-11 抓老鼠啊~亏了还是赚了? (20分)
- 数据库中DDL、DML、DCL和TCP概念
- 110个oracle常用函数总结