使用pyav将进行抽帧
cpu占用约5% 只适用于抽帧间隔较长的情况
import av
# 打开视频流
container = av.open('video_stream_url')
# 获取视频流中的视频帧
video_stream = container.streams.video[0]
count = 1
interval = 125 # 视频流一秒25帧
interval_2 = interval // 2 if interval % 2 == 0 else interval // 2 + 1
# 循环读取视频帧并抽帧
for packet in container.demux(video_stream):
# 获取当前帧的时间戳
pts = packet.pts
# 如果时间戳满足条件,则进行抽帧
if pts is not None and (count == interval_2 or count == interval):
frame = packet.decode()
if count == interval:
img = frame.to_ndarray(format='bgr24')
count = 1
# 处理相关帧