import avinput_file = 'DaoMengKongJian-720P.mp4'input_file = 'DaoMengKongJian-480P.mp4'# 初始化FFmpeg上下文# av.avdevice_register_all()# av.logging.set_level(av.logging.INFO)count = 0with av.open(input_file, metadata_encoding='utf-8', metadata_errors='ignore') as container:    video_stream = container.streams.video[0]    video_stream.thread_type = 'AUTO'    average_fps: int = round(video_stream.average_rate)    interval = 1    for index, frame in enumerate(container.decode(video_stream)):                if index % (average_fps) == 0:            frame.to_ndarray(format='rgb24')            count += 1print('count is', count)

pyav 拆帧速度测试

平台视频分辨率耗时(秒)
E5-26901280x720115
E5-2690640x36063

此时,利用了 8 个 cpu core(自动挡,pyav 主动设置线程数目)


接下来看看,手动设置不同线程数,拆帧的效率

参考文章:pyav 指定线程数目
import avimport timeinput_file = 'DaoMengKongJian-360P.mp4'for thread_count in [1, 2, 3, 4, 5]:    count = 0    s = time.time()    with av.open(input_file, metadata_encoding='utf-8', metadata_errors='ignore') as container:        video_stream = container.streams.video[0]        # video_stream.thread_type = 'AUTO'        video_stream.thread_count = thread_count        average_fps: int = round(video_stream.average_rate)        interval = 1        for index, frame in enumerate(container.decode(video_stream)):            if index % (average_fps) == 0:                frame.to_ndarray(format='rgb24')                count += 1    e = time.time()    print(f'thread count is {thread_count}, pay time is {e-s}')

测试后果

pyav 拆帧速度测试

平台视频分辨率线程数耗时(秒)
E5-2690640x3601147
E5-2690640x3602115
E5-2690640x360393
E5-2690640x3604104
E5-2690640x360577
E5-2690640x360683
E5-2690640x360787
E5-2690640x360877

论断,能够看到,多线程,能够起到减速作用,但不是线性减速