单独使用 FFMPEG 创建包含动画文本的视频

Bac*_*alo 11 ffmpeg

我怀疑这是可能的,但我试图找到某种方法

  1. 动态呈现文本,然后
  2. 可选择为其设置动画(简单的从左到右移动),然后
  3. 将结果合成在另一个视频之上。

我知道 FFMPEG 很强大,但是是否可以单独使用 FFMPEG 动态生成这样的内容?视频将被输入,但文本必须完全使用 FFMPEG 生成。

llo*_*gan 11

您可以使用drawtext 过滤器

动态文本

如果您使用textfilereload选项,可以在编码期间更改文本:

  • textfile包含要绘制的文本的文本文件。文本必须是 UTF-8 编码字符序列。

  • reload如果设置为 1,文本文件将在每一帧之前重新加载。确保以原子方式更新它,否则可能会部分读取,甚至失败。

动画

文本,可使用走动表达的范围内x,并yDrawText的选项。有关常量和函数的列表,请参阅drawtext 文档

时间线编辑

某些过滤器(例如 drawtext)支持该enable选项,这意味着您可以关闭和打开过滤器。您可以通过以下方式查看哪些过滤器支持时间线:

ffmpeg -filters
Run Code Online (Sandbox Code Playgroud)

例子

如果您有想要用文本覆盖的输入视频:

ffmpeg -i input -vf "drawtext=enable='gte(t,3)':fontfile=Vera.ttf:textfile=text.txt:reload=1:y=h-line_h-10:x=(W/tw)*n" output
Run Code Online (Sandbox Code Playgroud)
  • 这将在 3 秒后启用 drawtext 过滤器
  • 每次text.txt更新文本都会改变
  • 文字会在屏幕上从左向右移动(我很讨厌这些表达,但你会明白的)

如果您没有输入视频并且只想在黑色背景上生成文本:

ffmpeg -f lavfi -i "color=color=black, drawtext=enable='gte(t,3)':fontfile=Vera.ttf:fontcolor=white:textfile=text.txt:reload=1:y=h-line_h-10:x=(W/tw)*n" -t 5 output
Run Code Online (Sandbox Code Playgroud)

在这里,-t 5指定输出的总长度。(如果未指定,编码将永远运行。)字体颜色设置为白色,以便文本可见。

  • @manish1706 将您的文本放在引号中,您应该能够添加您想要的任何字符。如果你有很多文本,你也可以使用 `textfile` 选项而不是 `text` 从文件中读取它。见 http://ffmpeg.org/ffmpeg-all.html#drawtext-1 (2认同)