如何使用 FFmpeg 为实时视频添加滚动条/变化文字?

如何使用 FFmpeg 为实时视频添加滚动条/变化文字?

我可以在播放硬盘上的视频之前使用该命令为其添加文本。

ffmpeg -y -i IMG_0696.MOV -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/Windows/Fonts/cambriai.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi

现在,我想在不同的时间添加不同的文本。它应该从具有以下格式的文件中读取:例如

00:00:10:谷歌
00:00:20 :雅虎
00:00:30 :微软
00:00:60 : 亚马逊
00:05:30 :Java

有没有办法让 ffmpeg 读取文件并在指定时间添加文本?​​最后,我想在播放视频之前为其添加实时股票代码。

答案1

drawtext过滤器的源代码(从libavfilter/vf_drawtext.c源代码树中),似乎有一个textfile参数可以指定包含要绘制的字符串的文件的路径(而不是text像示例中那样设置参数)。您可能想尝试将文件路径作为传递给它textfile,并在查看视频输出时更新文件。

您还需要另一个并行运行的程序/守护程序来更新文件(它只包含要显示的当前文本),但假设您可以将其与系统时钟同步,这个程序将相当简单。


或者,您可以修改drawtext过滤器本身,使其根据当前时间码显示特定字符​​串(可用于 FFmpeg 过滤器)。虽然这需要修改过滤器的源代码并从头开始重新编译,但它也可以避免使用并行运行的单独程序/守护进程(因为每当 FFmpeg 尝试绘制字符串时都会调用您自己的代码)。

但是,假设textfile参数有效(读取:每帧更新),这可能是一种更好的方法,因为可以用 Python 等脚本语言编写一个用于更新文本文件的简单守护进程。

相关内容