본문 바로가기
오류 해결

[OpenCV] cv2.VideoWriter not saving video properly

by First Adventure 2024. 9. 16.
반응형

에러 메시지 설명

  cv2.VideoWriter() 함수는 OpenCV를 사용하여 비디오 파일을 저장하는 데 사용됩니다. 하지만 때때로 이 함수가 제대로 동작하지 않아 비디오가 저장되지 않거나 손상된 파일이 생성될 수 있습니다. 이는 비디오 파일이 열리지 않거나, 저장된 파일이 비정상적으로 작동하는 문제로 나타납니다.

 

발생 원인

  비디오가 제대로 저장되지 않는 문제는 여러 원인으로 발생할 수 있습니다:

  • 잘못된 코덱 설정: cv2.VideoWriter()에 사용할 코덱이 시스템에서 지원되지 않는 경우.
  • 프레임 크기 또는 FPS 문제: 입력 비디오의 프레임 크기 또는 초당 프레임 수(FPS)가 잘못 설정된 경우.
  • 잘못된 파일 경로: 파일 경로가 잘못되었거나, 파일이 저장될 위치에 쓰기 권한이 없는 경우.
  • 비디오 저장 형식과 확장자 불일치: 지정한 비디오 형식과 파일 확장자가 맞지 않을 때.

 

해결 방법

올바른 코덱 설정

  비디오 코덱이 시스템에서 지원되지 않으면 비디오 파일이 제대로 저장되지 않을 수 있습니다. 다음 예시에서, cv2.VideoWriter_fourcc() 함수로 사용할 코덱을 설정합니다. 일반적으로 많이 사용되는 코덱은 XVID 또는 MJPG입니다.

# XVID 코덱을 사용하여 비디오 저장
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

  XVID 코덱 외에도 MJPG, MP4V 등의 코덱을 시도해 보세요. 시스템에 설치된 코덱에 따라 결과가 달라질 수 있습니다.

 

프레임 크기 및 FPS 확인

  비디오의 프레임 크기와 FPS 설정이 정확해야 합니다. cv2.VideoWriter()에 전달된 프레임 크기가 입력 프레임의 크기와 일치하지 않으면 비디오가 제대로 저장되지 않을 수 있습니다.

# 프레임 크기와 FPS를 입력 프레임과 맞추기
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
fps = 20.0  # 초당 프레임 수 설정
out = cv2.VideoWriter('output.avi', fourcc, fps, (frame_width, frame_height))

 

파일 경로 및 권한 확인

  비디오를 저장할 파일 경로가 올바른지 확인하고, 해당 경로에 쓰기 권한이 있는지 점검합니다. 저장할 디렉토리가 존재하지 않거나, 경로가 잘못되었을 경우 비디오가 저장되지 않을 수 있습니다.

# 절대 경로를 사용하여 비디오 저장 경로 지정
out = cv2.VideoWriter('/path/to/directory/output.avi', fourcc, fps, (640, 480))

 

비디오 형식과 확장자 일치 확인

  비디오 파일 확장자와 선택한 코덱이 일치하지 않으면 파일이 손상되거나 비디오가 재생되지 않을 수 있습니다. 예를 들어, .avi 형식으로 저장할 때는 XVID 또는 MJPG 코덱을 사용하는 것이 일반적입니다. .mp4로 저장할 때는 MP4V 코덱을 사용하는 것이 적합합니다.

# MP4V 코덱을 사용하여 MP4 파일 저장
fourcc = cv2.VideoWriter_fourcc(*'MP4V')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))

 

비디오 저장 성공 여부 확인

  cv2.VideoWriter()가 성공적으로 비디오를 열고 저장하고 있는지 확인하려면, 다음과 같은 코드를 사용해 저장 과정에서 오류가 발생하는지 점검합니다.

if not out.isOpened():
    print("비디오 파일을 열 수 없습니다. 설정을 확인하세요.")

 

관련 내용 및 추가 팁

  • ffmpeg 설치 여부 확인: ffmpeg가 설치되어 있는지 확인하세요. OpenCV는 비디오 저장 시 ffmpeg 라이브러리를 필요로 할 수 있습니다.
  • 파일 확장자와 코덱 일치: 파일 확장자와 사용된 코덱이 일치하는지 확인하는 것이 중요합니다. 예를 들어, .avi 확장자를 사용하면서 MP4V 코덱을 사용할 경우 문제가 발생할 수 있습니다.
  • OpenCV 공식 문서
  • PyPI opencv-python 페이지
반응형