使用python實現將視頻中的音頻分離出來
將視頻中的音頻分離出來
簡單介紹
使用python將音頻從視頻當中分離出來,形成一個mp3格式的音樂。
使用環境和模塊
1.python 3.7
2.moviepy—-用於視頻編輯的Python模塊,可用於基本操作(如剪切、連接、標題插入以及視頻合成、視頻處理或創建高級效果。它可以讀寫最常見的視頻格式,包括GIF。
可直接使用如下命令進行安裝:
pip install moviepy -i https://pypi.douban.com/simple
相關代碼
‘'' ##從視頻中獲取音頻 from moviepy.editor import VideoFileClip,AudioFileClip,afx video = VideoFileClip(“Why Don't We-What Am I.mp4”) audio = video.audio audio.write_audiofile(‘what am I.mp3') ‘''
運行上述代碼後,自動生成一個mp3格式音頻
效果圖如下
批量提取視頻中的音頻
1. python 提取視頻中的音頻
將視頻中的音頻分離出來,另存為MP3
方法1:FFmpeg
方法2:moviepy
2. 批量提取【目錄】
提取單個文件、提取目錄下所有視頻的音頻
1. python 提取視頻中的音頻
1.1 方法1:
使用 FFmpeg 方法提取音頻
提取代碼如下:
import os from ffmpy import FFmpeg # 獲取文件名稱 def getName(video_path): return os.path.basename(video_path).split('.')[0] # 提取並另存為 def run_ffmpeg(video_path: str, audio_path: str, format: str): ff = FFmpeg(inputs={video_path: None}, outputs={audio_path: '-f {} -vn'.format(format)}) ff.run() return audio_path # 參數接受處理 def extract(video_path: str, tmp_dir: str, ext: str): file_name = '.'.join(os.path.basename(video_path).split('.')[0:-1]) return run_ffmpeg(video_path, os.path.join(tmp_dir, '{}.{}'.format(getName(video_path), ext)), ext) if __name__ == '__main__': root = "D:\\study\\project\\python\\技巧\\提取視頻音頻\\" print(extract(root + '我是不是該安靜的走開.mp4', root, 'mp3'))
1.2 方法2:
moviepy
from moviepy.editor import * root = "D:\\study\\project\\python\\技巧\\提取視頻音頻\\" audio = VideoFileClip(root + "我是不是該安靜的走開.mp4").audio audio.write_audiofile(root + "我是不是該安靜的走開.mp3")
2. 批量提取【目錄】
提取目錄下所有視頻中的音頻,將所有音頻保存在新的目錄中,文件相對目錄對應
from moviepy.editor import * import os import filetype import argparse # 修改這裡啊 root = "C:\\Users\\26590\\Videos\\智慧城市\\" rootVoice = "C:\\Users\\26590\\Videos\\智慧城市voice\\" voiceType = "mp3" videoType = "video/mp4" # 獲取文件名稱 def getName(video_name): return os.path.basename(video_name).split('.')[0] # 修改文件後綴例如: C:/dir/a/b.png 需要轉為 C:/dir/a/b.jpg 調用函數:trAffter('C:/dir/a/b.png', 'jpg') def trAffter(path, type): a = path.split('/') b = a[-1].split('.') b[-1] = voiceType a[-1] = '.'.join(b) return '/'.join(a) # 提取音頻 def extractMp3(video_path): print("提取文件:", video_path) audio = VideoFileClip(video_path).audio # 音頻保存的路徑 voice_path = video_path.replace(root, rootVoice) print("\t音頻保存至:", trAffter(voice_path, voiceType)) audio.write_audiofile(trAffter(voice_path, voiceType)) # 遍歷目錄下的所有文件 def getVideoList(path): # 是否為文件 if not os.path.isdir(path): ft = filetype.guess(path) if ft is not None and ft.mime == videoType: extractMp3(path) else: print(f"跳過文件{path}") return # 遞歸遍歷 for dir in os.listdir(path): # 音頻保存的路徑目錄不存在新建 voice_path = path.replace(root, rootVoice) if not os.path.exists(voice_path): os.makedirs(voice_path) getVideoList(os.path.join(path, dir)) # 開始 getVideoList(root)
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- python用moviepy對視頻進行簡單的處理
- Python多個MP4合成視頻的實現方法
- Python竟然能剪輯視頻
- Python 如何實現批量轉換視頻音頻的采樣率
- python基於moviepy實現音視頻剪輯