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

相关推荐
深圳市青牛科技实业有限公司19 分钟前
GC1843|24bit 立体声差分输入 ADC,超小封装音频采集芯片
音视频
W_chuanqi35 分钟前
使用EV录屏视频噪声很大
音视频·ev录屏
开开心心就好1 小时前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio
企业数字化笔记3 小时前
视频成片怎么稳定导出?编码选择、GPU/CPU降级与媒体交付验收
java·python·ffmpeg
企业数字化笔记4 小时前
视觉智能体怎么选技术?目标检测、跟踪、分割、OpenCV和FFmpeg的职责划分
opencv·目标检测·ffmpeg
linux_cfan4 小时前
videojs v10 源代码系列解读:35 · HLS 解析器:multivariant 与 media playlist
前端·javascript·音视频
硬件学长森哥14 小时前
成像技术实例-HDR视频技术基础
图像处理·音视频
美狐美颜SDK开放平台18 小时前
Android与iOS直播APP美颜有什么区别?视频美颜SDK开发详解
android·ios·音视频·视频美颜sdk
2601_9556624619 小时前
文本转语音(TTS)技术选型与工程实践
大数据·人工智能·音视频·语音识别·媒体
贾伟康20 小时前
【HarmonyOS 7新能力|066】弱网直播优化实战:从网络感知到码率、缓冲与恢复
音视频·harmonyos·arkts·网络优化·弱网直播