我设法使用 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 过滤器文档