我怀疑这是否可能,但我正在尝试找到一些方法
- 动态呈现文本,然后
- 可选地为其添加动画(简单的从左到右移动),然后
- 将结果合成到另一个视频上。
我知道 FFMPEG 功能强大,但仅使用 FFMPEG 是否可以像这样动态生成内容?视频可以输入,但文本必须完全使用 FFMPEG 生成。
答案1
您可以使用绘图文本过滤器。
动态文本
textfile
如果使用和reload
选项,则可以在编码过程中更改文本:
textfile
包含要绘制的文本的文本文件。文本必须是 UTF-8 编码字符序列。reload
如果设置为 1,文本文件将在每一帧之前重新加载。请确保自动更新,否则可能会读取部分内容,甚至失败。
动画
文本可以使用表达式x
和y
drawtext 选项内。请参阅drawtext 文档获取常量和函数的列表。
时间线编辑
有些过滤器(例如 drawtext)支持enable
选项这意味着您可以关闭和打开过滤器。您可以通过以下方式查看哪些过滤器支持时间线:
ffmpeg -filters
例子
如果您有想要叠加文本的输入视频:
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
- 这将在 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
此处-t 5
指定输出的总长度。(如果未指定,编码将永远运行。)字体颜色设置为白色,以便文本可见。