You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV VideoCapture读取HLS流CAP_PROP_FPS异常问题咨询

问题解答

问题1:生成HLS视频时保证OpenCV正确识别帧率的参数设置

你当前命令的核心问题是使用了-codec copy参数直接拷贝视频流,该模式下所有输出流的编码元数据会直接继承源文件,你额外加的-framerate 15是输入侧参数,不会修改输出流的帧率元数据,最终生成的TS文件avg_frame_rate为0/0就是典型表现。
根据你的需求分两种场景调整参数:

  • 可接受重新编码的场景(兼容性最好)
    去掉-codec copy,改用libx264转码并强制恒定帧率,参考命令如下:
    /usr/bin/ffmpeg -i data/import/ParkingLot_20211028155745_snippet.mp4 -c:v libx264 -r 15 -vsync cfr -start_number 0 -hls_time 10 -hls_list_size 0 -f hls data/fileServer/ParkingLot/ParkingLot_20211028155745_snippet.m3u8
    
    其中-r 15强制输出帧率为15,-vsync cfr开启恒定帧率模式,转码后生成的TS流avg_frame_rate会被正确赋值为15/1,OpenCV可直接读取到正确帧率。
  • 必须保留原始编码(使用流拷贝)的场景
    若源文件本身帧率就是15,不需要转码,可以添加时间基配置修正元数据:
    /usr/bin/ffmpeg -i data/import/ParkingLot_20211028155745_snippet.mp4 -codec copy -enc_time_base 1/15 -r 15 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls data/fileServer/ParkingLot/ParkingLot_20211028155745_snippet.m3u8
    
    其中-enc_time_base 1/15强制设置编码时间基为15fps对应的值,修复流元数据的帧率字段。

问题2:VideoCapture返回30FPS的原因

返回的30FPS是OpenCV的默认兜底值,不是通过HLS流属性计算得到的结果。
OpenCV的VideoCapture读取HLS流时依赖底层FFmpeg接口读取流元数据的avg_frame_rate字段,当该字段值为0/0无效时,不会主动统计总帧数和总时长计算真实帧率,会直接返回预设的默认值30FPS。

内容的提问来源于stack exchange,提问作者David Sargrad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:36:03