如何在 python 中的视频上叠加帧数

How do i overlay frame number on video in python

如何使用当前帧号为视频加水印? 我的命令是 [ 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.mp4 ]

当我在终端中 运行 这个命令时,我成功地执行了我的任务。但是当我在 IDE (pycharm) 中使用此命令时,它将 text='%{frame_num} 视为变量 IDE抛出错误,当我用 1 或 0 或任何数字替换 frame_num 时,IDE 执行我的代码并制作视频,但该视频没有水印当前帧数。

我该怎么办??

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)

只需删除前缀 f 即可获得普通文本,而不是 f-string

cmd = '''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'''

或者你必须在 f-string

中使用双 {{ }}
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'''