如何使用ffmpeg在视频的每个帧上显示帧数?

5
我可以帮您进行翻译。以下是需要翻译的内容:

我现在有一个测试命令,如下所示:

ffmpeg -i in.mov -vf "drawtext=fontfile=/usr/share/fonts/ttf-bitstream-vera/Vera.ttf: x=(w-tw)/2: y=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1: text=" -an -y out.mov

我希望在每个帧上显示帧编号。然而,将“text”变量设置为“n”没有帮助(它会显示n),而%n似乎是换行符号。最让我困惑的是这部分内容。
y=h-(2*lh)-n

这段代码运行良好,意味着它可以获取当前帧的正确值,并相应地将文本向上移动。


我认为目前使用 ffmpeg 是不可能实现的。我建议在 FFmpeg bug tracker 上添加一个功能请求(类型:增强,优先级:愿望)。 - llogan
@LordNeckbeard,你能推荐在Linux上实现这个特定目的的其他工具吗? - igorg
那真是太快了。FFmpeg的开发相当活跃。 - llogan
2个回答

4

好的,这个功能在ffmpeg中以前没有,但现在有了。以下是操作步骤:

...drawtext=text=%{n}:expansion=normal:fontfile=/usr/share/fonts/ttf-bitstream-vera/Vera.ttf:other_options...

请注意,扩展应该设置为normal,这不是默认设置,但根据ffmpeg文档,将来应该成为默认设置。

0
ffmpeg -i input.mp4 -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.mp4

你可以在终端或Powershell中使用此命令。 当你在IDE中使用f字符串与此命令一起使用时,你可以使用这种格式。

import os

cmd =f'''ffmpeg -i input.mp4 -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.mp4'''

print(cmd)

os.system(cmd)

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