1. 切割影片
這次課程的重點是學習如何使用 MoviePy 切割影片並合併剪輯。你會學到如何分割影片成小片段,然後將這些片段組合成一個完整的視頻專案。就像做一個"Python 混合影片早餐",用程式碼來玩你的影片。
我們先來看看如何把影片分割成片段。這個技巧在很多場景下都能用,比如製作你最近的科研發現的 demo,或者剪下你在 zoom 會議時那些奇妙的眨眼片刻。
按照時間分割影片
影片分割功能的核心是使用 MoviePy 的 cut
方法。我們可以指定影片的開始和結束時間區間,來提取我們感興趣的部分。
from moviepy.editor import VideoFileClip
# 加載影片
clip = VideoFileClip("input_video.mp4")
# 擷取從第 10 到第 20 秒的片段
clip1 = clip.subclip(10, 20)
# 保存擷取的片段
clip1.write_videofile("clip1.mp4")
這段程式碼擷取了原影片中第 10 秒到第 20 秒的片段。為了保護你的神經和硬碟空間,別忘了正確設定時間標記,免得抓到什麼奇怪的片段,比如你在遠端咖啡休息時打瞌睡的畫面。
將影片切成多個部分
你可以將影片切成多個部分,並將它們分別保存為單獨的片段,方便之後合併使用。
將影片切成三段
假如我們有一段長度為 30 秒的影片,我們想把它分成三個平等的 10 秒片段。
# 創建三個等長的片段
clip1 = video.subclip(0, 10)
clip2 = video.subclip(10, 20)
clip3 = video.subclip(20, 30)
# 保存片段
clip1.write_videofile("clip_part1.mp4")
clip2.write_videofile("clip_part2.mp4")
clip3.write_videofile("clip_part3.mp4")
這段程式碼創建了三個影片片段:
clip1
— 從 0 到 10 秒,clip2
— 從 10 到 20 秒,clip3
— 從 20 到 30 秒。
每個片段都以單獨的影片檔案保存。
剪輯出最有趣的片段
有時候一個片段是不夠的,你需要一整束「影片花」。我們可以創建多個這樣的片段並保存它們。
clip2 = clip.subclip(30, 40)
clip3 = clip.subclip(50, 60)
clip2.write_videofile("clip2.mp4")
clip3.write_videofile("clip3.mp4")
現在我們有三個原影片剪出的片段。有點像拼拼圖,只是順序反過來。
2. 合併剪輯
剪完片段後,是時候把我們的影片雲重新拼裝回來了,但這次是以全新的形式。在這裡我們將利用 MoviePy 的功能把多個片段合併到一起。
創作影片剪輯的綜合剪輯
要合併剪輯,我們可以使用 concatenate_videoclips
方法。這個方法允許你按照指定的順序將片段依次拼接起來。
from moviepy.editor import concatenate_videoclips
# 合併剪輯成一個影片
final_clip = concatenate_videoclips([clip1, clip2, clip3])
# 保存合併後的影片
final_clip.write_videofile("final_video.mp4")
現在我們有了一個新的影片專案,這個專案集合了你最好的時刻或者隨意拼湊的片段(如果你忘了有序性)。
合併剪輯時添加音訊
合併影片剪輯時你還可以加入音訊,比如背景音樂或其他音效。
合併影片剪輯並添加背景音樂
from moviepy.editor import AudioFileClip
# 創建音訊剪輯
audio_clip = AudioFileClip("background_music.mp3")
# 將音訊添加到合併影片中
final_clip_with_audio = final_clip.set_audio(audio_clip)
final_clip_with_audio.write_videofile("combined_with_audio.mp4")
這裡:
AudioFileClip("background_music.mp3")
從音樂檔案中創建音訊剪輯。set_audio(audio_clip)
將音訊添加到合併影片final_clip
中。
3. 片段間的過渡效果
在 MoviePy 中,可以使用 CompositeVideoClip
類以及各種效果來創建片段間的過渡效果。關鍵的想法是通過透明度變化或圖像偏移等效果將一個片段平滑過渡到另一個片段。
漸變過渡 (Fade)
漸變 是最受歡迎的過渡之一,第一個片段會逐漸淡出,第二個片段則逐漸淡入。這個效果可以使用 crossfadein()
或 crossfadeout()
函數實現。
漸變過渡的示例
from moviepy.editor import VideoFileClip, concatenate_videoclips
# 加載兩段影片
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5) # 第一段 5 秒
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5) # 第二段 5 秒
# 設定漸變效果
clip1 = clip1.crossfadeout(1) # 第一段漸漸消失 1 秒
clip2 = clip2.crossfadein(1) # 第二段漸漸出現 1 秒
# 合併以漸變效果的片段
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_transition.mp4")
在此示例中:
crossfadeout(1)
讓第一段逐漸透明 1 秒。crossfadein(1)
讓第二段逐漸從透明變為完整 1 秒。concatenate_videoclips([clip1, clip2], method="compose")
通過漸變效果合併了兩段影片。
黑屏過渡
黑屏(或 "淡入黑色")效果,是指第一段影片漸變為黑色,然後第二段從黑色漸漸出現,讓場景切換更有層次感。
from moviepy.editor import VideoFileClip, concatenate_videoclips
# 加載兩段影片
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5)
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5)
# 設定黑屏效果
clip1 = clip1.fadeout(1) # 第一段淡入黑色
clip2 = clip2.fadein(1) # 第二段淡出黑色
# 合併帶黑屏效果的片段
final_clip = concatenate_videoclips([clip1, clip2], method="compose")
final_clip.write_videofile("fade_to_black_transition.mp4")
這裡:
fadeout(1)
將片段淡到黑色畫面 1 秒。fadein(1)
從黑色畫面淡出第二段影片 1 秒。
現在你的影片已經不再只是普通的剪輯集合,而是一個充滿藝術感的作品,配合平滑的過渡效果,讓它更具吸引力。
4. 實踐應用
這堂課中學到的技能非常實用。想像一下,你正在創建一個程式教學影片、宣傳新庫的廣告,甚至是你家貓成為 IT 世界新星的紀錄片!學會如何切割影片、組織成主題塊,這是成為影片編輯大師和自動化專家的第一步。
常見錯誤
在切割和合併影片時,要仔細處理時間標記。相信大家都不想看到影片莫名其妙中斷(又是那些無聊的會議幻燈片重複出現)。確認你的時間標記是正確的,避免出現錯誤。MoviePy 有時可能會抱怨格式錯誤或空剪輯,因此一定要在執行程式碼前檢查一下代碼。
希望現在的你不僅得到了知識的武裝,還感到一絲對未來可能性的興奮。讓我們一起邁向使用 Python 和 MoviePy 的影片編輯與創意解決方案的世界吧!
GO TO FULL VERSION