FFmpeg转码FPS显示异常及获取每帧对应FPS值相关问题咨询
FFmpeg相关问题解答
问题1:设置输出帧率为24但控制台显示fps数值异常
你在控制台看到的fps数值是FFmpeg实时转码处理速度,代表当前每秒可以处理多少帧视频,和你设置的输出视频帧率没有关联。该数值越高代表转码性能越强,你设置的24fps是最终输出视频的每秒帧数,不受这个处理速度数值影响,只要转码命令里的帧率参数配置正确,输出文件的帧率就是你设置的24。
问题2:获取每一帧对应的帧率数值
你可以通过两种方式实现需求:
- 转码时实时打印每帧帧率:在FFmpeg命令中加入
showinfo滤镜,转码过程中会输出每帧的pts、时长等信息,通过1/帧时长即可计算得到当前帧对应的帧率,命令示例如下:
ffmpeg -i input.mp4 -vf showinfo -r 24 output.mp4
输出日志中每帧的pkt_duration_time字段即为当前帧的显示时长,单位为秒,对应帧率为1/pkt_duration_time。
- 无需转码直接批量提取所有帧的帧率数据,可使用ffprobe实现,命令示例如下:
ffprobe -v error -select_streams v:0 -show_entries frame=pkt_duration_time,coded_picture_number -of csv=p=0 input.mp4 | awk '{print "帧序号:"$2",帧率:"1/$1}'
如果处理的是恒定帧率视频,所有帧的帧率数值会保持一致;如果是可变帧率视频,每一帧的帧率会根据实际时长动态变化。
内容的提问来源于stack exchange,提问作者zhin dins
相关产品推荐
相关产品推荐

