关于python:pyav-拆帧速度和线程数目的关系测试

98次阅读

共计 1392 个字符,预计需要花费 4 分钟才能阅读完成。

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-26901280×720115
E5-2690640×36063

此时,利用了 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-2690640×3601147
E5-2690640×3602115
E5-2690640×360393
E5-2690640×3604104
E5-2690640×360577
E5-2690640×360683
E5-2690640×360787
E5-2690640×360877

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

正文完
 0