避坑ffmpeg直接获取视频fps不准确

最近在做视频相关的任务,调试代码发现一个非常坑的点,就是直接用ffmpeg获取fps是有很大误差的,如下:

python 复制代码
# GPT4o generated
import ffmpeg

probe = ffmpeg.probe(video_path, v="error", select_streams="v:0", show_entries="stream=nb_frames,r_frame_rate")
r_frame_rate = probe['streams'][0]['r_frame_rate']
num, denom = map(int, r_frame_rate.split('/'))
fps = num / denom

我的任务里,上述代码给的fps是30,但是用总帧数除以总时长是29.91,误差还是比较大的。正确做法就是自己做除法:

python 复制代码
# GPT4o generated
def get_video_info(video_path):
    probe = ffmpeg.probe(video_path)
    video_streams = [
        stream for stream in probe["streams"] if stream["codec_type"] == "video"
    ]
    if not video_streams:
        raise ValueError("No video stream found")
    video_stream = video_streams[0]

    # 获取帧数
    frames = int(video_stream.get("nb_frames", 0))

    # 获取时长
    duration = float(video_stream.get("duration", probe["format"].get("duration", 0.0)))

    # 获取帧率
    # r_frame_rate = video_stream.get('r_frame_rate', '0/1')
    # num, den = map(int, r_frame_rate.split('/'))
    # fps = num / den # inaccurate
    fps = frames / duration

    return frames, duration, fps

真是成也GPT,败也GPT ==

相关推荐
曼巴UE56 小时前
UE Sequencer,MediaPlay的使用经验总结
ue5·音视频·ue
敢敢のwings8 小时前
NeoVerse:用百万单目视频打开4D世界模型的大门
音视频
千殇华来11 小时前
音频产品用元器件
音视频
wangchensong12 小时前
如何保护视频不被盗版
音视频
Black蜡笔小新13 小时前
视频汇聚平台EasyCVR破解偏远地区监控难题的技术实践
音视频
纳祥科技14 小时前
硬核拆解:一款DP转3VGA+音频输出分配器,3屏同步输出
单片机·嵌入式硬件·音视频·拆解
DEMO派14 小时前
Web 视频录制方案解析,轻松实现录屏!
前端·javascript·音视频
发哥来了14 小时前
主流AI视频生成模型商用化能力评测:五大核心维度深度对比
人工智能·音视频
lcyw14 小时前
GB28181: 使用ffmpeg编码h264为ps流
ffmpeg
weixin_4624462314 小时前
使用 Python + FFmpeg 将 MP4 视频与 SRT 字幕无损合并(支持中文)
python·ffmpeg·音视频