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

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

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

# GPT4o generated
import ffmpegprobe = 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 # inaccuratefps = frames / durationreturn frames, duration, fps

真是成也GPT,败也GPT ==

http://www.lryc.cn/news/491840.html

相关文章:

  • 大数据新视界 -- 大数据大厂之 Hive 函数库:丰富函数助力数据处理(上)(11/ 30)
  • 深入解析 Django 中数据删除的最佳实践:以动态管理镜像版本为例
  • 【java】sdkman-java多环境切换工具
  • 11.25c++继承、多态
  • STM32F103外部中断配置
  • 阿里电商大整合,驶向价值竞争新航道
  • 等保测评在云计算方面的应用讲解
  • QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)
  • SpringBoot(三十九)SpringBoot集成RabbitMQ实现流量削峰添谷
  • 前端 Vue 3 后端 Node.js 和Express 结合cursor常见提示词结构
  • 类和对象(下):点亮编程星河的类与对象进阶之光
  • 42.接雨水
  • 使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费
  • Ubuntu安装不同版本的opencv,并任意切换使用
  • 突破内存限制:Mac Mini M2 服务器化实践指南
  • 【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法
  • 【在Linux世界中追寻伟大的One Piece】多线程(二)
  • flink学习(8)——窗口函数
  • 「实战应用」如何用图表控件LightningChart .NET实现散点图?(一)
  • 鸿蒙Native使用Demo
  • 29.UE5蓝图的网络通讯,多人自定义事件,变量同步
  • Scala—列表(可变ListBuffer、不可变List)用法详解
  • 【论文复现】偏标记学习+图像分类
  • C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
  • AIGC-----AIGC在虚拟现实中的应用前景
  • Django 路由层
  • 《硬件架构的艺术》笔记(八):消抖技术
  • Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
  • 【算法】连通块问题(C/C++)
  • 如何选择黑白相机和彩色相机