[파이썬] moviepy로 만든 프로젝트 사례

Python을 이용하여 영상 처리 및 편집을 할 때 moviepy 라이브러리를 활용하면 편리하고 강력한 기능들을 활용할 수 있습니다. 이번 포스트에서는 moviepy를 사용하여 만들어진 프로젝트 사례를 소개합니다.

1. 소개 동영상 만들기

온라인 강의 나 홍보 영상을 만들기 위해 moviepy를 사용했습니다. 배경 음악, 텍스트, 이미지 등 다양한 요소들을 조합하여 전문적인 동영상을 만들 수 있었습니다. 예를 들어, 다양한 애니메이션 효과와 전환 효과, 그리고 텍스트 애니메이션 등을 적용하여 동영상을 흥미롭게 만들어 보였습니다.

from moviepy.editor import *

# 배경 영상 가져오기
background = VideoFileClip("background.mp4")

# 텍스트 애니메이션
text = TextClip("Welcome to My Channel!", fontsize=50, color='white')
text = text.set_position(("center", "bottom")).set_duration(5)

# 이미지 가져오기
image = ImageClip("logo.png", duration=background.duration)
image = image.resize(height=100).set_position(("center", "top"))

# 배경 음악 추가하기
audio = AudioFileClip("background_music.mp3")
background = background.set_audio(audio)

# 영상 조합하기
final_video = CompositeVideoClip([background, text, image])

# 결과 저장하기
final_video.write_videofile("intro_video.mp4")

위 예제는 간단한 소개 동영상을 만드는 예시입니다. moviepy의 다양한 함수와 기능들을 활용하여 동영상에 원하는 요소들을 추가하고 편집할 수 있습니다.

2. 영상 분석 및 처리

여러 프로젝트에서는 영상을 분석하고 편집하는 작업이 필요했습니다. 예를 들어, 얼굴 인식을 통해 얼굴에 모자이크를 적용하는 등의 작업을 할 수 있습니다.

from moviepy.editor import *
import cv2

# 영상 불러오기
video = VideoFileClip("input_video.mp4")

# 얼굴 인식
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

def process_frame(frame):
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 흑백으로 변환
    faces = face_cascade.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) # 얼굴 인식
    for (x, y, w, h) in faces:
        frame[y:y+h, x:x+w] = cv2.blur(frame[y:y+h, x:x+w], (25, 25)) # 모자이크 처리
    return frame

# 영상 처리
processed_video = video.fl(process_frame)

# 결과 저장하기
processed_video.write_videofile("output_video.mp4")

위 예제는 moviepy와 OpenCV를 결합하여 얼굴 인식을 통해 영상에 모자이크를 적용하는 예시입니다. 영상을 처리하는 함수를 정의하고, fl 메소드를 사용하여 프레임 단위로 영상을 처리할 수 있습니다.

3. GIF 애니메이션 만들기

moviepy를 이용하여 GIF 애니메이션을 만들 수도 있습니다. 이를 활용하여 특정 영상에서 움직임을 재생하지 않고 특정 부분을 반복 재생하는 GIF 파일을 만들 수 있습니다.

from moviepy.editor import *

# 영상 불러오기
video = VideoFileClip("input_video.mp4")

# 영상 특정 부분 추출하기
subclip = video.subclip(10, 20) # 10초에서 20초까지의 부분

# 반복 재생
looped_clip = concatenate_videoclips([subclip] * 5) # 5번 반복

# 결과 저장하기
looped_clip.write_gif("looped_animation.gif")

위 예제는 영상의 특정 구간을 추출하여 해당 부분을 반복 재생하는 GIF 애니메이션을 만드는 예시입니다. subclip 메소드로 특정 부분을 추출한 뒤, concatenate_videoclips 메소드를 사용하여 반복 재생할 횟수만큼 영상을 연결합니다.

이처럼 moviepy 라이브러리를 사용하면 Python을 통해 다양한 영상 처리, 편집 작업을 수행할 수 있습니다. 위에 소개한 사례 외에도 moviepy를 사용하여 다양한 프로젝트를 구현할 수 있으니 적극적으로 활용해보시기 바랍니다.