使用 ffmpeg 覆盖帧号,从 1 开始

使用 ffmpeg 覆盖帧号,从 1 开始

我设法使用 ffmpeg 对视频进行编码,并使用 drawtext 过滤器将每一帧与帧号叠加。

我的问题是使用“text=%{n}”选项导致第一帧为 0,这不是我需要的。

然后我使用代码“text = %{expr \:n + 1}”,第一帧现在是 1,但它打印出 1.000000

有谁知道如何删除小数点后面的数字?

答案1

遇到了同样的问题,花了一些时间才找到答案。文档

expr_int_format, eif 评估表达式的值并以格式化的整数形式输出。

第一个参数是要求值的表达式,就像 expr 函数一样。第二个参数指定输出格式。允许的值为“x”、“X”、“d”和“u”。它们的处理方式与 printf 函数中的处理方式完全相同。第三个参数是可选的,用于设置输出所占的位置数。它可用于从左侧添加零填充。

我在这里使用 eg:text=' == %{eif\:33\:x} =='运行良好。请注意,您需要多少转义(多少个反斜杠)与您的环境有关

因此,对于你的情况,这是可行的:

"text=%{eif\:n+1\:d}"

答案2

首先,将视频分成单独的帧,然后使用多图像调整器.NET将帧编号放入每一帧中。然后,将图像重新组合成第二个视频序列。

答案3

您可以使用参数起始编号并将其设置为1,完整命令如下:

ffmpeg -i /path/to/video.mov -qscale:v 3 -vf "drawtext=fontsize=100:fontfile=/Library/Fonts/Arial.ttf: text='%{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000099" /path/to/frames/%d.jpg

请参阅以下链接以了解更多信息: FFmpeg 过滤器文档

相关内容