使用FFmpeg添加帧数叠加层

50

我需要使用Windows版的FFmpeg在每个视频帧上覆盖帧数。

使用以下代码,我成功地使用 drawtext 过滤器叠加了时间码戳:

ffmpeg -i video.mov -vcodec r210 -vf "drawtext=fontfile=Arial.ttf: timecode='01\:00\:00\:00': r=25: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000099" -y output.mov

不过,我需要一个帧数叠加而不是时间码。任何帮助将不胜感激。

1个回答

78
你可以使用 drawtext 滤镜 来调用 nframe_num 函数:

enter image description here
循环播放每秒 5 帧的示例

示例命令:

ffmpeg -i input -vf "drawtext=fontfile=Arial.ttf: text='%{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5" -c:a copy output
  • 您可能需要提供字体文件的完整路径,例如fontfile=/usr/share/fonts/TTF/Vera.ttf
  • n/frame_num从0开始,但您可以使用start_number选项使帧计数从1开始,如示例所示。

如果需要,您可以添加其他文本,但请注意必须转义某些特殊字符:

text='Frame\: %{frame_num}'

输入图像描述

查看drawtext过滤器文档以获取更多信息。


1
可能有一个“eval”选项,您可以将其添加在一起... - rogerdpack
在Windows操作系统上,如果出现错误提示消息“无法加载字体‘Arial.ttf’”,您可以从Windows\fonts文件夹中复制该字体(例如“Arial”),并将其粘贴到图像文件所在的文件夹中。 - Thomas
4
在实际中加入fontsize=200:以便能够看到一些东西 ;) - Atcold
1
我必须明确给出我的ttf文件的完整路径,即/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf。 - user27665
1
@Zak44 尝试将 format=yuv420p 追加到 filterchain 中(用逗号连接过滤器)。但是,没有看到命令和日志,这只是一个猜测。 - llogan
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接