欢迎光临
我们一直在努力

pyav 拆帧速度和线程数目的关系测试

import av

input_file = 'DaoMengKongJian-720P.mp4'
input_file = 'DaoMengKongJian-480P.mp4'

# 初始化FFmpeg上下文
# av.avdevice_register_all()
# av.logging.set_level(av.logging.INFO)


count = 0


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'
    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

print('count is', count)

pyav 拆帧速度测试

平台 视频分辨率 耗时(秒)
E5-2690 1280×720 115
E5-2690 640×360 63

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


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

参考文章:pyav 指定线程数目

import av
import time


input_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-2690 640×360 1 147
E5-2690 640×360 2 115
E5-2690 640×360 3 93
E5-2690 640×360 4 104
E5-2690 640×360 5 77
E5-2690 640×360 6 83
E5-2690 640×360 7 87
E5-2690 640×360 8 77

结论,可以看到,多线程,可以起到加速作用,但不是线性加速

https://segmentfault.com/a/1190000043588809

未经允许不得转载:IT极限技术分享汇 » pyav 拆帧速度和线程数目的关系测试

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址