避坑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 ==

相关推荐
前端达人5 小时前
原生组件案例 04:5 个 div 打造「音频波形动效」
音视频
Android系统攻城狮7 小时前
Android16音频之设置是否允许录音setAllowedCapturePolicy:用法实例(一百)
音视频·android16·音频进阶·是否允许录音
好多渔鱼好多15 小时前
【音视频】AI自适应均衡器的调节精度提升方法
人工智能·音视频
昨日之日200615 小时前
InfiniteTalk V2版 - 声音驱动图片生成高度逼真的说话/唱歌视频 支持50系显卡 ComfyUI+WebUI 一键整合包下载
人工智能·深度学习·音视频
提娜米苏15 小时前
唇语识别中的音频信号
音视频
汗流浃背了吧,老弟!15 小时前
Langchian检索YouTube视频字幕
python·音视频
TG:@yunlaoda360 云老大15 小时前
AI 电影制作迈入新阶段:谷歌云Veo 3.1模型发布,实现音频全覆盖与精细化创意剪辑
人工智能·云计算·音视频·googlecloud
先知后行。18 小时前
音视频项目框架
音视频
EasyCVR20 小时前
视频汇聚平台EasyCVR如何构建“可视、可析、可管”的智慧环保天网
音视频
努力还债的学术吗喽1 天前
ffmpeg离线安装到服务器:解决conda/sudo/无法安装的通用方案
服务器·ffmpeg·conda