学习FFmpeg的drawtext filter在视频上动态叠加文字并显示时间码、帧分辨率、水印等信息。另外,让我们学习如何配置字体、字体大小、位置、背景颜色、对齐方式、多行等. 使用 FFmpeg 的 drawtext 过滤器。
第 0 步:确保您的 FFmpeg 是使用 libfreetype 编译的
为了使用 drawtext
,你需要配置 FFmpeg --enable-libfreetype
。根据文档,如果需要,您还需要以下选项,
- 启用默认字体后备和你需要配置 FFmpeg 的字体选项
--enable-libfontconfig
。 - 启用 text_shaping 选项,您需要使用
--enable-libfribidi
.
drawtext 选项的完整列表
drawtext
可以在 此处访问过滤器选项的完整列表 。我在这里解释太多了,但是,如果您有任何问题,那是您应该首先参考的地方。
在本文中,我将介绍几个常见的用例,这些用例应该使这些概念易于理解。
使用 drawtext 过滤器在视频上显示文本
这是命令行和选项的解释
ffmpeg -i inputClip.mp4 -vf "drawtext=text='My text starting at 640x360':x=640:y=360:fontsize=24:fontcolor=white" -c:a copy output.mp4
这里,
inputClip.mp4
是您要在其上显示文本的输入视频;并且输出(包含文本)将存储在output.mp4
- 没有音频重新编码,如
-c:a copy
- 我们使用命令指示的 drawtext 过滤器
-vf "drawtext=........"
text='My text starting at 640x360'
是将在视频上显示的文本(您可以将其作为您的名字来为视频加水印,对吧?)- 文本的位置
x=640:y=360
表示 x 和 y 坐标为640px
和360px
。另外,作为旁注,视频的分辨率为1280x720
.- 字体大小是
24
- 字体颜色是
white
让我们看看输出结果如何,好吗?
更好的方法是根据您在屏幕上打印的文本的长度来偏移文本。
有困惑?
如果您查看上图,您会发现它从视频的中心开始并向右延伸。
如果你想让文本本身居中,那么你可以在告诉渲染文本的 drawtext
位置时减去渲染文本的高度和宽度。
就是这样。您使用该命令 x=(w-text_w)/2:y=(h-text_h)/2
,它将使文本居中。这是我们的新命令行 –
ffmpeg -i inputClip.mp4 -vf "drawtext=text='Centered Text':x=(w-text_w)/2:y=(h-text_h)/2:fontsize=24:fontcolor=white" -c:a copy output.mp4
现在,文字看起来很漂亮
drawtext
太棒了——您现在知道如何使用 FFmpeg 的过滤器将文本叠加到视频上了 。你认为你可以添加自己的水印或版权吗?让我们试试
使用 FFmpeg 的 drawtext 过滤器添加版权声明或文本水印
让我们修改命令如下,以表明我的名字和版权符号。
ffmpeg -i inputClip.mp4 -vf "drawtext=text='© Krishna':x=640:y=360:fontsize=24:fontcolor=white" -c:a copy output.mp4
这会产生这样的输出——看起来不错吧?您可以使用 x
和 y
坐标来按照您想要的方式对齐文本。
使用 FFmpeg 的 drawtext 过滤器添加带有背景颜色的文本
要添加背景颜色,我们需要
ffmpeg -i inputClip.mp4 -vf "drawtext=text='© Krishna':x=(1100-text_w):y=(600-text_h):fontsize=32:fontcolor=black:box=1:boxcolor=white@0.5: boxborderw=5" -c:a copy output.mp4
这里的新命令是 –
box
:这是1
(启用)或(禁用)
boxcolor: white@0.5
表示具有 50% 不透明度的白色框。boxborderw
是盒子边框的宽度,边框颜色取自boxcolor
.
你有它,有背景的文字。在此示例中,我将文本的颜色切换为黑色,以便它与浅色背景边界框形成鲜明对比(反过来又与深色背景形成鲜明对比。)
使用 FFmpeg 的 drawtext 过滤器显示时间码/时间戳
这是 drawtext
过滤器的一个非常有用的应用程序,用于演示低延迟应用程序或视觉质量测试,以便人们准确地知道每次时间戳/时间码是什么。
ffmpeg -i inputClip.mp4 -vf "drawtext=text='timestamp: %{pts : hms}': x=500: y=500: fontsize=32:fontcolor=yellow@0.9: box=1: boxcolor=black@0.6" -c:a copy output.mp4
这使用 timestamp
和 选项使用 格式说明符pts
以小时:分钟:秒格式显示时间 。hms
在我看来,符号和格式很复杂!因此,在正确格式化显示器之前,可能需要进行大量试验和错误。
这是相同的命令,但使用 flt
选项提供微秒时间精度!花式🙂
ffmpeg -i inputClip.mp4 -vf "drawtext=text='timestamp: %{pts : flt}': x=500: y=500: fontsize=32:fontcolor=yellow@0.9: box=1: boxcolor=black@0.6" -c:a copy output.mp4
使用 FFmpeg 的 drawtext 过滤器显示电影演职员表
最后,让我们学习如何使用绘图文本过滤器显示电影的演职员表。以下是您需要了解的两个主要概念。
- 提供大量文本:您不能通过命令行执行此操作,因此,您需要阅读包含文本的文本文件。您可以使用该
textfile
选项阅读它。 y
并且,使用文本位置指定滚动速度 。在这里,您可以提供方程式而不是常数。您首先通过 FFmpeg 告诉 y 位置是h - 80*t
这样的,每次时间值增加,时间值h - 80*t*
减少,文本显示得更高。说得通?
提示:更改 80
为 100
或 120
并查看对滚动速度的影响。
ffmpeg -i inputClip.mp4 -vf "drawtext=textfile=credits.txt: x=200: y=h-80*t: fontsize=36:fontcolor=yellow@0.9: box=1: boxcolor=black@0.6" -c:a copy outputCredits.mp4
本教程介绍了如何使用 FFmpeg 的 drawtext
过滤器在您的视频上生成动态叠加层。这是一个非常通用且方便的工具,可用于在视频上叠加文本、时间码、出处和版权声明。
作者简介:Krishna Rao Vijayanagar 博士,OTTVerse 的创始人。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。