1. Cắt video
Trong bài giảng này, tụi mình sẽ tập trung vào việc cắt video và ghép các đoạn clip bằng thư viện MoviePy. Bạn sẽ học cách chia nhỏ video thành nhiều phần và từ những phần đó tạo thành những dự án video hoàn chỉnh. Một kiểu như là "bữa sáng video" với những mẩu nhỏ từ những tài liệu lập trình yêu thích của bạn gọi là "Python-mix".
Bắt đầu với cách chia nhỏ video thành từng đoạn. Việc này có thể rất hữu ích trong nhiều tình huống khác nhau, từ việc tạo demo cho những khám phá khoa học mới nhất của bạn đến việc cắt ra những khoảnh khắc bạn nháy mắt trong các cuộc họp Zoom.
Chia video theo thời gian
Việc chia video thành các đoạn dựa trên việc sử dụng phương thức cut trong MoviePy. Chúng ta có thể chỉ định các khoảng thời gian bắt đầu và kết thúc mà mình quan tâm.
from moviepy.editor import VideoFileClip
# Tải video
clip = VideoFileClip("input_video.mp4")
# Cắt đoạn từ giây thứ 10 đến giây thứ 20
clip1 = clip.subclip(10, 20)
# Lưu đoạn video đã cắt
clip1.write_videofile("clip1.mp4")
Mã này cắt đoạn video từ giây thứ 10 đến giây thứ 20 của video gốc. Để tiết kiệm thời gian và dung lượng ổ cứng, hãy chắc chắn rằng bạn chỉ định chính xác các mốc thời gian, để không vô tình nhận được đoạn video với "coffee break" từ xa của bạn.
Cắt video thành nhiều phần
Bạn có thể cắt video thành nhiều phần và lưu chúng thành các clip riêng lẻ để ghép nối sau này.
Cắt video thành ba đoạn
Giả sử bạn có một video dài 30 giây và muốn chia nó thành ba đoạn bằng nhau, mỗi đoạn 10 giây.
# Tạo ba đoạn bằng nhau
clip1 = video.subclip(0, 10)
clip2 = video.subclip(10, 20)
clip3 = video.subclip(20, 30)
# Lưu các đoạn video
clip1.write_videofile("clip_part1.mp4")
clip2.write_videofile("clip_part2.mp4")
clip3.write_videofile("clip_part3.mp4")
Mã này tạo ra ba clip video:
clip1— từ giây thứ 0 đến giây thứ 10,clip2— từ giây thứ 10 đến giây thứ 20,clip3— từ giây thứ 20 đến giây thứ 30.
Mỗi đoạn được lưu thành một tệp video riêng.
Cắt các đoạn thú vị nhất
Thường thì một đoạn video là không đủ, bạn cần cả một bộ sưu tập các "bông hoa video". Chúng ta có thể tạo ra nhiều đoạn như vậy và lưu chúng.
clip2 = clip.subclip(30, 40)
clip3 = clip.subclip(50, 60)
clip2.write_videofile("clip2.mp4")
clip3.write_videofile("clip3.mp4")
Bây giờ chúng ta có ba đoạn, được cắt từ video gốc. Gần như giống như ghép puzzle lại, nhưng theo cách ngược lại.
2. Ghép các clip
Sau khi cắt, bây giờ là lúc ghép các đoạn video lại, nhưng theo một hình thức mới, sáng tạo hơn. Khả năng ghép nhiều đoạn video thành một trong MoviePy sẽ giúp ích rất nhiều.
Tạo các comp quy tụ từ các đoạn video
Để ghép các clip, chúng ta sử dụng phương thức concatenate_videoclips. Phương thức này cho phép bạn nối các clip lại với nhau theo thứ tự được chỉ định.
from moviepy.editor import concatenate_videoclips
# Ghép các clip thành một
final_clip = concatenate_videoclips([clip1, clip2, clip3])
# Lưu video đã ghép
final_clip.write_videofile("final_video.mp4")
Bây giờ chúng ta có một dự án video mới, là sự kết hợp của những khoảnh khắc tuyệt vời nhất của bạn. Hoặc tình cờ ngẫu nhiên, nếu bạn quên kiểm tra thứ tự các clip.
Thêm âm thanh khi ghép các clip
Khi ghép các đoạn video, bạn cũng có thể thêm đoạn âm thanh. Ví dụ, nếu bạn có một tệp âm nhạc hoặc âm thanh khác, bạn có thể chèn nó vào video đã ghép.
Ghép các đoạn video và thêm âm thanh
from moviepy.editor import AudioFileClip
# Tạo audio clip
audio_clip = AudioFileClip("background_music.mp3")
# Thêm âm thanh vào video đã ghép
final_clip_with_audio = final_clip.set_audio(audio_clip)
final_clip_with_audio.write_videofile("combined_with_audio.mp4")
Ở đây:
AudioFileClip("background_music.mp3")tạo một đoạn âm thanh từ file nhạc.set_audio(audio_clip)thêm âm thanh vào video đã ghépfinal_clip.
3. Chuyển đổi giữa các clip
Trong MoviePy, để tạo hiệu ứng chuyển đổi giữa các clip, chúng ta sử dụng lớp CompositeVideoClip và các hiệu ứng khác nhau. Ý tưởng chính là chồng một clip lên clip khác bằng các hiệu ứng như độ mờ hoặc dịch chuyển. Các chuyển đổi này thường bao gồm việc thay đổi độ trong suốt hoặc dịch các khung hình, sao cho một clip chuyển đổi mượt mà sang clip kế tiếp.
Chuyển đổi bằng hiệu ứng làm mờ dần (Fade)
Làm mờ dần là một trong những hiệu ứng phổ biến nhất, nơi clip đầu tiên dần biến mất, và clip tiếp theo dần hiện lên màn hình. Hiệu ứng này được tạo bởi chức năng crossfadein() hoặc crossfadeout().
Chuyển đổi bằng làm mờ dần giữa hai clip
from moviepy.editor import VideoFileClip, concatenate_videoclips
# Tải hai clip
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5) # Clip đầu tiên 5 giây
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5) # Clip thứ hai 5 giây
# Cài đặt hiệu ứng mờ dần
clip1 = clip1.crossfadeout(1) # Làm mờ clip 1 trong 1 giây
clip2 = clip2.crossfadein(1) # Làm xuất hiện clip 2 trong 1 giây
# Ghép clip với chuyển đổi
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_transition.mp4")
Trong ví dụ này:
crossfadeout(1)làm cho clip đầu tiên dần mất đi độ trong suốt trong vòng một giây.crossfadein(1)làm cho clip thứ hai dần hiện lên trong vòng một giây.concatenate_videoclips([clip1, clip2], method="compose")ghép hai clip lại với nhau sử dụng hiệu ứng chuyển đổi "làm mờ dần".
Chuyển đổi với hiệu ứng mờ đen
Mờ đen (hoặc chuyển sang màn hình đen) là một hiệu ứng mà clip đầu tiên mờ dần thành màn hình đen, và sau đó clip tiếp theo hiện ra từ màn hình đen. Chuyển đổi này tạo cảm giác hoàn thành một cảnh trước khi bắt đầu cảnh tiếp theo.
from moviepy.editor import VideoFileClip, concatenate_videoclips
# Tải hai clip
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5)
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5)
# Cài đặt hiệu ứng mờ đen
clip1 = clip1.fadeout(1) # Mờ clip 1 thành màu đen
clip2 = clip2.fadein(1) # Xuất hiện clip 2 từ màu đen
# Ghép clip với hiệu ứng mờ đen
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_to_black_transition.mp4")
Ở đây:
fadeout(1)làm clip mờ dần thành màn hình đen trong vòng một giây.fadein(1)làm clip tiếp theo xuất hiện từ màn hình đen trong vòng một giây.
Bây giờ video của bạn không còn chỉ là tập hợp các đoạn nữa, mà đã là một siêu phẩm với các chuyển đổi mượt mà. Như bạn thấy, chúng ta đã bổ sung các hiệu ứng nhập & xuất để làm video mượt mà hơn.
4. Ứng dụng thực tiễn
Kỹ năng có được từ bài giảng này rất hữu ích. Hãy tưởng tượng bạn đang tạo một tutorial về lập trình, một video quảng cáo cho thư viện mới, hoặc biên tập một video về chú mèo của bạn trong hành trình đến với thế giới IT (vâng, cả điều này cũng có thể!). Việc biết cách cắt video và ghép chúng theo từng khối chủ đề là một bước tiến để trở thành bậc thầy chỉnh sửa video và tự động hóa.
Các lỗi thường gặp
Khi làm việc với cắt và ghép video, hãy cẩn thận với các mốc thời gian. Chúng ta đều đã từng thấy những khoảnh khắc khi video bất ngờ dừng lại (và lại chuyển sang những slide nhàm chán từ hội thảo). Hãy đảm bảo rằng các mốc thời gian của bạn chính xác và không có lỗi. MoviePy đôi khi có thể báo lỗi về định dạng không hợp lệ hoặc clip trống, vì vậy hãy kiểm tra mã của bạn trước khi chạy.
Hy vọng rằng, bây giờ bạn không chỉ được trang bị kiến thức mà còn cảm thấy chút phấn khích về những khả năng mở ra trước mắt. Tiến lên, tiến vào thế giới chỉnh sửa video và những giải pháp sáng tạo với Python và MoviePy!
GO TO FULL VERSION