使用ffmpeg导出帧并在帧内打印播放时间(含毫秒)

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

ffmpeg 导出帧,在帧内打印播放时间,这个时间包含具体的播放毫秒值

回答:

使用 ffmpeg 导出视频帧并在帧内打印播放时间(包括具体的毫秒值)可以通过以下步骤实现。我们将使用 ffmpeg 的滤镜功能来添加时间戳。

以下是一个示例命令:

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf: text='%{pts\:hms}': x=10: y=10: fontsize=24: fontcolor=white" -vsync vfr frame_%04d.png

解释:

  • -i input.mp4:指定输入视频文件。
  • -vf "drawtext=...":使用 drawtext 滤镜在帧上绘制文本。
    • fontfile=/path/to/font.ttf:指定字体文件的路径。你需要提供一个有效的字体文件路径。
    • text='%{pts\:hms}':在文本中插入时间戳。%{pts\:hms} 格式化为 小时:分钟:秒.毫秒
    • x=10: y=10:指定文本在帧中的位置(左上角,距离边缘 10 像素)。
    • fontsize=24:指定字体大小。
    • fontcolor=white:指定字体颜色。
  • -vsync vfr:使用可变帧率同步。
  • frame_%04d.png:输出帧文件名格式。%04d 表示帧编号,输出文件名将是 frame_0001.pngframe_0002.png 等。

确保你有一个有效的字体文件路径。如果你没有特定的字体文件,可���使用系统默认字体。例如,在 Linux 上,你可以使用 /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf

完整示例(假设使用 DejaVuSans 字体):

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: text='%{pts\:hms}': x=10: y=10: fontsize=24: fontcolor=white" -vsync vfr frame_%04d.png

运行此命令后,ffmpeg 将从 input.mp4 中提取帧,并在每个帧的左上角打印播放时间(包括毫秒值),然后将帧保存为 frame_0001.pngframe_0002.png 等文件。