取出影片聲音、影片加入聲音
這篇文章會介紹使用 Python 的 pydub 和 moviepy 第三方函式庫,取出影片的聲音並將聲音儲存為 mp3,接著也會使用 moviepy 函式庫,將影片加入另外一段聲音。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
使用 pydub 取出影片聲音,儲存為 mp3
參考「取得聲音資訊」文章,安裝 pydub 函式庫,安裝後使用下方的程式碼,就能讀取影片的聲音,並將聲音儲存為 mp3。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
video = AudioSegment.from_file("oxxostudio.mp4") # 讀取 mp4 檔案
output.export('video.mp3') # 講讀取的聲音輸出為 mp3
print('ok')
參考「聲音音量調整」和「剪輯指定長度的聲音」兩篇文章,將聲音放大或剪輯後,再輸出為 mp3。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from pydub import AudioSegment
video = AudioSegment.from_file("oxxostudio.mp4")
output = video[2000:10000] # 剪輯聲音
output = output[:] + 10 # 放大聲音
output.export('output.mp3')
print('ok')
使用 moviepy 取出影片聲音,儲存為 mp3
除了使用 pydub 函式庫,也可以輸入下列指令安裝 moviepy 函式庫 ( 本機環境使用 pip 或 pip3 ),透過 moviepy 取出影片的聲音。
!pip install moviepy
安裝後,執行下方的程式碼讀取影片,並將影片的聲音取出,輸出為 mp3 ( 相關參數參考 write_audiofile )。
如果在讀檔或存檔的過程中遇到找不到 ffmpeg 套件,就再使用 pip install ( Anaconda 可使用 conda install ) 的方式安裝 ffmpeg,ffmpeg 的目的在於提供影片存檔必要的編碼。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4") # 讀取影片
audio = video.audio # 取出聲音
audio.write_audiofile("song.mp3") # 輸出聲音為 mp3
print('ok')
使用 moviepy,替影片加入聲音
使用下方的指令在 Colab 裡安裝 moviepy 函式庫 ( 本機環境使用 pip 或 pip3 )。
!pip install moviepy
安裝後,執行下方的程式碼讀取影片和聲音,並在 output 方法裡將兩者合併後輸出 ( 注意,合併後新的聲音會取代掉原本影片的聲音,相關參數參考 write_videofile ) )。
如果在讀檔或存檔的過程中遇到找不到 ffmpeg 套件,就再使用 pip install ( Anaconda 可使用 conda install ) 的方式安裝 ffmpeg,ffmpeg 的目的在於提供影片存檔必要的編碼。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4") # 讀取影片
audio = AudioFileClip("song.mp3") # 讀取音樂
output = video2.set_audio(audio) # 合併影片與聲音
output.write_videofile("output.mp4", temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
# 注意要設定相關參數,不然轉出來的影片會沒有聲音
print('ok')
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~