终于完工! ffmpeg 视频滤镜:添加文本-drawtext

滤镜描述

drawtext

官网链接 =》 FFmpeg Filters Documentation 

这个滤镜可以给视频添加上文本,可以给文本加边框、颜色、阴影。注意不是字幕功能,因为这个滤镜不能精准的控制开始和结束的时间。

滤镜使用

参数
   fontfile          <string>     ..FV....... set font file
   text              <string>     ..FV.....T. set text
   textfile          <string>     ..FV....... set text file
   fontcolor         <color>      ..FV.....T. set foreground color (default "black")
   fontcolor_expr    <string>     ..FV....... set foreground color expression (default "")
   boxcolor          <color>      ..FV.....T. set box color (default "white")
   bordercolor       <color>      ..FV.....T. set border color (default "black")
   shadowcolor       <color>      ..FV.....T. set shadow color (default "black")
   box               <boolean>    ..FV.....T. set box (default false)
   boxborderw        <string>     ..FV.....T. set box borders width (default "0")
   line_spacing      <int>        ..FV.....T. set line spacing in pixels (from INT_MIN to INT_MAX) (default 0)
   fontsize          <string>     ..FV.....T. set font size
   text_align        <flags>      ..FV.....T. set text alignment (default 0)
     left                         ..FV.....T.
     L                            ..FV.....T.
     right                        ..FV.....T.
     R                            ..FV.....T.
     center                       ..FV.....T.
     C                            ..FV.....T.
     top                          ..FV.....T.
     T                            ..FV.....T.
     bottom                       ..FV.....T.
     B                            ..FV.....T.
     middle                       ..FV.....T.
     M                            ..FV.....T.
   x                 <string>     ..FV.....T. set x expression (default "0")
   y                 <string>     ..FV.....T. set y expression (default "0")
   boxw              <int>        ..FV.....T. set box width (from 0 to INT_MAX) (default 0)
   boxh              <int>        ..FV.....T. set box height (from 0 to INT_MAX) (default 0)
   shadowx           <int>        ..FV.....T. set shadow x offset (from INT_MIN to INT_MAX) (default 0)
   shadowy           <int>        ..FV.....T. set shadow y offset (from INT_MIN to INT_MAX) (default 0)
   borderw           <int>        ..FV.....T. set border width (from INT_MIN to INT_MAX) (default 0)
   tabsize           <int>        ..FV.....T. set tab size (from 0 to INT_MAX) (default 4)
   basetime          <int64>      ..FV....... set base time (from I64_MIN to I64_MAX) (default I64_MIN)
   font              <string>     ..FV....... Font name (default "Sans")
   expansion         <int>        ..FV....... set the expansion mode (from 0 to 2) (default normal)
     none            0            ..FV....... set no expansion
     normal          1            ..FV....... set normal expansion
     strftime        2            ..FV....... set strftime expansion (deprecated)
   y_align           <int>        ..FV.....T. set the y alignment (from 0 to 2) (default text)
     text            0            ..FV....... y is referred to the top of the first text line
     baseline        1            ..FV....... y is referred to the baseline of the first line
     font            2            ..FV....... y is referred to the font defined line metrics
   timecode          <string>     ..FV....... set initial timecode
   tc24hmax          <boolean>    ..FV....... set 24 hours max (timecode only) (default false)
   timecode_rate     <rational>   ..FV....... set rate (timecode only) (from 0 to INT_MAX) (default 0/1)
   r                 <rational>   ..FV....... set rate (timecode only) (from 0 to INT_MAX) (default 0/1)
   rate              <rational>   ..FV....... set rate (timecode only) (from 0 to INT_MAX) (default 0/1)
   reload            <int>        ..FV....... reload text file at specified frame interval (from 0 to INT_MAX) (default 0)
   alpha             <string>     ..FV.....T. apply alpha while rendering (default "1")
   fix_bounds        <boolean>    ..FV....... check and fix text coords to avoid clipping (default false)
   start_number      <int>        ..FV....... start frame number for n/frame_num variable (from 0 to INT_MAX) (default 0)
   text_source       <string>     ..FV....... the source of text
   text_shaping      <boolean>    ..FV....... attempt to shape text before drawing (default true)
   ft_load_flags     <flags>      ..FV....... set font loading flags for libfreetype (default 0)
     default                      ..FV.......
     no_scale                     ..FV.......
     no_hinting                   ..FV.......
     render                       ..FV.......
     no_bitmap                    ..FV.......
     vertical_layout              ..FV.......
     force_autohint               ..FV.......
     crop_bitmap                  ..FV.......
     pedantic                     ..FV.......
     ignore_global_advance_width              ..FV.......
     no_recurse                   ..FV.......
     ignore_transform              ..FV.......
     monochrome                   ..FV.......
     linear_design                ..FV.......
     no_autohint                  ..FV.......
box是不是给文字添加背景1 (enable) 0(disable).
boxborderw设置上下边框的宽度,举个例子 boxborderw=10|20|30|40,分别是上边框|右边框|底边框|左边框
boxcolor背景的颜色,可以输入颜色名字(ffmpeg -colors),也可以输入颜色值(比如#afeeee)
y_align想象一下画面就是一个二维坐标系,当把文字放到坐标系的时候,文字的那一部分与坐标点对齐。

text-最高处与坐标对齐

baseline-文字的中间与坐标对齐

borderw文字的描边的宽度
bordercolor文字描边的颜色
expansion文本扩展功能,现在就是normal和none两个值了,默认是normal,意思是你可以在text中使用函数normal支持的函数参考toc-Text-expansion
fix_bounds当你的文本要超出视频的左边的时候,这个值打开的时候,会修复超出边界问题,一直保持着不超出视频的左边
fontcolor字体的颜色
fontcolor_expr颜色的表达式,可以实现动态颜色
font字体名字
fontfile字体文件的路径
fontsize字体大小
shadowcolor阴影的颜色
shadowx、shadowy阴影的位置
start_number设置变量的n的开始数字
text要写的文字
textfile文字可以保存在文件中,这里写文件的路径
reload经过多少帧重新加载一次textfile

我测试了一下boxh boxw line_spacing text_align,感觉他们没有起作用,不知道啥原因(有清楚的大神请给留个言)

案例

原图

ffmpeg  -y -i ffm_media/wonder_girls.jpg  -filter_complex "drawtext=textfile='ffm_media/drawtext.txt':fontsize=80:x=(w-text_w)/2:y=h-text_h+5:fontcolor=white" result/drawtext/drawtext_test_002.jpg

设置了字体,文本保存在了文件中了

ffmpeg  -y -i ffm_media/wonder_girls.jpg  -filter_complex "drawtext=text='hello wonder girls':fontsize=80:x=(w-text_w)/2:y=h-text_h:fontcolor=white:borderw=5:bordercolor=pink" result/drawtext/drawtext_test_005.jpg

设置了字体的描边

 

ffmpeg  -y -i ffm_media/wonder_girls.jpg  -filter_complex "drawtext=text='hello wonder girls':fontsize=80:x=(w-text_w)/2:y=h-text_h:fontcolor=white:borderw=5:shadowcolor=green:shadowx=5:shadowy=7" result/drawtext/drawtext_test_007.jpg

设置了字体的阴影

ffmpeg  -y -i ffm_media/wonder_girls.jpg  -filter_complex "drawtext=text='hello wonder  girls':fontsize=80:x=(w-text_w)/2:y=h-text_h-50:fontcolor=white:box=1:boxborderw=10|20|30|40:boxcolor=blue" result/drawtext/drawtext_test_009.jpg

设置了背景

ffmpeg  -y -i ffm_media/short_dancer.mp4 -ss 3 -filter_complex "drawtext=text='%{localtime} frame %{n}':fontsize=40:x=(w-text_w)/2:y=h-text_h-n:fontcolor=white:box=1:boxborderw=10|20|30|40:boxcolor=blue:y_align=baseline" result/drawtext/drawtext_dancer_005.mp4

设置动态移动的文字,这里主要是纵向移动,是因为在y变量中应用了 n(当前的帧数) 这个变量

ffmpeg  -y -i ffm_media/short_dancer.mp4  -filter_complex "drawtext=text='%{localtime} frame %{n}':fontsize=40:x=(w-text_w)/2:y=h-text_h-n:fontcolor_expr='%{eif\\:if(between(t\, 0\, 3)\, 0xFFFFFF\, 0xFFB6C1) \\: x}':box=1:boxborderw=10|20|30|40:boxcolor=blue" result/drawtext/drawtext_dancer_006.mp4

 动态改变颜色的,这个是根据时间判断的,3秒前是一个颜色,3秒以后是另一个颜色。

## 祝你好运
 
hope("大神多多指点")
topic("有问题可以交流呀")
concat("球球QUN", "61480", "9646")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【模型学习之路】手写+分析Transformer

手写分析transformer 目录 前言 positional encoding 注意力机制 多头注意力 高维度乘法 多头注意力机制 多头注意力层的实现 Encoder FeedForwardNet EncoderLayer Encoder Decoder DecoderLayer Decoder 组装Trasformer! 后话 测试一下 mask 前言 Attenti…

Z 检验和 T 检验之间的区别

目录 一、说明 二、什么是假设检验&#xff1f; 三、假设检验基础 3.1 假设检验的基本概念 3.2 、执行假设验证的步骤 3.3 临界值、P 值 3.4 方向假设 3.5 非方向假设检验s 四、什么是 Z 检验统计量&#xff1f; 五、Z 检验示例 5.1 单样本 Z 检验 5.2 双样本 Z 检…

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到…

大模型是怎么训练的 微调vsRAG

模型训练的关键 在理解提示工程、RAG和微调时&#xff0c;我们首先需明白大模型的训练依托于海量多样数据&#xff0c;使其具备跨领域的综合能力。以一个具体案例为例&#xff0c;当面对问题解答失败的情况时&#xff0c;需从三方面分析&#xff1a;一、提问者表述不清&#x…

SAP ABAP开发学习——第一代增强(包含增强演示)

​​​​​​SAP ABAP开发学习——第二代增强&#xff08;包含增强演示&#xff09;-CSDN博客 SAP ABAP开发学习——第三代增强&#xff08;BADI)-CSDN博客 概念 第一代增强(增强嵌入标准程序中) 第一代出口-User exit 以SD用户出口为例 SD及MM较多的程序都是基于源码控制来…

基础IO -- 标准错误输出stderr

目录 1&#xff09;为什么要有 fd 为 2 的 stderr 2&#xff09;使2和1重定向到一个文件中 这里我们谈一下以前只是了解过的stderr 通过两段代码&#xff0c;显然&#xff0c;我们可以知道两个FILE*都是指向显示器的 对于重定向&#xff0c;只有stdout才会将打印的数据重定向…

Cursor 写一个 Flutter Unsplash 壁纸工具 | 从零开始

Cursor 写一个 Flutter Unsplash 壁纸工具 | 从零开始 视频 https://space.bilibili.com/404904528/channel/collectiondetail?sid4106380 https://www.youtube.com/watch?v-ecvMPs5vN4&listPL274L1n86T835KIPMBSwWMy1At6XCJDVR 前言 原文 用Cursor和Flutter构建动态图…

十分钟Linux中的epoll机制

epoll机制 epoll是Linux内核提供的一种高效I/O事件通知机制&#xff0c;用于处理大量文件描述符的I/O操作。它适合高并发场景&#xff0c;如网络服务器、实时数据处理等&#xff0c;是select和poll的高效替代方案。 1. epoll的工作原理 epoll通过内核中的事件通知接口和文件…

【每日刷题】Day147

【每日刷题】Day147 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 神奇数_牛客笔试题_牛客网 2. DNA序列__牛客网 3. I-十字爆破_牛客小白月赛25 1. 神奇数_牛客笔…

干部出国境管理系统:规范管理,确保安全

在全球化的时代背景下&#xff0c;干部因工作需要或个人原因出国境的情况日益增多。为了加强对干部出国境的管理&#xff0c;确保干部出国境活动规范、有序、安全&#xff0c;干部出国境管理系统应运而生。 一、干部出国境管理系统的重要性 规范管理流程 干部出国境管理系统…

基于Qt的多线程并行和循序运行实验Demo

致谢&#xff08;Acknowledgement&#xff09;&#xff1a; 感谢Youtube博主Qt With Ketan与KDAB精心录制的Qt多线程处理应用教程&#xff0c;感谢Bilibili博主爱编程的大丙对Qt多线程与线程池内容深入浅出的讲解。 一、计算机线程相关概念 线程概念[1]&#xff1a; 在计算机科…

PyCharm专业版设置远程开发环境

以下是在PyCharm中设置远程开发环境的详细步骤&#xff1a; 没有专业版的在并夕夕上买 准备工作 确保本地已安装PyCharm专业版&#xff0c;因为社区版通常不支持远程开发功能。在远程服务器上安装好所需的Python版本以及相关的开发包和库&#xff0c;并且服务器需要开启SSH服务…

MySQL基础概念——针对实习面试

目录 MySQL基础什么是关系型数据库&#xff1f;什么是SQL&#xff1f;什么是ACID属性&#xff1f;什么是MySQL&#xff1f;MySQL为什么流行&#xff08;它的优点&#xff09;&#xff1f; 30秒读全文 MySQL基础 什么是关系型数据库&#xff1f; 关系型数据库&#xff08;Relat…

深入布局- grid布局

属性使用案例&#xff1a; 一、display 通过给元素设置&#xff1a;display:grid | inline-grid&#xff0c;可以让一个元素变成网格布局元素, display: grid&#xff1a;表示把元素定义为块级网格元素&#xff0c;单独占一行;&#xff08;如下图:&#xff09; display: inlin…

【力扣打卡系列】反转链表

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day12 反转链表 题目描述 解题思路 最开始的头节点为空&#xff0c;可以赋值为nil从前往后依次逆转下一个节点的指向即可 代码参考 /*** Definition for singly-linked list.* type ListNode s…

超越YOLO11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务

D-FINE 在 COCO 数据集上以 78 FPS 的速度取得了 59.3% 的平均精度 (AP)&#xff0c;远超 YOLOv10、YOLO11、RT-DETR v1/v2/v3 及 LW-DETR 等竞争对手&#xff0c;成为实时目标检测领域新的领跑者。目前&#xff0c;D-FINE 的所有代码、权重以及工具已开源&#xff0c;包含了详…

已解决:VS2022一直显示编译中但无法运行的情况

本问题已得到解决&#xff0c;请看以下小结&#xff1a; 关于《VS2022一直显示编译中但无法运行的情况》的解决方案 记录备注报错时间2024年报错版本VS2022报错复现突然VS2022不能启动&#xff0c;一直显示编译中&#xff0c;取消重试无效&#xff0c;重新生成解决方案无效报错…

UML图之对象图详解

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 零、什么是对象图 对象图&#xff08;Object Diagram&#xff09;是UML中一种重要的静态结构图&#xff0c;它用于表示在特定时间点上系统中的对…

微信支付宝小程序SEO优化的四大策略

在竞争激烈的小程序市场中&#xff0c;高搜索排名意味着更多的曝光机会和潜在用户。SEO即搜索引擎优化&#xff0c;对于小程序而言&#xff0c;主要指的是在微信小程序商店中提高搜索排名&#xff0c;从而增加曝光度和用户访问量。有助于小程序脱颖而出&#xff0c;提升品牌知名…

Java面试经典 150 题.P27. 移除元素(002)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeElement(int[] nums, int…