[파이썬] moviepy 필터 및 마스크 적용하기

영상 처리는 비디오 편집, 컴퓨터 비전 및 컴퓨터 그래픽스 분야에서 중요한 역할을 합니다. Python에서는 MoviePy라는 강력한 라이브러리를 사용하여 비디오 처리 작업을 쉽게 수행할 수 있습니다. 이번 블로그 포스트에서는 MoviePy를 사용하여 필터 및 마스크를 영상에 적용하는 방법에 대해 알아보겠습니다.

필터 적용하기

영상에 필터를 적용하는 것은 영상의 외형을 변경하거나 시각적 효과를 부여하는 데 사용됩니다. MoviePy에서는 fx 함수를 사용하여 다양한 필터를 적용할 수 있습니다.

예를 들어, 다음과 같이 캡션을 추가하는 필터를 만들 수 있습니다.

from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip

# 비디오 클립을 가져오기
video = VideoFileClip("input.mp4")

# 캡션 만들기
caption = TextClip("Hello, World!", fontsize=40, color='white').set_position(("center", "bottom")).set_duration(video.duration)

# 캡션을 비디오 클립에 추가
final = CompositeVideoClip([video, caption])

# 출력 비디오 저장
final.write_videofile("output.mp4")

위의 코드에서는 TextClip을 사용하여 “Hello, World!”라는 캡션을 생성하고, set_position으로 캡션의 위치를 설정합니다. CompositeVideoClip을 사용하여 캡션을 원본 비디오 클립에 추가하고, write_videofile을 사용하여 결과를 저장합니다.

마스크 적용하기

마스크는 영상의 일부 영역을 지정하여 해당 영역에만 필터를 적용하는 데 사용됩니다. MoviePy에서는 mask 매개변수를 사용하여 마스크를 적용할 수 있습니다.

예를 들어, 다음과 같이 움직이는 원 모양의 마스크를 생성하고, 해당 마스크를 비디오 클립에 적용할 수 있습니다.

import numpy as np
from moviepy.editor import VideoFileClip, ColorClip, CompositeVideoClip

# 비디오 클립을 가져오기
video = VideoFileClip("input.mp4")

# 마스크 생성
mask = ColorClip(video.size, ismask=True).set_duration(video.duration)
mask = mask.fl(lambda gf,t : gf(t)[..., 0]) # grayscale로 변환

# 원 모양의 마스크 만들기
mask = mask.fl_image(lambda pic: (pic * (1-(np.sqrt((pic.shape[0]/2-np.indices(pic.shape)[:,:,:,np.newaxis][1])**2 +
                                                   (pic.shape[1]/2-np.indices(pic.shape)[:,:,:,np.newaxis][0])**2)))).astype(np.uint8))

# 마스크를 비디오 클립에 적용
final = CompositeVideoClip([video.set_mask(mask)])

# 출력 비디오 저장
final.write_videofile("output.mp4")

위의 코드에서는 ColorClip을 사용하여 원 모양의 마스크를 생성합니다. fl_image 함수를 사용하여 마스크를 생성하고, set_mask를 사용하여 마스크를 비디오 클립에 적용합니다. 결과적으로 마스크가 적용된 비디오 클립이 생성되고, write_videofile을 사용하여 결과를 저장합니다.

MoviePy를 사용하면 필터 및 마스크를 영상에 적용하는 작업을 간편하게 수행할 수 있습니다. 이를 통해 영상 편집 및 시각화 작업을 보다 효과적으로 수행할 수 있습니다.

더 많은 정보를 원하신다면 MoviePy 공식 문서를 참조해보세요. Happy coding!