Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python玩转各种多媒体,视频、音频到图片

Python玩转各种多媒体,视频、音频到图片

作者头像
ZackSock
发布于 2020-05-18 08:53:02
发布于 2020-05-18 08:53:02
2.4K00
代码可运行
举报
文章被收录于专栏:ZackSockZackSock
运行总次数:0
代码可运行

Python玩转各种多媒体,视频、音频到图片

我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑、字幕编辑、分离音频、视频音频混流等。又比如对音频文件的操作:音频剪辑,音频格式转换。再比如我们最常用的图片文件,格式转换、各个属性的编辑等。因为多媒体文件的操作众多,本文选取一些极具代表性的操作,以代码的形式实现各个操作。

一、图片操作

操作图片的模块有许多,其中比较常用的两个就是Pillowopencv,两个模块各有优势。其中opencv计算机视觉处理的开源模块,应用的范围更加广泛,从图像处理视频处理,再到物体检测等。而pillow相比直线就单纯的多,其大多数操作都是围绕图像而展开的。

1.1、格式转换

图片格式有多种多样,最直观的感受就是图片后缀。而格式之间的差异不仅仅是后缀的差异,最为明显的就是png格式图片,同其它图片有着最为直观的区别。下面我们就看看在Python中如何转换格式,我们先安装pillow模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pillow

然后看看如何导入模块以及如何读取图像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from PIL import Image
# 读取图像
img = Image.open('ycjc.jpg')
# 显示图像
img.show()

我们有了上面的基础操作之后,就可以开始进行格式转换了,我们用有村大妹子的图片作为素材:

在这里插入图片描述

我们可以看到这是一张白色背景的图片,我们将它转成png看看效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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如何裁剪图片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、截屏

虽然算不上是图像操作,但是还是个非常实用的操作。我们实现截屏是通过ImageGrap类实现的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from PIL import ImageGrab
# 截取全屏
im = ImageGrab.grab()
# 保存图像
im.save('win.png')

除了截取全屏我们也可以区域截屏:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
im =ImageGrab.grab((300, 100, 1400, 600))

参数元组含义与crop方法一致。

除了上述操作,还有更多像是添加滤镜、对比度调节、亮度调节、色彩调节等,由于内容众多,所以不在本文详细讨论。

二、音频操作

音频的操作也比较繁多,我们最常用到的就是音频剪辑和音量调节了。我们这里使用pydub模块来进行音频文件的操作。

2.1、pydub的安装以及读取音频

安装我们还是使用pip:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pydub

然后我们来读取一个wav文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pydub import AudioSegment
# 读取wav格式的音频文件
music = AudioSegment.from_wav('百年孤独.wav')

这样我们就完成了音频文件的读取,wav文件是一种未经压缩的文件,我们可以通过pydub直接读取。读取其它类型的文件pydub同样提供了相应的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
music = AudioSegment.from_mp3('music.mp3')
music = AudioSegment.from_ogg("music.ogg")
music = AudioSegment.from_flv("music.flv")

因为在实际操作过程中遇到了一个未找明缘由的错误,所以本文的音频操作只针对wav格式。

2.2、音频剪切

音频剪辑的实现我们是通过类似ndarray的中括号操作的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 截取前20秒
clip = music[:20*1000]
# 截取后20秒
clip = music[-20000:]
# 从第20秒截取到第40秒
clip = music[20*1000:40*1000]

剪切好的片段我们可以另外存一个文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 保存文件为clip.mp3,格式为mp3
clip.export('clip.mp3', format='mp3')

3.3、增加/减少音量

音量的控制我们只需要用音频对象加一个常数即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 音量减5
music -= 5
# 音量加5
music += 5

3.4、音频拼接

我们先看看重复拼接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在音频文件末尾重复拼接该音频
music = music*2

拼接后的音频的效果就是原音频循环两次。接下来我们看看拼接不同的音频:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 裁剪前20秒音频
clip1 = music[:20*1000]
# 裁剪后20秒音频
clip2 = music[-20*1000:]
# 拼接音频
clip = clip1 + clip2

3.5、 交叉渐入渐出

交叉渐入渐出是一种比较柔和的音频转场方式,在两个音频切换的间歇会有一个重合,用代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 截取前20秒
begin = music[20*1000:40*1000]
# 截取后20秒
end = music[-20*1000:]
# 添加交叉渐入渐出 效果
clip = begin.append(end, crossfade=1500)

我们可以看到我们一共裁剪了40秒,在生成的文件我们可以看到只有38秒,因为转场的时候有个重合的效果。当然还有更多的操作,大家可以自己去了解。

三、视频操作

视频的操作可以通过moviepyopencv进行,我们先分别安装两个模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install opencv-python
pip install moviepy

3.1、视频剪辑

相比之下moviepy操作视频要更便利,我们看看使用moviepy如何剪辑视频:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from moviepy.editor import *
# 剪切视屏bws.mp4中第50秒到第60秒
clip = VideoFileClip('bws.mp4').subclip(50, 60)
# 将剪切的片段保存
clip.write_videofile("clip.mp4")

3.2、提取音频文件

VideoFileClip类中,音频文件作为其中的一个参数,我们可以直接获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from moviepy.editor import *
# 读取视频文件
video = VideoFileClip('bws.mp4')
# 获取其中音频
audio = video.audio
# 保存音频文件
audio.write_audiofile('audio.mp3')

3.3、混流

我们还可以将音频同视频混流,在moviepy中,提供了一个读取音频文件的类,我们设置视频的音频需要创建这个类的对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from moviepy.editor import *
# 读取视频
video = VideoFileClip('bws.mp4')
# 读取音频
audio = AudioFileClip('百年孤独.mp3')
# 设置视频的音频
video = video.set_audio(audio)
# 保存新的视频文件
video.write_videofile('bws_audio.mp4')

3.4、逐帧提取画面

我们都知道,视频是由一帧一帧的图片组成的,我们也可以将画面一帧一帧提取出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

截取gif和截取视频没有什么区别,不过为了减少gif的大小,我们通常会对视频进行尺寸缩放:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from moviepy.editor import *
# 读取视频
video = VideoFileClip('bws.mp4')
# 裁剪视频,并缩小一半
video = video.subclip(20, 30).resize((0.5))
# 保存gif图片
video.write_gif('bws.gif')

在上面subclip方法中,我们可以传入元组,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
video.subclip((1, 20), (2, 30))

其含义为从1分20秒截取到2分30秒。

关于多媒体的操作还有很多,到此就实现了一些比较常用,也比较实用的操作,另外还花掉了我几个小时的时间。在排查环境中的错误是确实比较麻烦,但是总归还是实验的全部代码,写作不易啊~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新建文件夹X 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python带你剪辑视频
嗯,好久没写文章了。因为最近没有熬夜了,天天背电脑也很辛苦。 工作嘛,手工为主,没有啥技术成长,也没啥好写的。 疫情期间,总听到有人叹气,总听到抖音里面“我太难了”。
赵云龙龙
2020/08/13
3K0
零代码编程:用kimichat将mp4视频批量转为mp3音频
一个文件夹里面有多个子文件夹,里面的视频需要转成为mp3音频格式。可以在kimichat中键入提示词:
AIGC部落
2024/06/24
1710
零代码编程:用kimichat将mp4视频批量转为mp3音频
视频剪辑什么鬼?Python 带你高效创作短视频
近两年,抖音、快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节;在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr、FCPX、剪印、Vue 等。
AirPython
2020/03/23
2.2K0
视频剪辑什么鬼?Python 带你高效创作短视频
视频编辑的瑞士军刀,MoviePy库的详解与应用示例
在数字媒体的时代,视频内容的创作和编辑变得越来越重要。无论是社交媒体上的短视频,还是专业的电影制作,都需要强大的工具来处理和优化视频素材。Python作为一门强大的生态语言,在全世界使用的人数都是非常多的,如果要系统性的学习 Python 这门语言,可以查看我的专栏——《Python教程》
一点sir
2024/04/05
3640
视频编辑的瑞士军刀,MoviePy库的详解与应用示例
10万+的短视频被批量生产了,Python表示不服
前期有些自媒体大 V 靠搬运一些搞笑、好玩的 GIF,然后利用剪辑软件合成一段视频,再添加一个节奏感强的 BGM 后,上传各大自媒体平台后,能带来不错的阅读量和收益。
sergiojune
2019/06/19
2.6K0
10万+的短视频被批量生产了,Python表示不服
百万点赞怎么来?用Python制作抖音视频原来这么简单!
那么在上一篇教程当中,我们讲了Python在图片处理当中的应用,通过调用当中的opencv的模块,那么今天小编就和大家来分享一下Python同样也可以用来制作视频,也就是调用moviepy的模块。
用户6888863
2023/03/01
1.3K0
百万点赞怎么来?用Python制作抖音视频原来这么简单!
Python 一个快速视频剪辑编辑神器 — Moviepy
这一段代码,能够在 3 秒内将 videoplayback.mp4 的 50 秒 -60 秒的视频片段提取出来,非常方便。
崔庆才
2021/06/24
4.9K0
实战|惊呆了,Python竟然能剪辑视频!
辰哥之前就想着Python可不可以剪辑视频(提取视频的音频,视频截取等等),然后辰哥在网上一搜,还真找到了Python的一个处理音频的库-MoivePy
Python研究者
2021/06/22
8140
实战|惊呆了,Python竟然能剪辑视频!
用Python轻松搞定视频转gif动图
不知道大家是不是有过类似的经历,在看视频的时候觉得某段非常有意思想弄成动图,但是无从下手!或可以在网上找一些在线工具但是多多少少需要付费或者带有水印之类的,那么!?
可以叫我才哥
2022/04/12
1.2K0
用Python轻松搞定视频转gif动图
MoviePy:视频编辑库
MoviePy是一个用Python编写的视频编辑库,它可以处理视频剪辑、合成、处理等各种任务。它背后的魔法来自于两个强大的工具:FFmpeg,一个处理多媒体数据的开源库;以及NumPy,一个强大的科学计算库。MoviePy让你可以用几行代码完成从视频剪辑到色彩调整的所有工作。
luckpunk
2025/01/18
4570
Python视频剪辑工具moviePy
关注了很多的公众号,大佬们的骚操作层出不穷,看的我跃跃欲试。也想整一下。跟在大佬们的后面好看风景(复现操作)。
云深无际
2021/04/14
2.2K0
Python视频剪辑工具moviePy
实战|惊呆了,Python竟然能剪辑视频!
之前就想着Python可不可以剪辑视频(提取视频的音频,视频截取等等),然后辰哥在网上一搜,还真找到了Python的一个处理音频的库-MoivePy
Python研究者
2021/05/27
8590
短视频篇 | Python 带你进行短视频二次创作
无论是抖音还是快手等视频平台,一旦一个视频火了后,很多 UP 主都会争先抢后去模仿拍摄或剪辑,然后上传到平台,最后都能带来不错的流量。
AirPython
2020/03/23
1.7K0
短视频篇 | Python  带你进行短视频二次创作
提取视频中的音频——python三行程序搞定「建议收藏」
  身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外。我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序!   语音数据在数据分析领域极为重要。比如可以分析语义、口音、根据人的情绪等等。可以应用于偏好分析、谎话检测等等。
全栈程序员站长
2022/08/26
1.6K0
提取视频中的音频——python三行程序搞定「建议收藏」
python将视频抽帧的的多种方式
最近有一个需求是将视频抽取为一个个的帧图片,使用python很方便实现,而且有多种方式;
JQ实验室
2022/09/29
3.2K0
Python音频处理算是解决了
可能因为说错一句话就得重来,又或者因为思考而暂停时间太久又得重来,以至于弄了两个小时才做好五分钟的视频
行哥玩Python
2021/10/21
1.3K0
Python音频处理算是解决了
2019-12-07 wav音频剪切与合并
下载了一堆音频编辑软件,最后在合并的时候都提示要收费,所以只好写代码搞定了 首先用QQ影音确定需要裁减音乐的地方,比如我需要裁掉11:08到11:48,12:51到13:05,那么python编码如下:
oracle3
2022/04/22
9360
用Python剪辑视频?太简单了!
最近我在网上下载一个视频,结果下载到本地是近百个视频片段,为了方便观看只能将这些片段合并为一个视频整体。
快学Python
2022/11/28
2.1K0
用Python剪辑视频?太简单了!
[Python MoviePy 音视频开发零基础到实战] 一、用6条代码为你的视频裁剪以及添加水印
在 Python 有一个音视频开发模块 MoviePy,MoviePy 依赖于 FFmepg,使用 MoviePy 可以对音视频进行编辑;例如视频合成、视频处理、视频特效等。
1_bit
2022/01/06
2.1K0
[Python MoviePy 音视频开发零基础到实战] 一、用6条代码为你的视频裁剪以及添加水印
装逼篇 | 抖音超火的九宫格视频是如何生成的,Python 告诉你答案
除了传统的剪辑软件可以实现,是否有其他更加快捷方便的方式?比如:一键生成,批量生成?
吴延宝
2020/09/22
7220
装逼篇 | 抖音超火的九宫格视频是如何生成的,Python 告诉你答案
相关推荐
python带你剪辑视频
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验