python moviepy 的用法入门篇
作者:梦想橡皮擦 发布时间:2022-09-03 11:41:16
python 中的视频处理模块,有一个叫做 moviepy,今天我们就来唠唠它。
模块安装使用如下命令即可
pip install moviepy
接下来完成第一个 Demo,为后续学习提高信心,截取视频中的一段。
截取视频
下述代码重点使用的是 subclip
方法,但需要提前声明一个 VideoFileClip
对象, VideoFileClip
类的构造函数在代码后进行说明。
from moviepy.editor import *
import time
clip = VideoFileClip('./1644974996.mp4').subclip(10, 20)
new_file = str(int(time.time())) + '_subclip.mp4'
clip.write_videofile(new_file)
代码运行结果如下所示:
subclip(t_start,t_end)
方法中的时间参数可以用 (t_start=10)
,以秒的时间来表示,也可以用 (t_start=(1,20))
,以1分20秒的形式来表示,还可以 (t_start=(0,1,20))
或者 (t_start=(00:01:20))
, 以小时: 分钟: 秒的形式表示, t_end
的默认值就是视频的长度
VideoFileClip
类的构造函数如下所示:
__init__(self, filename, has_mask=False,
audio=True, audio_buffersize=200000,
target_resolution=None, resize_algorithm='bicubic',
audio_fps=44100, audio_nbytes=2, verbose=False,
fps_source='tbr')
其中只有 filename
为必填项,其余都为选填内容。
filename
:视频文件名,一般常见格式都支持;has_mask
:是否包含遮罩;audio
:是否加载音频;audio_buffersize
:音频缓冲区大小;target_resolution
:加载后需要变换到的分辨率;resize_algorithm
:调整分辨率的算法,默认是bicubic
,可以设置为bilinear
,fast_bilinear
;audio_fps
:声音的采样频率;audio_nbytes
:采样的位数;verbose
:是否输出处理信息。
subclip(t1,t2)
方法的含义为截取t1到t2时间段内的片段。write_videofile()
方法用于视频输出。
提取A视频的音频,注入到B视频中
from moviepy.editor import *
# 读取2个视频文件
videoclip_a = VideoFileClip("1644974996.mp4")
videoclip_b = VideoFileClip("1644974998.mp4")
# 提取A视频文件的音频部分
audio_a = videoclip_a.audio
# 给B设置音频,注意视频最终合成的大小会依据长的为准
videoclip_c = videoclip_b.set_audio(audio_a)
# 输出新的视频文件
videoclip_c.write_videofile("videoclip_c.mp4")
使用 VideoFileClip
对象的 audio
属性,可以获取视频的音频部分,然后调用 set_audio()
方法对文件进行音频设置,这里要注意一点,合成的音频和视频等于长度长的。
去掉视频声音
from moviepy.editor import *
video = VideoFileClip('1644974996.mp4')
video = video.without_audio()
video.write_videofile('cc.mp4')
without_audio()
方法见名知意 - 去除声音。
获取视频信息
视频的分辨率和时间可以直接通过属性读取
from moviepy.editor import *
video = VideoFileClip('1644974996.mp4')
print(dir(video))
print(video.size) # 获取分辨率
print(video.duration) # 获取视频总时长
获取文件大小就比较简单了,使用 os
模块的 os.path.getsize()
方法即可,得到的是字节大小。
from moviepy.editor import *
video = VideoFileClip('1644974996.mp4')
size = os.path.getsize('1644974996.mp4')
print(size)
设置视频倍速播放
读取视频,调用 speedx()
方法,其中设置要加速到的倍数。
from moviepy.editor import *
clip = VideoFileClip('./1644974996.mp4')
video_1 = clip.speedx(2)
video_1.write_videofile('sss.mp4')
截取视频封面
很多时候我们需要生成视频的封面,直接使用下述几行代码,即可实现。
from moviepy.editor import *
clip = VideoFileClip('./1644974996.mp4')
clip.save_frame("frame.jpg") # 保存第1帧
clip.save_frame("frame.png", t=2) # 保存2s时刻的那1帧
提取视频中的音频内容
如果想要把目标视频中的某段音频截取出来,可以使用如下代码
from moviepy.editor import *
clip = VideoFileClip('./1644974996.mp4').subclip(10, 20)
audioclip1 = clip.audio # 从视频对象中提取音频
audioclip1.write_audiofile('a.mp3') # 写入音频文件
截取视频中的一段,将其保存为 gif
from moviepy.editor import *
clip = VideoFileClip('./1644974996.mp4').subclip(10, 20)
# clip.write_gif('demo.gif',fps=15) # 生成之后的文件大
clip.write_gif('demo.gif',fps=5) # 生成之后的文件小
写在后面
到这里,相信你能顺着这个思路去学习 moviepy 更多的高级用法啦。
来源:https://blog.csdn.net/hihell/article/details/122967803


猜你喜欢
- chr()函数与ord()函数解析chr()函数用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。返回
- 直接上代码图片就使用我家爽妹子的吧如果没有安装pil模块的话先cmd安装下输入:pip install pillow# -*- coding
- 目前很多在网络上流传的右键菜单都不支持XHTML,主要就是因为document.body和document.documentElement之
- 我就废话不多说了,直接上代码吧!pip install pymysqlimport pymysqlimport pandas as pdco
- 对比测试 scipy.misc 和 PIL.Image 和 libtiff.TIFF 三个库输入:1. (读取矩阵) 读入uint8、uin
- 建表,主键自增create table aaa(id bigint identity(1,1) not null PRIMARY key,n
- <script type="text/javascript"> </script>
- 1、pyecharts绘制饼图(显示百分比)# 导入模块from pyecharts import options as optsfrom
- 如何选择速度最快的站点? <html><head><meta http-equiv=&qu
- 用AJAX刷新一个DIV中的jsp内容 <script type="text/javascript"> va
- 目录准备读取数据写入数据修改数据进阶用法最后准备首先,我们需要安装依赖包# 安装依赖包pip3 install 
- 有需要的人可以参考一下,如果试用过,发现问题,欢迎留言告知,不胜感激。功能介绍:1、若页面无刷新,且第一次传值小于第二次传值或者圆环初始化时
- PHP 有一个非常简单的垃圾收集器,它实际上将对不再位于内存范围(scope)中的对象进行垃圾收集。垃圾收集的内部方式是使用一个引用计数器,
- /** * 获取地址栏参数 * * @example GetUrlString('id
- 代码# -*- coding:utf-8 -*-import osimport timef
- 今天,由于工作需要,我在自己的电脑上配置了Mysql5环境,同时安装了一个phpMyAdmin管理工具,安装完成后,发现在phpMyAdmi
- 检测缺失值我们先创建一个带有缺失值的数据框(DataFrame)。import pandas as pddf = pd.DataFrame(
- 我们的项目使用了bootstrapValidator来作为前端校验,但是表单里面有一个UEditor,它用bootstrapValidato
- 在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯
- 实时画图import matplotlib.pyplot as pltax = [] # 定义一个 x 轴的空列表用来接收动态