Windows系统下用FFmpeg为视频添加含总帧数的帧编号
解决方案
要在视频中同时显示当前帧、首帧、总帧数和最后一帧信息,需要先通过ffprobe(FFmpeg自带工具)获取视频总帧数,再将该数值代入FFmpeg的drawtext滤镜参数中。以下是Windows系统下的具体操作步骤:
步骤1:获取视频总帧数
执行以下命令提取视频的总帧数:
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 inputvid.mp4
如果上述命令返回N/A,改用以下更准确(但速度稍慢)的命令:
ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 inputvid.mp4
执行后会输出一个数字,即视频的总帧数。
步骤2:编写批处理命令自动完成帧信息添加
为避免手动输入总帧数,可编写Windows批处理脚本自动计算并添加所有帧信息:
@echo off setlocal enabledelayedexpansion :: 获取总帧数 for /f %%i in ('ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 inputvid.mp4') do set total_frames=%%i :: 计算最后一帧编号(起始帧1001 + 总帧数 -1) set /a last_frame=1001 + !total_frames! - 1 :: 执行FFmpeg添加帧信息 ffmpeg -i inputvid.mp4 -vf "drawtext=fontfile=Arial.ttf: text='Frame: %%{frame_num} | First Frame: 1001 | Last Frame: !last_frame! | Total Frames: !total_frames!': start_number=1001: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: fontsize=55: box=1: boxcolor=black: boxborderw=5" -c:a copy D:\Test\outputvid.mp4
参数说明:
text='Frame: %%{frame_num} | First Frame: 1001 | Last Frame: !last_frame! | Total Frames: !total_frames!':自定义显示的文本内容,包含当前帧、首帧、最后一帧和总帧数start_number=1001:保持你设置的起始帧编号- 其余字体、位置、样式参数和原命令一致,可按需调整
注意事项
- 确保
ffprobe和ffmpeg已添加到系统环境变量,否则需要使用完整路径(如C:\ffmpeg\bin\ffprobe.exe) - 如果Arial字体不在系统默认路径,需指定完整字体路径(如
fontfile=C:\Windows\Fonts\Arial.ttf)
内容的提问来源于stack exchange,提问作者Abraham Thomas
相关产品推荐
相关产品推荐

