FFmpeg drawtext 过滤器:用于插入动态覆盖、滚动文本和时间戳

学习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

让我们看看输出结果如何,好吗?

ffmpeg-drawtext-filter-dynamic-overlays-timecode-scrolling-text-credits

更好的方法是根据您在屏幕上打印的文本的长度来偏移文本。

有困惑?

如果您查看上图,您会发现它从视频的中心开始并向右延伸。

如果你想让文本本身居中,那么你可以在告诉渲染文本的 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

现在,文字看起来很漂亮

ffmpeg-drawtext-filter-dynamic-overlays-timecode-scrolling-text-credits

drawtext 太棒了——您现在知道如何使用 FFmpeg 的过滤器将文本叠加到视频上了 。你认为你可以添加自己的水印或版权吗?让我们试试

让我们修改命令如下,以表明我的名字和版权符号。

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-filter-dynamic-overlays-timecode-scrolling-text-credits

使用 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-filter-dynamic-overlays-timecode-scrolling-text-credits

使用 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-filter-dynamic-overlays-timecode-scrolling-text-credits

使用 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 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论