Python從視頻中提取音頻的操作
OpenCV中使用VideoCapture類寫的視頻是沒有音頻的,如果要進(jìn)一步處理音頻則需要用到一個庫——MoviePy,這個庫是Python視頻編輯庫,可裁剪、拼接、標(biāo)題插入、視頻合成、視頻處理和自定義效果。
安裝pip install moviepy代碼
from moviepy.editor import *video = VideoFileClip(’test.mp4’)audio = video.audioaudio.write_audiofile(’test.mp3’)
不安裝moviepy視頻編輯庫可以直接使用ffmpeg-python庫,見參考文獻(xiàn)4,代碼稍微復(fù)雜點(diǎn)
音頻格式extensions_dict = { 'mp4': {’type’:’video’, ’codec’:[’libx264’,’libmpeg4’, ’aac’]}, ’ogv’: {’type’:’video’, ’codec’:[’libtheora’]}, ’webm’: {’type’:’video’, ’codec’:[’libvpx’]}, ’avi’: {’type’:’video’}, ’mov’: {’type’:’video’}, ’ogg’: {’type’:’audio’, ’codec’:[’libvorbis’]}, ’mp3’: {’type’:’audio’, ’codec’:[’libmp3lame’]}, ’wav’: {’type’:’audio’, ’codec’:[’pcm_s16le’, ’pcm_s24le’, ’pcm_s32le’]}, ’m4a’: {’type’:’audio’, ’codec’:[’libfdk_aac’]} }
可看到支持ogg、mp3、wav和m4a四種格式,個人測試m4a輸出失敗,建議只用mp3和wav
測試2分鐘的視頻導(dǎo)出mp3為1.83Mb,wav為20.1Mb
mp3是有損格式,wav是無損格式,按需選擇
備注要實現(xiàn)更底層的音視頻處理應(yīng)用ffmpeg
補(bǔ)充:python處理mp4視頻提取音頻轉(zhuǎn)為mp3或者wav,并進(jìn)行截取
mp4視頻文件提取音頻轉(zhuǎn)為mp3或者wav文件
mp3是有損文件,wav是無損文件,就像我測試的視頻,mp3導(dǎo)出只有幾十k,wav文件導(dǎo)出有3M多。
from moviepy.editor import *video = VideoFileClip(’aa.mp4’)audio = video.audioaudio.write_audiofile(’test.wav’)audio.write_audiofile(’test.mp3’)
截取map或者wav文件
from scipy.io import wavfilelike = wavfile.read(’test.wav’)# print (like)# 音頻結(jié)果將返回一個tuple。第一維參數(shù)是采樣頻率,單位為秒;第二維數(shù)據(jù)是一個ndarray表示歌曲,如果第二維的ndarray只有一個數(shù)據(jù)表示單聲道,兩個數(shù)據(jù)表示立體聲。所以,通過控制第二維數(shù)據(jù)就能對歌曲進(jìn)行裁剪。# 對like這個元組第二維數(shù)據(jù)進(jìn)行裁剪,所以是like[1];第二維數(shù)據(jù)中是對音樂數(shù)據(jù)切分。 start_s表示你想裁剪音頻的起始時間;同理end_s表示你裁剪音頻的結(jié)束時間。乘44100 是因為每秒需要進(jìn)行44100次采樣# 這里表示對該音頻的13-48秒進(jìn)行截取wavfile.write(’test2.wav’,44100,like[1][13*44100:48*44100])
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. 阿里前端開發(fā)中的規(guī)范要求2. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案3. XML入門精解之結(jié)構(gòu)與語法4. css進(jìn)階學(xué)習(xí) 選擇符5. XML入門的常見問題(一)6. PHP字符串前后字符或空格刪除方法介紹7. html小技巧之td,div標(biāo)簽里內(nèi)容不換行8. 詳解PHP實現(xiàn)HTTP服務(wù)器過程9. 概述IE和SQL2k開發(fā)一個XML聊天程序10. Echarts通過dataset數(shù)據(jù)集實現(xiàn)創(chuàng)建單軸散點(diǎn)圖
