软件开发技术基础 第4版 课件 6-3 音频视频处理_第1页
软件开发技术基础 第4版 课件 6-3 音频视频处理_第2页
软件开发技术基础 第4版 课件 6-3 音频视频处理_第3页
软件开发技术基础 第4版 课件 6-3 音频视频处理_第4页
软件开发技术基础 第4版 课件 6-3 音频视频处理_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

音频视频处理库音频录制与回放利用pyaudio进行录音,关键步骤有三步:

①建立音频流对象;②建立wav文件;③循环将音频流中的数据写入wav文件。建立音频流对象需使用pyAudio类的open方法,其参数包括采样格式(format)、声道数(channels)、采样率(rate)、数据块大小(frames_per_buffer)、是否为输入流(input)、是否为输出流(output)等。录音时将参数input设为True,播音时将参数output设为True。录音文件可利用wave模块的open方法建立。为了正确存储音频,新建的wav文件的参数(采样格式、声道数等)应该和音频流对应的参数保持一致西安交通大学计算机教学实验中心2音频编辑音频剪辑可以使用pydub库实现。该模块自身只支持wav格式的文件处理。如果想处理其他格式的音频,那么需要在本地安装FFmpeg库。31.打开音频文件打开音频文件要使用pydub的AudioSegment类,下面是打开不同格式音频文件的方法: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.音频剪切打开音频文件后,就可以进行剪切、拼接等操作。例如:clip=music[:20*1000] #截取前20秒clip=music[-20000:] #截取后20秒clip=music[20*1000:40*1000] #从第20秒截取到第40秒以上括号内的时间都要转换成以毫秒为单位。3.音频拼接两段音频的拼接用加号就可以实现,例如:clip1=music[:20*1000] #裁剪前20秒音频clip2=music[-20*1000:] #裁剪后20秒音频clip=clip1+clip2 #拼接音频音频编辑54.调节音量音量的增减只需要用音频对象加一个常数即可:music=music-5 #音量减少5dBmusic=music+5 #音量增加5dB5.渐入渐出效果在连续演奏多段音乐时,交叉渐入渐出(淡入、淡出)是两段音乐之间常见的过渡方式。假如有music1和music2两段音频,有6秒的交叉过度:music3=music1.append(music2,crossfade=6000) 视频回放6ffpyplayer库共有Player、Writer、Images、Tools四个模块Player模块用于音视频播放Writer模块用于生成视频文件(不含音频)Images模块用于图像格式转换Tools模块用于获取编码信息、编码转换等操作。Player模块只有一个MediaPlayer类,它移植了FFmpeg中的播放器FFplay的大多数功能。该类使用get_frame()函数获取视频中的一帧图像,同时利用SDL自动播放音频。

视频回放7视频播放器使用了ffpyplayer库的MediaPlayer类、Image

类,pillow库的Image类、ImageTk类。其中ImageTk可以从pillow图像创建适合Tkinter使用的位图图像。最终图像在Tkinter的Label上显示。具体步骤如下:①利用MediaPlayer类的get_frame()方法获取每一帧图像;②利用ffpyplayer的Image类方法to_memoryview()将图像转换成内存中的数组;③利用pillow的Image类方法fromarray()将得到的数组转换成pillow图像;④利用pillow的ImageTk类方法将pillow图像转换成适合Tkinter使用的图像,并在Label上显示该图像。

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

img,tm=frame

#获取帧的图及当前时间[w,h]=img.get_size() #获取图像宽、高arr=np.asarray(img.to_memoryview()[0]).reshape(h,w,3)

#将图像转为数组列表current_image=Image.fromarray(arr).resize((560,320))

#数组转换成图像,缩放imgtk=ImageTk.PhotoImage(image=current_image)

#创建适用于tkinter的图像movieLabel.config(image=imgtk)

#动态修改标签上的图像

movieLabel.update() #每次执行都更新界面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)

#转换图像为Tk图像movieLabel=Label(root,image=img2) #创建用于播放视频的容器movieLabel.pack(padx=10,pady=10)tocol('WM_DELETE_WINDOW',closeWindow)PlayVideo()视频编辑10可以利用moviepy或opencv进行,它们都需要FFmpeg的支持才能很好地工作。安装这两个模块只需运行pip命令即可。相比而言,利用moviepy操作视频更加便利,本节仅介绍moviepy的简单使用方法。1.打开视频文件引入moviepy.editor下的全部类:frommoviepy.editorimport*利用VideoFileClip类打开视频,建立相关对象:video=VideoFileClip('西迁精神.mp4')2.保存视频片段假设clip是修改完成的视频对象,使用下面方法可以保存视频文件:clip.write_videofile("newclip.mp4")视频编辑113.获取视频信息输出视频片段clip的时长(秒)、图像分辨率(宽和高)、每秒帧数:print(clip.duration,clip.size,clip.fps)4.截取视频片段假设clip是修改完成的视频对象,使用下面方法可以保存视频文件:clip.write_videofile("newclip.mp4")5.视频片段拼接假设clip1和clip2为两个视频片段,用concatenate_videoclips方法拼接,下面语句中的参数method='compose'表示对于任何视频参数均以原视频的最大值为基础进行拼接。final_clip=concatenate_videoclips([clip1,clip2],method='compose')

final_clip.write_videofile("composition.mp4") #保存片段视频编辑126.按区域裁剪视频对象类的crop()方法可以裁剪一个矩形区域的视频,其参数(x1,y1)指定区域的左上角,(x2,y2)指定区域的右下角。cropped=clip.crop(x1=0,y1=0,x2=460,y2=275) #裁剪clip的一个区域cropped.write_videofile("cut.mp4") #保存结果7.截取一帧图像下面用视频对象类的save_frame()函数截取视频clip中第7.2秒的视频画面并存储为screen.jpg。clip.save_frame('screen.jpg',t=7.2)视频编辑138.调节音量大小视频对象类的的volumex()函数用于调节音量大小,参数为实数。#在生成的clip1中调低音量为当前的70%(volume*0.7)clip1=clip.volumex(0.7) #在生成的clip1中调高音量为当前的2倍(volume*2.0)clip1=clip.volumex(2.0)9.调整分辨率可以用视频对象类的resize()方法调整分辨率。以下两个语句是等价的。clip_scale=clip.resize((clip.w//2,clip.h//2)) #宽度和高度都缩一半clip_scale=clip.resize(0.5) #等比缩放0.5视频编辑1410.调整播放速度可以用视频对象类的speedx()方法调整播放速度。clip_sp2x=clip.speedx(2) #创建倍速视频clip_sp05x=clip.speedx(0.5) #创建速度减半的视频11.调节视频帧

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论