2017-12-16 4 views
3

비디오 파일을 가지고 있는데, 지금은 모든 비디오 프레임을 파이썬 목록에 넣고 싶습니다. 파이썬의 OpenCV 라이브러리를 사용하고 있습니다. 하지만 내 노트북은 절대 할 수 없어요. 그것은 막혀서 다시 시작하는 힘을 끊어야합니다. 내 짐작으로는 python리스트가 메모리 부족으로 인해 모든 프레임을 처리 할 수 ​​없다는 것입니다. 여기에 코드가 있으며 원하는대로 (구문) 수행하는 올바른 방법이라고 생각합니다. 지금 나는 왜 랩톱이 막히는 지 그리고 목록을 사용하는 것 이외의 다른 해결책이 필요합니다.파이썬 목록으로 작업 할 때 랩톱이 멈추는 이유는 무엇입니까?

import cv2 
video = cv2.VideoCapture("myvideo.mp4") 
all_frames = [] 
while 1: 
    ret, frame = video.read() 
    if ret: 
     all_frames.append(frame) 
     continue 
    break 

아래 당신이
비디오가 7000 개 프레임을 포함 도움이 될 동영상에 대한 일부 데이터입니다.
모든 프레임의 크기는 (1080, 1920)입니다.

+0

당신은 여전히 ​​부족합니다 @Niraj 당신은 당신의 무한 루프에 지연을 가하고없는 것 –

+0

팬더 dataframe ... –

+0

을 시도 왜 문이 안 열려 ' 메모리 –

답변

5

이렇게하면 안됩니다.

읽고, 프레임 또는 픽셀 당 3 바이트 같은 .mp4원시 출력으로부터압축된다.

그래서 7000 * 3 * 1080 * 1920 바이트를 저장하려고합니다. 대략 43Gb입니다!

append으로 인해 목록의 상수 조정이 더 많은 복사본을 생성하므로 심지어 인 경우 메모리를 사용할 수있는 경우 매우 길어질 수 있습니다.

이 프로그램의 배경은 아마 프레임을 분석하는 것입니다. 따라서 기본적으로 모두 프레임이 메모리에 동시에 필요하지 않습니다.

그런 경우 작은 수의 회전 버퍼를 읽고 형상 탐지 분석을 수행하고, 분석 된 데이터를 저장하고 (원시 데이터는 제외하고) 반복적으로 (실시간으로 수행하는 프로그램 그들은 영원히 실행하고 있기 때문에), 모든 데이터를 저장할 수 없습니다 분석

관련 문제