当前位置: 首页 > article >正文

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

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

# 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,误差还是比较大的。正确做法就是自己做除法:

# 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 ==


http://www.kler.cn/a/411183.html

相关文章:

  • 【ArcGISPro】Sentinel-2数据处理
  • Fakelocation Server服务器/专业版 ubuntu
  • Linux麦克风录音实战
  • 【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!
  • TEA加密逆向
  • 【自适应和反应式机器人控制】编程练习 1.1:计算最优轨迹 + 编程练习 1.3:基于三阶多项式的闭式时变轨迹发生器
  • CBK7运营安全
  • C语言学习 12(指针学习1)
  • 图像小波去噪与总变分去噪详解与Python实现
  • C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)
  • 【pyspark学习从入门到精通19】机器学习库_2
  • 第六届国际科技创新学术交流大会暨新能源科学与电力工程国际(NESEE 2024)
  • Scala文件读写——成绩分析
  • 【AI绘画】Midjourney进阶:色调详解(上)
  • pyshark安装使用,ubuntu:20.04
  • QT6学习第四天
  • PAT甲级-1145 Average Search Time
  • C# 结构体
  • C#基础练习61-65
  • MMCM DRP动态配置方法(超详细讲解)
  • Spring Boot 3.4 正式发布,结构化日志!
  • 【Redis篇】String类型命令详讲以及它的使用场景
  • 互联网直播/点播EasyDSS视频推拉流平台视频点播有哪些技术特点?
  • 实战项目负载均衡式在线 OJ
  • Notepad++ 替换所有数字给数字加单引号
  • VITE+VUE3+TS环境搭建