1. Thêm văn bản và hoạt họa sự chuyển động của nó
MoviePy là công cụ tuyệt vời giúp biến những video nhàm chán thành những kiệt tác điện ảnh. Hoặc ít nhất là thành thứ gì đó có văn bản và đồ họa chuyển động. Trước tiên, chúng ta sẽ hiểu cách thêm các phần tử tĩnh vào video của mình, sau đó chuyển sang phép thuật — hoạt họa.
Thêm văn bản và hoạt họa sự chuyển động của nó
Để tạo văn bản và hoạt họa nó trong MoviePy, ta sử dụng TextClip
, cho phép thiết lập văn bản,
phông chữ, màu sắc và các tham số khác. Sau đó dùng phương thức set_position()
để đặt chuyển động của văn bản trên màn hình.
Văn bản chuyển động ngang
Trong ví dụ này, văn bản sẽ di chuyển từ trái sang phải.
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Tải video chính
video = VideoFileClip("sample_video.mp4")
# Tạo clip văn bản
text = TextClip("Văn bản chuyển động", fontsize=50, color='white')
text = text.set_position(lambda t: (int(200 * t), 100)).set_duration(5)
# Chồng văn bản lên video
final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_moving_text.mp4", fps=24)
Ở đây:
TextClip("Văn bản chuyển động", fontsize=50, color='white')
tạo ra văn bản màu trắng với kích thước phông chữ 50.set_position(lambda t: (int(200 * t), 100))
tạo hoạt họa mà văn bản di chuyển ngang từ trái sang phải với tốc độ không đổi.CompositeVideoClip([video, text])
kết hợp clip văn bản và clip video chính.
Hoạt họa văn bản với chuyển động đổi hướng
Bạn cũng có thể tạo ra các đường chuyển động phức tạp hơn cho văn bản bằng cách kết hợp chuyển động ngang và dọc.
Văn bản chuyển động theo đường chéo
Trong ví dụ này, văn bản sẽ di chuyển theo đường chéo.
text = TextClip("Văn bản đường chéo", 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)
Ở đây:
- Hàm
set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t)))
tạo chuyển động theo đường chéo, kết hợp sự chuyển động ngang và dọc của văn bản.
Hoạt họa văn bản với hiệu ứng xuất hiện và biến mất
Để làm cho văn bản xuất hiện và biến mất, bạn có thể thay đổi độ mờ của nó theo thời gian. Trong MoviePy,
phương pháp fadein()
và fadeout()
được sử dụng để làm điều đó.
Văn bản xuất hiện và biến mất mượt mà
# Văn bản với hiệu ứng xuất hiện và biến mất mượt mà
text = TextClip("Văn bản xuất hiện", 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)
Ở đây:
fadein(1)
vàfadeout(1)
thêm hiệu ứng xuất hiện mềm mượt tại phần đầu và biến mất dần dần ở cuối, kéo dài trong 1 giây.
2. Thêm các phần tử đồ họa
Thêm hình ảnh và hoạt họa sự chuyển động của chúng
Ngoài văn bản, MoviePy còn cho phép thêm hình ảnh vào video bằng cách sử dụng lớp ImageClip
.
Bạn có thể tạo hoạt họa cho hình ảnh bằng cách thiết lập quỹ đạo di chuyển và thay đổi vị trí của nó qua set_position()
.
Hoạt họa logo di chuyển từ dưới lên trên
from moviepy.editor import VideoFileClip, ImageClip
# Tải video và hình ảnh
video = VideoFileClip("sample_video.mp4")
logo = ImageClip("logo.png").set_duration(5)
# Hoạt họa logo — di chuyển từ dưới lên trên
logo = logo.set_position(lambda t: ('center', int(500 - 100 * t)))
# Chồng logo lên video
final_video = CompositeVideoClip([video, logo])
final_video.write_videofile("video_with_moving_logo.mp4", fps=24)
Ở đây:
ImageClip("logo.png").set_duration(5)
tải hình ảnh logo và đặt thời lượng của nó.set_position(lambda t: ('center', int(500 - 100 * t)))
làm logo di chuyển từ dưới lên trên theo chiều dọc.
Hiệu ứng hình ảnh xuất hiện với phóng to
Một hiệu ứng khác mà bạn có thể tạo là làm cho hình ảnh xuất hiện với kích thước tăng dần.
# Tải hình ảnh
logo = ImageClip("logo.png").set_duration(5)
# Cài đặt kích thước hình ảnh cho hiệu ứng phóng to
logo = logo.resize(lambda t: 1 + 0.5 * t) # Phóng to dần
logo = logo.set_position(('center', 'center'))
# Chồng logo với hoạt họa phóng to lên video
final_video = CompositeVideoClip([video, logo])
final_video.write_videofile("video_with_zoom_in_logo.mp4", fps=24)
Ở đây:
logo.resize(lambda t: 1 + 0.5 * t)
tăng kích thước logo thêm 50% mỗi giây, tạo hiệu ứng zoom in.
3. Kết hợp nhiều phần tử hoạt họa
MoviePy cho phép kết hợp nhiều phần tử hoạt họa trên cùng một video. Ví dụ, bạn có thể cùng lúc thêm văn bản di chuyển ngang và hình ảnh di chuyển dọc.
Hoạt họa văn bản và hình ảnh đồng thời
# Tạo văn bản di chuyển ngang
text = TextClip("Văn bản và hình ảnh", fontsize=40, color='red')
text = text.set_position(lambda t: (int(200 * t), 50)).set_duration(5)
# Hoạt họa logo từ dưới lên trên
logo = ImageClip("logo.png").set_duration(5)
logo = logo.set_position(lambda t: ('center', int(500 - 100 * t)))
# Chồng văn bản và logo lên video
final_video = CompositeVideoClip([video, text, logo])
final_video.write_videofile("video_with_text_and_logo.mp4", fps=24)
Ở đây:
- Chúng ta tạo hoạt họa văn bản di chuyển từ trái sang phải và logo di chuyển từ dưới lên trên.
CompositeVideoClip([video, text, logo])
chồng cả hai phần tử hoạt họa lên video chính.
Tạo hoạt họa văn bản và đồ họa trên cùng một video
Trong ví dụ này, chúng ta sẽ tạo một clip video hoàn chỉnh, trong đó văn bản di chuyển theo đường chéo và logo xuất hiện mượt mà, đồng thời kích thước tăng dần.
from moviepy.editor import VideoFileClip, TextClip, ImageClip, CompositeVideoClip
# Tải video
video = VideoFileClip("sample_video.mp4")
# Văn bản di chuyển theo đường chéo
text = TextClip("Văn bản hoạt họa", fontsize=40, color='yellow')
text = text.set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t))).set_duration(5)
# Logo tăng kích thước dần và xuất hiện mượt mà
logo = ImageClip("logo.png").set_duration(5)
logo = logo.resize(lambda t: 1 + 0.5 * t).fadein(1)
# Chồng văn bản và logo lên video
final_video = CompositeVideoClip([video, text, logo])
final_video.write_videofile("animated_text_and_logo.mp4", fps=24)
Lỗi thường gặp cần chú ý
Đôi khi văn bản hoặc đồ họa có thể không hiển thị như bạn mong đợi. Điều này có thể do thiết lập thời gian hoặc vị trí không chính xác. Hãy kiểm tra các biểu thức logic mà bạn sử dụng và đừng quên gỡ lỗi code.
Một câu hỏi phổ biến khác là tại sao video của tôi không lưu thành định dạng mong muốn? Hãy đảm bảo rằng bạn đã cài đặt các codec cần thiết để xuất video. MoviePy làm việc này dễ dàng hơn, nhưng đôi khi có thể gặp sự cố tương thích, mà cách đơn giản nhất để khắc phục là cài thêm thư viện bổ sung.
Đây là kết thúc bài học của chúng ta. Giờ đây, bạn biết cách không chỉ thêm văn bản và đồ họa vào video mà còn làm cho chúng trở nên sống động. Trong các bài giảng tiếp theo, bạn sẽ khám phá thêm nhiều kỹ thuật thú vị khác, vậy nên hãy tiếp tục học và nâng cao kỹ năng của mình nhé!
GO TO FULL VERSION