[python] PIL로 동영상 프레임 추출하기

이번 포스트에서는 Python의 PIL(Pillow) 라이브러리를 사용하여 동영상에서 프레임을 추출하는 방법에 대해 알아보겠습니다.

PIL(Pillow)은 Python에서 이미지 처리에 사용되는 강력한 라이브러리입니다. 이 라이브러리를 사용하면 동영상 파일에서 각각의 프레임을 추출하여 이미지로 저장할 수 있습니다.

먼저, 필요한 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 Pillow를 설치합니다.

pip install Pillow

다음은 PIL을 사용하여 동영상 프레임을 추출하는 간단한 예제 코드입니다.

from PIL import Image
import cv2

# 동영상 파일 열기
video_file = 'video.mp4'
cap = cv2.VideoCapture(video_file)

# 추출할 프레임 인덱스 설정
frame_indexes = [0, 10, 20, 30]

# 프레임 추출 및 이미지로 저장
for index in frame_indexes:
    cap.set(cv2.CAP_PROP_POS_FRAMES, index)
    ret, frame = cap.read()
    if ret:
        # PIL 이미지로 변환
        pil_image = Image.fromarray(frame)

        # 이미지 저장
        pil_image.save(f'frame_{index}.png')

# 동영상 파일 닫기
cap.release()

위의 코드에서는 동영상 파일을 열고, 추출할 프레임의 인덱스를 설정한 뒤, 해당 프레임을 추출하여 이미지로 저장하는 과정을 수행합니다. 코드에서는 frame_indexes 변수로 추출할 프레임의 인덱스를 설정하고, 이를 순회하며 각각의 프레임을 추출하여 frame_{index}.png 형식의 파일로 저장합니다.

추출된 이미지는 Pillow 라이브러리의 Image.fromarray() 메소드를 사용하여 numpy.ndarray 형식의 프레임을 PIL 이미지로 변환한 뒤 저장합니다.

동영상 파일을 읽어오기 위해 OpenCV의 cv2.VideoCapture 클래스를 사용하였습니다. 동영상 파일을 열고 읽어온 후에는 반드시 release() 메소드를 호출하여 파일을 닫아줘야 합니다.

이제 위의 예제 코드를 사용하여 동영상 프레임을 추출해보세요. 분석, 학습 등 다양한 용도로 활용할 수 있습니다.

참고 자료