我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑、字幕编辑、分离音频、视频音频混流等。又比如对音频文件的操作:音频剪辑,音频格式转换。再比如我们最常用的图片文件,格式转换、各个属性的编辑等。因为多媒体文件的操作众多,本文选取一些极具代表性的操作,以代码的形式实现各个操作。 操作图片的模块有许多,其中比较常用的两个就是 图片格式有多种多样,最直观的感受就是图片后缀。而格式之间的差异不仅仅是后缀的差异,最为明显的就是 然后看看如何导入模块以及如何读取图像: 我们有了上面的基础操作之后,就可以开始进行格式转换了,我们用有村大妹子的图片作为素材: 我们可以看到这是一张白色背景的图片,我们将它转成 输出的图片我就不放了,我们观察输出图片会发现,白色背景好像变透明了。不要怀疑,这只是心理作用,其实图片看上去是不会又任何变化的。但是实际上图片从原来的 虽然 图片裁剪的操作也非常常用,我们来看看 我们调用 虽然算不上是图像操作,但是还是个非常实用的操作。我们实现截屏是通过ImageGrap类实现的: 除了截取全屏我们也可以区域截屏: 参数元组含义与 除了上述操作,还有更多像是添加滤镜、对比度调节、亮度调节、色彩调节等,由于内容众多,所以不在本文详细讨论。 音频的操作也比较繁多,我们最常用到的就是音频剪辑和音量调节了。我们这里使用 安装我们还是使用pip: 然后我们来读取一个 这样我们就完成了音频文件的读取, 因为在实际操作过程中遇到了一个未找明缘由的错误,所以本文的音频操作只针对 音频剪辑的实现我们是通过类似ndarray的中括号操作的: 剪切好的片段我们可以另外存一个文件: 音量的控制我们只需要用音频对象加一个常数即可: 我们先看看重复拼接: 拼接后的音频的效果就是原音频循环两次。接下来我们看看拼接不同的音频: 交叉渐入渐出是一种比较柔和的音频专场方式,在两个音频切换的间歇会有一个重合,用代码实现如下: 我们可以看到我们一共裁剪了40秒,在生成的文件我们可以看到只有38秒,因为转场的时候有个重合的效果。当然还有更多的操作,大家可以自己去了解。 视频的操作可以通过 相比之下 在 我们还可以将音频同视频混流,在moviepy中,提供了一个读取音频文件的类,我们设置视频的音频需要创建这个类的对象: 我们都知道,视频是由一帧一帧的图片组成的,我们也可以将画面一帧一帧提取出来: 上述代码就能将视屏的每一帧以图片的形式保存下来。 截取gif和截取视频没有什么区别,不过为了减少gif的大小,我们通常会对视频进行尺寸缩放: 在上面subclip方法中,我们可以传入元组,例如: 其含义为从1分20秒截取到2分30秒。 关于多媒体的操作还有很多,到此就实现了一些比较常用,也比较实用的操作,另外还花掉了我几个小时的时间。在排查环境中的错误是确实比较麻烦,但是总归还是实验的全部代码,写作不易啊~另外感兴趣的读者可以关注我的公众号:ZackSock。
Python玩转各种多媒体,视频、音频到图片
一、图片操作
Pillow
和 opencv
,两个模块各有优势。其中opencv
是计算机视觉处理的开源模块,应用的范围更加广泛,从图像处理到视频处理,再到物体检测等。而pillow
相比直线就单纯的多,其大多数操作都是围绕图像而展开的。1.1、格式转换
png
格式图片,同其它图片有着最为直观的区别。下面我们就看看在Python中如何转换格式,我们先安装pillow
模块:pip install pillow
from PIL import Image # 读取图像 img = Image.open('ycjc.jpg') # 显示图像 img.show()
png
看看效果:from PIL import Image # 读取图像 img = Image.open('ycjc.jpg') # 格式转换,其中A为透明度 png = img.convert('RGBA') # 保存图像,因为是RGBA格式,所以后缀应该为png png.save('ycjc.png')
RGB
三个色道变成了RGBA
四个色道,我们会发现,图片变大了:A
色道的透明度全部都是0,但是实际上还是存在这个色道,所以大小方面有了明显的增加。更多转换模式可以产考超全Python图像处理讲解(多图预警)。1.2、图片裁剪
pillow
如何裁剪图片:from PIL import Image # 读取图像 img = Image.open('ycjc.jpg') # 裁剪图像,调用crop方法,传入裁剪区域的元组 img_crop = img.crop((100, 100, 400, 400)) # 保存裁剪后的图像 img_crop.save('ycjc_crop.jpg')
crop
方法,传入裁剪区域的元组进行裁剪,元组的内容为左上角的坐标(前两个参数)即右下角的坐标(后两个参数)。效果图如下:1.3、截屏
from PIL import ImageGrab # 截取全屏 im = ImageGrab.grab() # 保存图像 im.save('win.png')
im =ImageGrab.grab((300, 100, 1400, 600))
crop
方法一致。二、音频操作
pydub
模块来进行音频文件的操作。2.1、pydub的安装以及读取音频
pip install pydub
wav
文件:from pydub import AudioSegment # 读取wav格式的音频文件 music = AudioSegment.from_wav('百年孤独.wav')
wav
文件是一种未经压缩的文件,我们可以通过pydub
直接读取。读取其它类型的文件pydub
同样提供了相应的方法:music = AudioSegment.from_mp3('music.mp3') music = AudioSegment.from_ogg("music.ogg") music = AudioSegment.from_flv("music.flv")
wav
格式。2.2、音频剪切
# 截取前20秒 clip = music[:20*1000] # 截取后20秒 clip = music[-20000:] # 从第20秒截取到第40秒 clip = music[20*1000:40*1000]
# 保存文件为clip.mp3,格式为mp3 clip.export('clip.mp3', format='mp3')
3.3、增加/减少音量
# 音量减5 music -= 5 # 音量加5 music += 5
3.4、音频拼接
# 在音频文件末尾重复拼接该音频 music = music*2
# 裁剪前20秒音频 clip1 = music[:20*1000] # 裁剪后20秒音频 clip2 = music[-20*1000:] # 拼接音频 clip = clip1 + clip2
3.5、 交叉渐入渐出
# 截取前20秒 begin = music[20*1000:40*1000] # 截取后20秒 end = music[-20*1000:] # 添加交叉渐入渐出 效果 clip = begin.append(end, crossfade=1500)
三、视频操作
moviepy
和opencv
进行,我们先分别安装两个模块:pip install opencv-python pip install moviepy
3.1、视频剪辑
moviepy
操作视频要更便利,我们看看使用moviepy
如何剪辑视频:from moviepy.editor import * # 剪切视屏bws.mp4中第50秒到第60秒 clip = VideoFileClip('bws.mp4').subclip(50, 60) # 将剪切的片段保存 clip.write_videofile("clip.mp4")
3.2、提取音频文件
VideoFileClip
类中,音频文件作为其中的一个参数,我们可以直接获取:from moviepy.editor import * # 读取视频文件 video = VideoFileClip('bws.mp4') # 获取其中音频 audio = video.audio # 保存音频文件 audio.write_audiofile('audio.mp3')
3.3、混流
from moviepy.editor import * # 读取视频 video = VideoFileClip('bws.mp4') # 读取音频 audio = AudioFileClip('百年孤独.mp3') # 设置视频的音频 video = video.set_audio(audio) # 保存新的视频文件 video.write_videofile('bws_audio.mp4')
3.4、逐帧提取画面
import cv2 # 读取视频 video = cv2.VideoCapture('bws.mp4') # 逐帧读取,当还有画面时ret为True,frame为当前帧的ndarray对象 ret, frame = video.read() i = 0 # 循环读取 while ret: i += 1 cv2.imwrite('v'+str(i) + '.jpg', frame) ret, frame = video.read()
3.5、截取gif
from moviepy.editor import * # 读取视频 video = VideoFileClip('bws.mp4') # 裁剪视频,并缩小一半 video = video.subclip(20, 30).resize((0.5)) # 保存gif图片 video.write_gif('bws.gif')
video.subclip((1, 20), (2, 30))
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算