我有一个python脚本,用于使用pyav包读取视频字节,如下所示。当我使用这段代码时,我发现使用大量的CPU RAM来读取一个长流的视频字节,并使所有内核都很忙(高CPU使用率)。但在我的项目中,我希望以较低的CPU使用率实时处理它们,因此我想知道在pyav(即基于GPU而不是基于CPU的)中,是否有任何用于读取流的硬件编码或硬件解码?
def _get_video_stream_info(self, video_bytes):
stream_options = [{'codec': 'h264'}]
self.container = av.open(video_bytes, stream_options=stream_options)
video_stream = [s for s in self.container.streams if s.type == "video"][0]
fps = int(video_stream.average_rate)
total_frames = video_stream.frames
logger.info(f'[INFO] FPS video straem = {fps}')
logger.info(f'[INFO] Total frames video straem = {total_frames}')
num_split_frames = self.duration_split * fps
packet_list = []
for packet in self.container.demux(video_stream):
packet_list.append(packet)
return packet_list
发布于 2022-03-20 20:28:36
根据您的需要调整这个示例,您需要创建一个Codec上下文,下面是Nvidia cuda
import av
video = av.open(VIDEO_FILE_PATH)
target_stream = video.streams.video[0]
ctx = av.Codec('h264_cuvid', 'r').create()
for packet in
video.demux(target_stream):
for frame in ctx.decode(packet):
print(frame)
https://stackoverflow.com/questions/71535857
复制相似问题