CodeGym /Java Adesua /Python SELF TW /建立與處理視訊與音訊剪輯:添加音效與匯出帶音訊的視訊

建立與處理視訊與音訊剪輯:添加音效與匯出帶音訊的視訊

Python SELF TW
等級 47 , 課堂 1
開放

1. 視訊剪輯與音訊剪輯

歡迎來到這堂講座,我們將成為真正的視訊魔術師,瞭解如何將畫面和聲音混合在一起,製造出屬於自己的魔法!當然,我們會用 Python 和 MoviePy!今天的目標是學會處理視訊和音訊剪輯,為視訊添加音軌,並將結果匯出成優雅的文件。

那麼,準備好耐心,專注於一點點細節,讓我們出發吧!探索用 Python 進行視訊編輯的頂峰!

我們從基礎開始——建立視訊剪輯。作為真正的藝術家,我們必須學會從視訊中提取畫面,為其添加音軌,並能將所有這些內容匯出。MoviePy 是完成這項任務的最佳工具。

處理視訊和音訊剪輯的主要類別

在 MoviePy 中,處理多媒體的主要類別包括:

  • VideoFileClip — 用於建立和處理視訊剪輯。
  • AudioFileClip — 用於處理音訊剪輯。

建立視訊剪輯物件

首先,我們使用 VideoFileClip 類別建立一個視訊剪輯。它允許打開視訊文件並訪問不同的參數和編輯方法。


from moviepy.editor import VideoFileClip

# 開啟視訊文件並建立視訊剪輯
video_clip = VideoFileClip("sample_video.mp4")

# 輸出視訊剪輯的資訊
print("視訊長度:", video_clip.duration, "秒")
print("視訊尺寸:", video_clip.size)

在這個範例中:

  • VideoFileClip("sample_video.mp4") 打開視訊文件並建立一個 video_clip 物件,可以用於添加音效和其他更改。
  • video_clip.durationvideo_clip.size 提供視訊的長度和尺寸訊息。

建立空的視訊剪輯

有時需要從頭開始——從零建立剪輯。MoviePy 可以通過簡單調用 ColorClip 來完成這個功能。


from moviepy.editor import ColorClip

# 建立一個紅色剪輯,大小為 640x360,時長為 5 秒
blank_clip = ColorClip(size=(640, 360), color=[255, 0, 0], duration=5)

blank_clip.write_videofile("blank_clip.mp4", fps=25)

這會生成一個紅色的 5 秒視訊。簡單,但也充滿無限可能吧?

從視訊剪輯中提取音訊

首先,從已經載入的視訊剪輯中提取音訊。如果你喜歡原始的音軌,想要單獨使用它,這會很有用。


# 從視訊中提取音訊
audio = video.audio

# 將音訊保存到文件
audio.write_audiofile("extracted_audio.mp3")

現在你擁有來自視訊的音訊文件了。當你只需要聲音時,這會非常便利。

建立音訊剪輯物件

MoviePy 還允許添加音訊剪輯。為此可使用 AudioFileClip 類別,它可以打開音訊文件,並像處理視訊剪輯一樣處理音訊。


from moviepy.editor import AudioFileClip

# 開啟音訊文件並建立音訊剪輯
audio_clip = AudioFileClip("background_music.mp3")

# 輸出音訊長度
print("音訊長度:", audio_clip.duration, "秒")

2. 編輯視訊剪輯與音訊剪輯

為視訊添加音訊

現在我們有了視訊剪輯和音訊剪輯,可以使用 MoviePy 的 set_audio() 方法將它們結合起來,將音訊軌道添加到視訊中。


# 添加音訊剪輯到視訊剪輯
video_with_audio = video_clip.set_audio(audio_clip)

這段程式碼建立了一個新的物件 video_with_audio,其中音訊剪輯 audio_clip 被整合到視訊剪輯 video_clip 中。

調整音訊剪輯的長度

有時音訊剪輯和視訊剪輯的長度不一樣。為了讓音訊剪輯符合視訊,可以使用 subclip() 方法來裁剪音訊,也可以讓音訊重複直到視訊結束。

裁剪音訊剪輯使其匹配視訊長度


# 裁剪音訊剪輯,使其與視訊長度相符
audio_clip_trimmed = audio_clip.subclip(0, video_clip.duration)

# 將裁剪後的音訊添加到視訊
video_with_audio = video_clip.set_audio(audio_clip_trimmed)

在這個範例中:

  • audio_clip.subclip(0, video_clip.duration) 生成一個新的音訊剪輯,裁剪到視訊剪輯的長度。
  • 方法 set_audio() 將裁剪後的音訊添加到視訊中。

重複音訊剪輯以匹配視訊長度

如果你希望音訊剪輯重複播放直到視訊結束,可以使用 fx() 方法與 loop 函數。


from moviepy.audio.fx.all import loop

# 重複播放音訊剪輯直到視訊長度結束
audio_clip_looped = loop(audio_clip, duration=video_clip.duration)

# 向視訊添加重複的音訊
video_with_audio = video_clip.set_audio(audio_clip_looped)

在這個範例中:

  • loop(audio_clip, duration=video_clip.duration) 生成一個重複的音訊,會一直播放到視訊結束。
  • 我們使用 set_audio() 將重複音訊添加到視訊中。

3. 匯出帶有音訊的視訊

匯出包含音訊的視訊剪輯

確保安裝必要的 codec,例如 libx264 用於視訊,aac 用於音訊,否則我們精彩的作品可能無法播放。

匯出視訊時,我們可以指定一些參數,例如解析度和幀率:


# 匯出帶有新設定的視訊
video_with_audio.write_videofile(
    "output_video_with_audio.mp4",
    codec='libx264',
    audio_codec='aac',
    fps=30,
    preset='medium',
    bitrate="2000k"
)

在這個範例中:

  • write_videofile("output_video_with_audio.mp4", codec="libx264", audio_codec="aac") 將視訊與音訊保存為 MP4 格式,使用視訊 codec libx264 和音訊 codec aac

嗶嗶!我們的傑作準備好上傳到 YouTube、Vimeo 或者發送給朋友了。

將音軌添加到視訊後,可以使用 write_videofile() 方法匯出成果作為新文件。

調整音訊剪輯的音量

為了調整視訊中音訊的音量,可以使用 volumex() 方法,該方法用一個特定的比例調整音量。例如,如果你想讓聲音變小,設置值小於 1,反之則設置大於 1。

範例:降低音訊音量


# 將音訊剪輯的音量減少一半
audio_clip_quieter = audio_clip.volumex(0.5)

# 將低音量的音訊添加到視訊
video_with_audio = video_clip.set_audio(audio_clip_quieter)
video_with_audio.write_videofile("output_video_quieter.mp4")

在這個範例中:

  • audio_clip.volumex(0.5) 將音訊音量降低到原始的 50%。
  • set_audio()write_videofile() 將這段音訊添加到視訊並保存結果。

4. 完整範例

建立帶有音訊的視訊並設置參數

現在讓我們將所有步驟結合起來,通過一個範例,我們將為視訊添加音訊,裁剪音訊至所需長度,調整音量,並匯出最終視訊。


from moviepy.editor import VideoFileClip, AudioFileClip
from moviepy.audio.fx.all import loop

# 打開視訊文件
video_clip = VideoFileClip("sample_video.mp4")

# 打開音訊文件
audio_clip = AudioFileClip("background_music.mp3")

# 調整音訊的音量
audio_clip_adjusted = audio_clip.volumex(0.7)

# 將音訊重複播放直到視訊結束
audio_clip_looped = loop(audio_clip_adjusted, duration=video_clip.duration)

# 將音訊添加到視訊
video_with_audio = video_clip.set_audio(audio_clip_looped)

# 匯出帶音訊的視訊
video_with_audio.write_videofile("final_output_with_audio.mp4", codec="libx264", audio_codec="aac")

在這個範例中:

  1. 我們載入視訊和音訊。
  2. 使用 volumex() 調整音訊音量。
  3. 將音訊重複至視訊長度。
  4. 將音訊添加到視訊。
  5. 匯出為 final_output_with_audio.mp4 文件。

常見錯誤及解決方案

在使用 MoviePy 的過程中,可能會遇到一些像幽靈般的錯誤,阻礙我們的創作。例如,音訊 codec 問題或格式不兼容問題。使用 audio_codec='aac' 進行現代音訊編碼,這能解決很多問題。

如果視訊或音訊無法匯出,即使程式碼看起來沒問題,確認是否安裝了必要的 codec。下載或更新 FFMPEG,MoviePy 依賴它作為處理視訊和音訊的引擎。

現在,你學會了創建和匯出視訊剪輯的技巧,未來的可能性無限大。這些技能可以用於許多項目:從製作教育影片到行銷材料。在工作面試中,自動化處理視訊工作的能力可能成為你的優勢。而在日常工作中,也能節省大量時間處理多媒體內容。

是時候將程序設計與創意的魔法實踐起來,用你的視訊剪輯作品驚豔世界吧!別忘了,正如一位智慧的程式設計師所言:「當程式碼不工作時,多喝點咖啡;如果工作了,那就多加點自信囉!」

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION