본문 바로가기
Programming

moviepy 임포트시 ModuleNotFoundError 에러

by Embedded.AI 2024. 12. 10.
반응형

MoviePy는 Python으로 동영상을 편집할 때 널리 사용되는 라이브러리입니다. 하지만 최근 2.0 버전으로 업데이트하면서 많은 분들이 아래와 같은 에러 상황을 겪고 계신 것 같더라고요. 이 포스팅에서 수정 방법을 알아보도록 하겠습니다.

MoviePy의 2.0 버전 Import 오류 해결하기

 

No module named 'moviepy.editor'

moviepy.editor 모듈 찾을 수 없음

기존 MoviePy 1.X 버전에서 사용하던 임포트 방식을 사용하면 다음과 같은 오류가 발생합니다.

from moviepy.editor import *

# 실행 결과
ModuleNotFoundError: No module named 'moviepy.editor'

MoviePy 2.0의 주요 변경사항

MoviePy 2.0에서는 API의 일관성과 직관성을 높이기 위해 다음과 같은 중요한 변경이 이루어졌습니다:

1. Import 구조 단순화

  • moviepy.editor 네임스페이스가 완전히 제거됨
  • 더 직관적인 임포트 구조로 개선

2. Python 버전 지원 변경

  • Python 2 지원 중단
  • Python 3.7 이상 버전만 지원
  • 최신 Python 기능 활용을 위한 결정

해결 방법

MoviePy 2.0에서는 다음과 같은 새로운 임포트 방식을 사용해야 합니다:

# 방법 1: 전체 기능 임포트
from moviepy import *  # __all__에 정의된 유용한 기능만 로드됨

# 방법 2: 필요한 기능만 선택적 임포트
from moviepy import VideoFileClip

MoviePy 2.0 마이그레이션 시 주요 변경사항 안내

위의 에러와 별도로 MoviePy 2.0으로 업그레이드하실 때 확인해야할 중요한 변경사항들이 있습니다. 기존 코드를 수정해야 할 수 있으니 아래 내용을 잘 살펴보시기 바랍니다.

메서드 이름 변경

가장 눈에 띄는 변경점은 모든 .set_ 메서드들이 .with_로 변경된 것입니다. 이는 메서드의 동작 방식을 더 명확하게 표현하기 위한 변경입니다. 이제 이 메서드들은 원본 클립을 직접 수정하지 않고, 수정된 새로운 복사본을 반환합니다.

예를 들어:

# 기존 방식
clip.set_duration(5)

# 새로운 방식
new_clip = clip.with_duration(5)

이펙트 시스템 개편

이펙트 시스템이 함수 기반에서 클래스 기반으로 전환되었습니다. 이는 코드의 구조화와 재사용성을 높이기 위한 변경입니다.

주요 변경사항:

  • 모든 이펙트가 Effect 추상 클래스를 구현하도록 변경
  • clip.fx 대신 with_effects() 메서드 사용
  • 런타임에 클립 메서드로 추가되던 이펙트들이 제거됨

외부 의존성 정리

MoviePy 2.0에서는 라이브러리의 안정성과 유지보수성을 높이기 위해 외부 의존성을 대폭 정리했습니다. 주요 변경사항은 다음과 같습니다.

  • Pillow를 이미지 처리의 기본 라이브러리로 채택
  • ImageMagick, PyGame, OpenCV, scipy, scikit 등의 의존성 제거
  • 일부 기능(tracking, segmenting, sliders 등)이 더 이상 지원되지 않음

이러한 변경으로 인해 기존에 사용하시던 일부 기능들이 작동하지 않을 수 있습니다. 필요한 경우 직접 대체 기능을 구현하셔야 할 수 있습니다.

반응형