Я пытаюсь прочитать видео в буфер, используя потоки OpenCV, и получаю "Assertion fctx->async_lock failed at libavcodec/pthread_frame.c:167" причина, по которой я хочу использовать для этого потоки, заключается в том, что я могу одновременно считывать в список множество кадров, чтобы это было быстро. Мне нужны все кадры, и я не могу пропустить ни одного кадра. Я думал, что несколько кадров мой код работает в однопоточном режиме, то есть с «потоками».buffer_refill = 1".import threading
import cv2
cap = cv2.VideoCapture('data/temp/testing/test.mp4')
frames = []
total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
frames_left = total_frames
threads = []
print(total_frames)
min_buffer = 120
buffer_refill = 60
def buffer():
print('buffer')
frame = cap.grab()
ret, frame = cap.retrieve()
frames.append(frame)
def get_buffer(num):
global frames_left
for i in range(num):
frames_left -= 1
if frames_left > 0:
t = threading.Thread(target=buffer)
t.start()
threads.append(t)
for thread in threads:
thread.join()
print('block')
while(cap.isOpened()):
if frames_left > 0 and len(frames) < min_buffer:
get_buffer(buffer_refill)
else:
cv2.imshow('Frame',frames[0])
frames.pop(0)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Подробнее здесь: https://stackoverflow.com/questions/735 ... le-threads