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

如何用Python获取HEVC视频时长?OpenCV代码无法获取帧率帧数求助

解决OpenCV无法读取HEVC视频帧率/帧数的问题

你的问题大概率是因为OpenCV默认编译版本未包含HEVC(H.265)解码器,导致无法正确解析视频元数据。下面给你几个可行的解决思路:

1. 先排查视频是否成功打开

先修改你的代码,增加视频打开状态的检查,确认是不是根本没读进视频:

import cv2

def with_opencv(filename):
    video = cv2.VideoCapture(filename)
    # 检查视频是否成功打开
    if not video.isOpened():
        print("无法打开HEVC视频文件,请检查解码器支持")
        return None
    
    frame_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
    frame_rate = video.get(cv2.CAP_PROP_FPS)
    # 记得释放资源
    video.release()
    
    # 检查获取到的参数是否有效(无效时会返回0或负数)
    if frame_count <= 0 or frame_rate <= 0:
        print("无法获取有效帧率/帧数,解码器不支持HEVC")
        return None
    
    return frame_count / frame_rate

print(with_opencv('vid.hevc'))

2. 重新编译OpenCV以支持HEVC

如果确认是解码器缺失,你可以重新编译OpenCV,编译时启用HEVC相关的解码器选项:

  • 编译时添加-D WITH_GSTREAMER=ON(GStreamer通常自带HEVC解码支持)
  • 或者添加-D WITH_OPENH265=ON(需要提前安装openh265库)
  • 具体编译步骤可参考OpenCV官方文档,不过这个方法需要一定的编译环境和经验。

3. 使用ffmpeg-python替代(更简便)

如果不想折腾编译,直接用ffmpeg-python库更靠谱——FFmpeg对HEVC的支持非常完善,不需要额外配置。

步骤:

  1. 安装库:
pip install ffmpeg-python
  1. 示例代码(直接获取视频时长,或通过帧率+帧数计算):
import ffmpeg

def get_video_duration(filename):
    try:
        # 探测视频元数据
        probe = ffmpeg.probe(filename)
        # 筛选出视频流
        video_stream = next(stream for stream in probe['streams'] if stream['codec_type'] == 'video')
        
        # 方法1:直接拿视频时长(单位:秒)
        duration = float(video_stream['duration'])
        
        # 方法2:通过帧率和帧数计算
        frame_rate = eval(video_stream['r_frame_rate'])  # 解析类似"30/1"的帧率字符串
        frame_count = int(video_stream['nb_frames'])
        duration_calc = frame_count / frame_rate
        
        print(f"直接获取时长:{duration}秒,计算时长:{duration_calc}秒")
        return duration
    except ffmpeg.Error as e:
        print(f"处理出错:{e.stderr.decode()}")
        return None
    except StopIteration:
        print("视频文件中未找到视频流")
        return None

print(get_video_duration('vid.hevc'))

这个方法几乎能兼容所有主流视频格式,包括HEVC,不用纠结OpenCV的解码器问题。

内容的提问来源于stack exchange,提问作者AmirHossein Asa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:12:45