1. 텍스트 추가 및 텍스트 움직임 애니메이션
MoviePy는 지루한 비디오를 걸작으로 바꿀 수 있는 정말 멋진 도구야. 음, 아니면 적어도 움직이는 텍스트와 그래픽이 있는 무언가로. 먼저 우리의 비디오에 정적 요소를 추가하는 방법을 배우고, 그런 다음 마법 같은 애니메이션으로 넘어가보자.
텍스트 추가와 움직임 애니메이션
MoviePy에서 텍스트와 그 애니메이션을 만들기 위해 TextClip을 사용해. 이걸로 텍스트, 폰트, 색상 등 여러 매개변수를 설정할 수 있어. 그리고 set_position() 메서드를 이용해서 화면에서 텍스트 움직임을 설정할 수 있어.
수평으로 움직이는 텍스트
이 예제에서는 텍스트가 왼쪽에서 오른쪽으로 움직일 거야.
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# 기본 비디오 로드
video = VideoFileClip("sample_video.mp4")
# 텍스트 클립 생성
text = TextClip("움직이는 텍스트", fontsize=50, color='white')
text = text.set_position(lambda t: (int(200 * t), 100)).set_duration(5)
# 비디오에 텍스트 오버레이
final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_moving_text.mp4", fps=24)
여기서는:
TextClip("움직이는 텍스트", fontsize=50, color='white')는 흰색 텍스트를 폰트 크기 50으로 생성해.set_position(lambda t: (int(200 * t), 100))은 텍스트가 일정한 속도로 수평으로 오른쪽으로 이동하는 애니메이션을 만들어.CompositeVideoClip([video, text])는 텍스트 클립과 기본 비디오 클립을 결합해.
움직임 방향을 바꾸는 텍스트 애니메이션
수평 및 수직 움직임을 결합하여 보다 복잡한 텍스트 궤도를 만들 수도 있어.
대각선으로 텍스트 움직이기
이 예제에서는 텍스트가 대각선으로 움직일 거야.
text = TextClip("대각선 텍스트", fontsize=50, color='yellow')
text = text.set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t))).set_duration(5)
final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_diagonal_text.mp4", fps=24)
여기서는:
set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t)))는 텍스트의 수평 및 수직 이동을 결합해 대각선 움직임을 만들어.
등장과 사라짐 효과를 가진 텍스트 애니메이션
텍스트가 나타나고 사라지게 하려면, 시간에 따라 투명도를 변경할 수 있어. MoviePy에서는 fadein()와 fadeout() 메서드를 사용해.
부드럽게 나타나고 사라지는 텍스트
# 부드럽게 나타나고 사라지는 텍스트
text = TextClip("등장하는 텍스트", fontsize=40, color='blue')
text = text.set_position(('center', 'bottom')).set_duration(5).fadein(1).fadeout(1)
final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_fade_text.mp4", fps=24)
여기서는:
fadein(1)와fadeout(1)는 텍스트 초반과 끝에서 1초 동안 부드럽게 등장하고 사라지게 해.
2. 그래픽 요소 삽입
이미지 추가 및 움직임 애니메이션
텍스트 외에도 MoviePy는 ImageClip 클래스를 사용해 비디오에 이미지를 추가할 수 있어. set_position()을 이용해 이미지의 궤적을 설정하거나 위치를 변경할 수 있어.
아래에서 위로 움직이는 로고 애니메이션
from moviepy.editor import VideoFileClip, ImageClip
# 비디오와 이미지 로드
video = VideoFileClip("sample_video.mp4")
logo = ImageClip("logo.png").set_duration(5)
# 로고 애니메이션 — 아래에서 위로 이동
logo = logo.set_position(lambda t: ('center', int(500 - 100 * t)))
# 비디오에 로고 오버레이
final_video = CompositeVideoClip([video, logo])
final_video.write_videofile("video_with_moving_logo.mp4", fps=24)
여기서는:
ImageClip("logo.png").set_duration(5)는 로고 이미지를 로드하고 해당 지속 시간을 설정해.set_position(lambda t: ('center', int(500 - 100 * t)))는 로고가 수직으로 아래에서 위로 이동하게 해.
확대 효과로 등장하는 이미지
이미지의 크기를 점진적으로 확대하여 나타내는 효과를 생성할 수도 있어.
# 이미지 로드
logo = ImageClip("logo.png").set_duration(5)
# 확대 효과를 위한 이미지 크기 조정
logo = logo.resize(lambda t: 1 + 0.5 * t) # 크기 확대
logo = logo.set_position(('center', 'center'))
# 크기 조정 애니메이션이 적용된 로고 오버레이
final_video = CompositeVideoClip([video, logo])
final_video.write_videofile("video_with_zoom_in_logo.mp4", fps=24)
여기서는:
logo.resize(lambda t: 1 + 0.5 * t)는 로고 크기를 초당 50% 확대하여 줌 효과를 만들어.
3. 여러 애니메이션 요소 결합
MoviePy는 여러 애니메이션 요소를 한 비디오에 결합할 수 있어. 예를 들어, 수평으로 움직이는 텍스트와 수직으로 움직이는 이미지를 동시에 추가할 수 있어.
텍스트와 이미지의 동시에 애니메이션
# 수평으로 움직이는 텍스트 만들기
text = TextClip("텍스트와 이미지", fontsize=40, color='red')
text = text.set_position(lambda t: (int(200 * t), 50)).set_duration(5)
# 아래에서 위로 이동하는 로고 애니메이션
logo = ImageClip("logo.png").set_duration(5)
logo = logo.set_position(lambda t: ('center', int(500 - 100 * t)))
# 비디오에 텍스트와 로고 오버레이
final_video = CompositeVideoClip([video, text, logo])
final_video.write_videofile("video_with_text_and_logo.mp4", fps=24)
여기서는:
- 왼쪽에서 오른쪽으로 움직이는 텍스트와 위로 움직이는 로고 애니메이션을 만들었어.
CompositeVideoClip([video, text, logo])는 기본 비디오 위에 두 애니메이션 요소를 오버레이 해.
하나의 비디오에서 텍스트와 그래픽 애니메이션 생성
이 예제에서는 대각선으로 움직이는 텍스트와 점진적으로 확대되고 부드럽게 나타나는 로고가 있는 전체 비디오를 만들어볼 거야.
from moviepy.editor import VideoFileClip, TextClip, ImageClip, CompositeVideoClip
# 비디오 로드
video = VideoFileClip("sample_video.mp4")
# 대각선으로 움직이는 텍스트
text = TextClip("애니메이션 텍스트", fontsize=40, color='yellow')
text = text.set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t))).set_duration(5)
# 점진적으로 확대되며 부드럽게 나타나는 로고
logo = ImageClip("logo.png").set_duration(5)
logo = logo.resize(lambda t: 1 + 0.5 * t).fadein(1)
# 비디오에 텍스트와 로고 오버레이
final_video = CompositeVideoClip([video, text, logo])
final_video.write_videofile("animated_text_and_logo.mp4", fps=24)
유의해야 할 오류들
때때로 텍스트나 그래픽이 기대했던 대로 재생되지 않을 수 있어. 이는 시간 또는 위치를 잘못 지정했기 때문일 수 있어. 사용하는 논리 표현식을 확인하고 코드 디버깅을 잊지 마.
또 다른 일반적인 질문은 '왜 내 비디오가 원하는 형식으로 저장되지 않나요?' 이런 경우, 비디오를 내보내기 위한 필요한 코덱이 설치되었는지 확인해. MoviePy는 이를 쉽게 만들어주지만, 가끔 호환성 문제로 추가 라이브러리를 설치해야 할 수도 있어.
여기까지가 이번 수업이야. 이제 텍스트와 그래픽을 비디오에 추가하는 것뿐만 아니라 이를 다이나믹하고 생동감 있게 만드는 방법까지 배웠어. 다음 강의에서는 더 흥미로운 기술들을 배울 테니 계속 함께 하면서 스킬을 키워보자!
GO TO FULL VERSION