軟件開(kāi)發(fā)技術(shù)基礎(chǔ) 第4版 課件 6-3 音頻視頻處理_第1頁(yè)
軟件開(kāi)發(fā)技術(shù)基礎(chǔ) 第4版 課件 6-3 音頻視頻處理_第2頁(yè)
軟件開(kāi)發(fā)技術(shù)基礎(chǔ) 第4版 課件 6-3 音頻視頻處理_第3頁(yè)
軟件開(kāi)發(fā)技術(shù)基礎(chǔ) 第4版 課件 6-3 音頻視頻處理_第4頁(yè)
軟件開(kāi)發(fā)技術(shù)基礎(chǔ) 第4版 課件 6-3 音頻視頻處理_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

音頻視頻處理庫(kù)音頻錄制與回放利用pyaudio進(jìn)行錄音,關(guān)鍵步驟有三步:

①建立音頻流對(duì)象;②建立wav文件;③循環(huán)將音頻流中的數(shù)據(jù)寫(xiě)入wav文件。建立音頻流對(duì)象需使用pyAudio類的open方法,其參數(shù)包括采樣格式(format)、聲道數(shù)(channels)、采樣率(rate)、數(shù)據(jù)塊大?。╢rames_per_buffer)、是否為輸入流(input)、是否為輸出流(output)等。錄音時(shí)將參數(shù)input設(shè)為T(mén)rue,播音時(shí)將參數(shù)output設(shè)為T(mén)rue。錄音文件可利用wave模塊的open方法建立。為了正確存儲(chǔ)音頻,新建的wav文件的參數(shù)(采樣格式、聲道數(shù)等)應(yīng)該和音頻流對(duì)應(yīng)的參數(shù)保持一致西安交通大學(xué)計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心2音頻編輯音頻剪輯可以使用pydub庫(kù)實(shí)現(xiàn)。該模塊自身只支持wav格式的文件處理。如果想處理其他格式的音頻,那么需要在本地安裝FFmpeg庫(kù)。31.打開(kāi)音頻文件打開(kāi)音頻文件要使用pydub的AudioSegment類,下面是打開(kāi)不同格式音頻文件的方法:frompydubimportAudioSegmentmusic=AudioSegment.from_wav('東方紅.wav') #讀取wav文件music=AudioSegment.from_mp3('東方紅.mp3') #讀取mp3文件music=AudioSegment.from_ogg('東方紅.ogg') #讀取ogg文件music=AudioSegment.from_flv('東方紅.flv') #讀取flv文件的音頻音頻編輯42.音頻剪切打開(kāi)音頻文件后,就可以進(jìn)行剪切、拼接等操作。例如:clip=music[:20*1000] #截取前20秒clip=music[-20000:] #截取后20秒clip=music[20*1000:40*1000] #從第20秒截取到第40秒以上括號(hào)內(nèi)的時(shí)間都要轉(zhuǎn)換成以毫秒為單位。3.音頻拼接兩段音頻的拼接用加號(hào)就可以實(shí)現(xiàn),例如:clip1=music[:20*1000] #裁剪前20秒音頻clip2=music[-20*1000:] #裁剪后20秒音頻clip=clip1+clip2 #拼接音頻音頻編輯54.調(diào)節(jié)音量音量的增減只需要用音頻對(duì)象加一個(gè)常數(shù)即可:music=music-5 #音量減少5dBmusic=music+5 #音量增加5dB5.漸入漸出效果在連續(xù)演奏多段音樂(lè)時(shí),交叉漸入漸出(淡入、淡出)是兩段音樂(lè)之間常見(jiàn)的過(guò)渡方式。假如有music1和music2兩段音頻,有6秒的交叉過(guò)度:music3=music1.append(music2,crossfade=6000) 視頻回放6ffpyplayer庫(kù)共有Player、Writer、Images、Tools四個(gè)模塊Player模塊用于音視頻播放Writer模塊用于生成視頻文件(不含音頻)Images模塊用于圖像格式轉(zhuǎn)換Tools模塊用于獲取編碼信息、編碼轉(zhuǎn)換等操作。Player模塊只有一個(gè)MediaPlayer類,它移植了FFmpeg中的播放器FFplay的大多數(shù)功能。該類使用get_frame()函數(shù)獲取視頻中的一幀圖像,同時(shí)利用SDL自動(dòng)播放音頻。

視頻回放7視頻播放器使用了ffpyplayer庫(kù)的MediaPlayer類、Image

類,pillow庫(kù)的Image類、ImageTk類。其中ImageTk可以從pillow圖像創(chuàng)建適合Tkinter使用的位圖圖像。最終圖像在Tkinter的Label上顯示。具體步驟如下:①利用MediaPlayer類的get_frame()方法獲取每一幀圖像;②利用ffpyplayer的Image類方法to_memoryview()將圖像轉(zhuǎn)換成內(nèi)存中的數(shù)組;③利用pillow的Image類方法fromarray()將得到的數(shù)組轉(zhuǎn)換成pillow圖像;④利用pillow的ImageTk類方法將pillow圖像轉(zhuǎn)換成適合Tkinter使用的圖像,并在Label上顯示該圖像。

視頻回放8fromtkinterimport*importnumpyasnpfromPILimportImage,ImageTkfromffpyplayer.playerimportMediaPlayerval=''player=NonedefPlayVideo():globalvalframe,val=player.get_frame()whileval!='eof':ifframeisnotNone:

img,tm=frame

#獲取幀的圖及當(dāng)前時(shí)間[w,h]=img.get_size() #獲取圖像寬、高arr=np.asarray(img.to_memoryview()[0]).reshape(h,w,3)

#將圖像轉(zhuǎn)為數(shù)組列表current_image=Image.fromarray(arr).resize((560,320))

#數(shù)組轉(zhuǎn)換成圖像,縮放imgtk=ImageTk.PhotoImage(image=current_image)

#創(chuàng)建適用于tkinter的圖像movieLabel.config(image=imgtk)

#動(dòng)態(tài)修改標(biāo)簽上的圖像

movieLabel.update() #每次執(zhí)行都更新界面frame,val=player.get_frame() #讀取下一幀player.close_player()視頻回放9defcloseWindow():ifval!='eof': player.close_player()#若正在播放則先停止播放root.destroy()player=MediaPlayer("西遷精神.mp4")root=Tk()root.title('視頻播放')root.geometry("580x350+400+200")#更改大小和位置img1=Image.new("RGB",(560,320),'darkgray') #建立圖像img2=ImageTk.PhotoImage(image=img1)

#轉(zhuǎn)換圖像為T(mén)k圖像movieLabel=Label(root,image=img2) #創(chuàng)建用于播放視頻的容器movieLabel.pack(padx=10,pady=10)tocol('WM_DELETE_WINDOW',closeWindow)PlayVideo()視頻編輯10可以利用moviepy或opencv進(jìn)行,它們都需要FFmpeg的支持才能很好地工作。安裝這兩個(gè)模塊只需運(yùn)行pip命令即可。相比而言,利用moviepy操作視頻更加便利,本節(jié)僅介紹moviepy的簡(jiǎn)單使用方法。1.打開(kāi)視頻文件引入moviepy.editor下的全部類:frommoviepy.editorimport*利用VideoFileClip類打開(kāi)視頻,建立相關(guān)對(duì)象:video=VideoFileClip('西遷精神.mp4')2.保存視頻片段假設(shè)clip是修改完成的視頻對(duì)象,使用下面方法可以保存視頻文件:clip.write_videofile("newclip.mp4")視頻編輯113.獲取視頻信息輸出視頻片段clip的時(shí)長(zhǎng)(秒)、圖像分辨率(寬和高)、每秒幀數(shù):print(clip.duration,clip.size,clip.fps)4.截取視頻片段假設(shè)clip是修改完成的視頻對(duì)象,使用下面方法可以保存視頻文件:clip.write_videofile("newclip.mp4")5.視頻片段拼接假設(shè)clip1和clip2為兩個(gè)視頻片段,用concatenate_videoclips方法拼接,下面語(yǔ)句中的參數(shù)method='compose'表示對(duì)于任何視頻參數(shù)均以原視頻的最大值為基礎(chǔ)進(jìn)行拼接。final_clip=concatenate_videoclips([clip1,clip2],method='compose')

final_clip.write_videofile("composition.mp4") #保存片段視頻編輯126.按區(qū)域裁剪視頻對(duì)象類的crop()方法可以裁剪一個(gè)矩形區(qū)域的視頻,其參數(shù)(x1,y1)指定區(qū)域的左上角,(x2,y2)指定區(qū)域的右下角。cropped=clip.crop(x1=0,y1=0,x2=460,y2=275) #裁剪clip的一個(gè)區(qū)域cropped.write_videofile("cut.mp4") #保存結(jié)果7.截取一幀圖像下面用視頻對(duì)象類的save_frame()函數(shù)截取視頻clip中第7.2秒的視頻畫(huà)面并存儲(chǔ)為screen.jpg。clip.save_frame('screen.jpg',t=7.2)視頻編輯138.調(diào)節(jié)音量大小視頻對(duì)象類的的volumex()函數(shù)用于調(diào)節(jié)音量大小,參數(shù)為實(shí)數(shù)。#在生成的clip1中調(diào)低音量為當(dāng)前的70%(volume*0.7)clip1=clip.volumex(0.7) #在生成的clip1中調(diào)高音量為當(dāng)前的2倍(volume*2.0)clip1=clip.volumex(2.0)9.調(diào)整分辨率可以用視頻對(duì)象類的resize()方法調(diào)整分辨率。以下兩個(gè)語(yǔ)句是等價(jià)的。clip_scale=clip.resize((clip.w//2,clip.h//2)) #寬度和高度都縮一半clip_scale=clip.resize(0.5) #等比縮放0.5視頻編輯1410.調(diào)整播放速度可以用視頻對(duì)象類的speedx()方法調(diào)整播放速度。clip_sp2x=clip.speedx(2) #創(chuàng)建倍速視頻clip_sp05x=clip.speedx(0.5) #創(chuàng)建速度減半的視頻11.調(diào)節(jié)視頻幀

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論