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

相关推荐
ujainu小9 小时前
Flutter 视频播放全攻略:video_player 2.10.1 插件全平台集成与实战
flutter·音视频
AI大模型学徒9 小时前
腾讯云视频通话Demo跑通教程
音视频·腾讯云
却道天凉_好个秋12 小时前
音视频学习(七十五):视频压缩:量化
音视频·视频压缩
扶尔魔ocy12 小时前
【QT window】multimedia+ffmpeg实现(PCM和MP4)录音功能
qt·ffmpeg·pcm
却道天凉_好个秋13 小时前
音视频学习(七十六):熵编码
音视频·视频压缩
程序猿追14 小时前
在昇腾NPU上实战部署LongCat-Video:从环境配置到长视频生成的完整指南
python·大模型·华为云·音视频
Yutengii14 小时前
小红书的视频怎么下载到本地,实测6款下载工具
音视频
非凡ghost14 小时前
Topaz Video(人工智能视频增强软件)
人工智能·windows·学习·音视频·软件需求
zbguolei14 小时前
Windows平台下SRS实时视频服务器的搭建
服务器·windows·音视频
骄傲的心别枯萎14 小时前
RV1126 NO.58:ROCKX+RV1126人脸识别推流项目之读取人脸数据库并保存到map
linux·数据库·计算机视觉·音视频·rv1126