![如何使用 FFmpeg 为实时视频添加滚动条/变化文字?](https://linux22.com/image/1366209/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20FFmpeg%20%E4%B8%BA%E5%AE%9E%E6%97%B6%E8%A7%86%E9%A2%91%E6%B7%BB%E5%8A%A0%E6%BB%9A%E5%8A%A8%E6%9D%A1%2F%E5%8F%98%E5%8C%96%E6%96%87%E5%AD%97%EF%BC%9F.png)
我可以在播放硬盘上的视频之前使用该命令为其添加文本。
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 等脚本语言编写一个用于更新文本文件的简单守护进程。