教你一个快速视频处理的神器:Python moviepy
摘要:python 中的视频处理模块,有一个叫做 moviepy,今天我们就来唠唠它。
本文分享自华为云社区《python moviepy 的用法,看这篇就能入门》,作者: 梦想橡皮擦。
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) # 生成之后的文件小
教你一个快速视频处理的神器:Python moviepy的更多相关文章
- tqdm学习-一个快速,可扩展的Python和CLI进度条
参考:https://pypi.org/project/tqdm/ 1.安装: (base) userdeMacBook-Pro:~ user$ conda activate deeplearning ...
- 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频
视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频 2018-07-11 | 标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...
- 教你轻松快速学会用Calibre TXT转MOBI
教你轻松快速学会TXT转为有目录的MOBI###授人以渔,lllll5500制作### 需使用软件按先后顺序如下:一.排版助手 官网http://www.gidot.net/typesetter/二. ...
- 手把手教你制作AppPreview视频并上传到appStore进行审核
手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...
- 分享一个快速设置背景的js 自动获取背景图的长宽
我来分享一个快速设置背景的js (需要jq支持!) 快速切图铺页面用---就是不需要手动输入背景图的长宽 自动获取背景图的长宽 : <div class="wrap"> ...
- 一个快速、完善的Android开发框架整合实践(QuickAndroid)
https://github.com/alafighting/QuickAndroid QuickAndroid 一个快速.完善的Android开发框架整合实践 QA项目简介 本框架QuickAndr ...
- 一个快速、高效的Levenshtein算法实现——代码实现
在网上看到一篇博客讲解Levenshtein的计算,大部分内容都挺好的,只是在一些细节上不够好,看了很长时间才明白.我对其中的算法描述做了一个简单的修改.原文的链接是:一个快速.高效的Levensht ...
- stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编
sstdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要 ...
- 一个快速搜索下载jar包的网站
在偶然的机会,我一个快速搜索下载jar包的网站.里面涵盖了所有的几乎全世界开源的jar包,感觉这个功能特别适合java.android开发者使用,共享出来給大家悄悄. 百度一下:manyjar,就可以 ...
- 基于vuecli3构建一个快速开发h5 APP的模板
基于vuecli3构建的一个快速开发h5 APP的模板,集成了高德地图.mint-ui,以及antv-f2可视化框架 vue-cli3安装 查看vue cli版本 vue --version 要求no ...
随机推荐
- ACAM 学习笔记 | 附 YbtOJ 全部题解
怎么有人现在才学 ACAM 呢. 好像比 SAM 简单挺多啊,也不记得当时是哪里看不懂. AC 自动机() 自动 AC 机(✘) 概述 ACAM(Aho–Corasick Automaton),是用来 ...
- spring-boot集成hikari多数据源
maven依赖 <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</ ...
- 题解 CF1401C
题目大意: 给定一序列 \(A\),定义当且仅当 \(\gcd(a_i,a_j)=a_{min}\) 时,元素 \(a_i\) 和 \(a_j\) 可以交换. 问当前给定的序列 \(A\) 能否转化为 ...
- [WPF]标记扩展(Markup Extension)
XAML是基于XML的语言,其遵循并扩展了XML的语法规则.其中一项扩展就是标记扩展(Markup Extension),比如我们经常使用的绑定Binding和x:Type. 什么是标记扩展 标记扩展 ...
- 手撕Vue-Router-初始化路由信息
前言 经过上一节课的学习,我们已经完成了提取我们想要的路由信息数据格式,提取完毕了之后,接下来我们该干什么,接下来需要做的步骤就是监听路由的变化,保存当前的路由. 那么就会遇到几个问题,就是怎么监听, ...
- 海量电商数据与用友YS系统数据对接案例
案例背景 客户是历史比较悠久的企业.企业内部用的系统多达十几套,专门成立信息化公司进行数字化转型,第一期需求系统旺店通的ERP以及旺店通的WMS并且启用京东的沧海外仓. 在选型ERP用友ERP和金蝶E ...
- Linux中execl函数详解与日常应用!
Linux中execl函数详解与日常应用 execl是Linux系统中的一个系统调用,用于执行指定路径下的可执行文件.本文将详细介绍execl函数的使用方法和参数含义,并探讨其在日常开发中的常见应用场 ...
- 做数据分析,我们需要懂多少excel知识?
数据分析所需的Excel知识详解 在进行数据分析工作时,Excel是一个非常常用且强大的数据处理工具.以下是数据分析中常用的Excel知识点和技巧的详细描述. 1. 基本操作 在使用Excel进行数据 ...
- uniapp的下载
简介 - HBuilderX 文档 (dcloud.net.cn) 下载Hbuiler 直接打开HbuilderX.exe就可以直接使用 可以通过他来创建模板 目录
- 【UniApp】-uni-app-CompositionAPI传递数据
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-传递数据 那么了解完了uni-app-传递数据之后,这篇文章来给大家介绍一下 uni-app-CompositionAPI传递数据 首 ...