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

相关推荐
BruceWooCoder26 分钟前
从零打造云端AI视频生成服务:基于CogVideoX和MCP协议的完整实践
人工智能·音视频
ManFresh29 分钟前
多通道音频采集与编码处理系统技术报告——从硬件选型到语音算法实现与应用优化
音视频
xiaoqi97663369030 分钟前
免费文字转语音助手 python+edge_tts+FFMPEG
python·edge·ffmpeg
500841 小时前
鸿蒙 Flutter 插件二次开发:基于开源插件(如 flutter_downloader)适配鸿蒙【实战指南】
flutter·华为·electron·开源·音视频·开源鸿蒙
vfvfb17 小时前
合并音频 声音合并 多个音频wav合并成一个
音视频·音频合并
AI巨人19 小时前
“PR插件:轻松减少50%素材寻找时间,内置丰富素材,提升视频制作效率
人工智能·音视频·语音识别
Likeadust20 小时前
视频推流平台EasyDSS无人机推流直播技术赋能城市可视化管理
音视频·无人机
AI生成未来20 小时前
港科大等提出音频驱动多人视频生成新范式 AnyTalker,解锁任意数量角色间的自然互动!
aigc·音视频·视频生成·音频驱动视频
mortimer20 小时前
Python + FFmpeg 视频自动化处理指南:从硬件加速到精确剪辑
python·ffmpeg·音视频开发
EasyDSS20 小时前
全场景视频推流利器:视频推流平台EasyDSS技术解析与行业落地实践
音视频