1. Giới thiệu thế giới văn bản trong MoviePy
Nào, chuẩn bị bước vào thế giới kỳ diệu của chỉnh sửa video với văn bản. Hãy tưởng tượng rằng bạn là đạo diễn, và bạn có nhiệm vụ không chỉ làm các nhân vật nói mà còn kiểm soát những từ xuất hiện trên màn hình. Chính xác là kỳ diệu của phụ đề và tiêu đề đấy!
Trước khi bắt đầu, điều quan trọng là cần hiểu một điều đơn giản: MoviePy không chỉ là một thư viện khác để làm việc với video. Nó là nhà thiết kế video cá nhân của bạn, giúp thêm chút lung linh và thông tin cho dự án của bạn. Bạn đã biết những kiến thức cơ bản về chỉnh sửa video: cắt ghép, ghép nối, chút hiệu ứng đặc biệt — giờ là lúc nâng lên một tầm cao mới.
Tại sao cần thêm văn bản?
Văn bản trong video đóng vai trò quan trọng — vừa là thông điệp thông tin, vừa là tiêu đề phong cách, và dĩ nhiên, là phụ đề cấp cứu cho những ai xem sản phẩm của bạn vào đêm khuya mà không muốn làm phiền hàng xóm. MoviePy cho phép làm điều này dễ dàng và phong cách.
2. Làm việc với văn bản
Hãy bắt đầu với những yếu tố văn bản đơn giản. MoviePy cung cấp một chức năng tuyệt vời là TextClip
, cho phép bạn thêm văn bản vào các đoạn video của mình.
Tạo clip văn bản
Cách thiết lập clip văn bản cơ bản trông như thế này:
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
# Mở file video
video = VideoFileClip("sample_video.mp4")
# Tạo clip văn bản
txt_clip = TextClip("Xin chào, thế giới!", fontsize=70, color='white')
# Đặt thời lượng cho clip văn bản
txt_clip = txt_clip.set_duration(video.duration)
# Chỉ định vị trí của văn bản
txt_clip = txt_clip.set_position('bottom')
# Kết hợp video với văn bản
video_with_text = CompositeVideoClip([video, txt_clip])
# Lưu kết quả
video_with_text.write_videofile("output_video_with_text.mp4", fps=24)
Tùy chỉnh phông chữ và màu sắc
Bạn có thể dễ dàng tùy chỉnh màu sắc, phông chữ và kích thước văn bản. Trong ví dụ trên, màu văn bản là trắng, nhưng bạn có thể chọn màu khác, chẳng hạn như:
txt_clip = TextClip("Xin chào, thế giới!", fontsize=70, font='Amiri-bold', color='yellow')
Tương tự, bạn có thể thay đổi phông chữ, hãy đảm bảo rằng phông chữ cần thiết được cài đặt trong hệ thống của bạn.
3. Định vị văn bản trên màn hình
Bạn có thể tùy chỉnh vị trí của văn bản bằng tham số set_position()
, nó có thể nhận giá trị dạng chuỗi (ví dụ: 'center'
, 'bottom'
) hoặc tọa độ.
Đặt văn bản ở các vị trí khác nhau
# Văn bản nằm ở phần trên cùng
text_top = TextClip("Văn bản trên cùng", fontsize=30, color='blue').set_position(('center', 'top')).set_duration(5)
# Văn bản nằm ở phần dưới cùng
text_bottom = TextClip("Văn bản dưới cùng", fontsize=30, color='green').set_position(('center', 'bottom')).set_duration(5)
# Văn bản nằm tại tọa độ (x=100, y=100)
text_coords = TextClip("Văn bản theo tọa độ", fontsize=30, color='red').set_position((100, 100)).set_duration(5)
# Kết hợp tất cả văn bản vào video
final_video = CompositeVideoClip([video, text_top, text_bottom, text_coords])
final_video.write_videofile("video_with_positioned_text.mp4")
Ở đây:
('center', 'top')
: Đặt văn bản ở trung tâm phía trên.('center', 'bottom')
: Đặt văn bản ở trung tâm phía dưới.(100, 100)
: Đặt vị trí văn bản tại tọa độ cụ thể.
Cập nhật văn bản động
Không chỉ thêm văn bản, mà còn làm nó sống động — đây là điều làm video trở nên hấp dẫn thực sự. Thử làm văn bản chuyển động nhé.
def move_text(t):
return 10, 100 * t # Di chuyển văn bản xuống dưới theo thời gian
txt_clip = txt_clip.set_pos(move_text).set_duration(3)
4. Làm việc với phụ đề
Phụ đề là văn bản được đồng bộ hóa với những khoảng thời gian cụ thể trong video. Chúng ta có thể tải phụ đề từ file hoặc tự tạo thủ công.
Thêm phụ đề thủ công
Bắt đầu với một ví dụ đơn giản, nơi chúng ta thêm phụ đề vào video. Để làm điều đó, cần tạo một clip văn bản và đặt thời gian xuất hiện cho nó:
# Tạo phụ đề
subtitles = [
{"text": "Xin chào, thế giới!", "start": 0, "end": 2},
{"text": "Đây là phụ đề!", "start": 2.5, "end": 5}
]
# Kết hợp video với phụ đề
sub_clips = [TextClip(sub['text'], fontsize=50, color='white')
.set_position(('center', 'bottom'))
.set_start(sub['start'])
.set_duration(sub['end'] - sub['start'])
for sub in subtitles]
video_with_subtitles = CompositeVideoClip([video] + sub_clips)
video_with_subtitles.write_videofile("output_video_with_subtitles.mp4", fps=24)
GO TO FULL VERSION