摘要: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的更多相关文章

  1. tqdm学习-一个快速,可扩展的Python和CLI进度条

    参考:https://pypi.org/project/tqdm/ 1.安装: (base) userdeMacBook-Pro:~ user$ conda activate deeplearning ...

  2. 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频

      视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频  2018-07-11 |  标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...

  3. 教你轻松快速学会用Calibre TXT转MOBI

    教你轻松快速学会TXT转为有目录的MOBI###授人以渔,lllll5500制作### 需使用软件按先后顺序如下:一.排版助手 官网http://www.gidot.net/typesetter/二. ...

  4. 手把手教你制作AppPreview视频并上传到appStore进行审核

    手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...

  5. 分享一个快速设置背景的js 自动获取背景图的长宽

    我来分享一个快速设置背景的js (需要jq支持!) 快速切图铺页面用---就是不需要手动输入背景图的长宽 自动获取背景图的长宽 : <div class="wrap"> ...

  6. 一个快速、完善的Android开发框架整合实践(QuickAndroid)

    https://github.com/alafighting/QuickAndroid QuickAndroid 一个快速.完善的Android开发框架整合实践 QA项目简介 本框架QuickAndr ...

  7. 一个快速、高效的Levenshtein算法实现——代码实现

    在网上看到一篇博客讲解Levenshtein的计算,大部分内容都挺好的,只是在一些细节上不够好,看了很长时间才明白.我对其中的算法描述做了一个简单的修改.原文的链接是:一个快速.高效的Levensht ...

  8. stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编

    sstdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要 ...

  9. 一个快速搜索下载jar包的网站

    在偶然的机会,我一个快速搜索下载jar包的网站.里面涵盖了所有的几乎全世界开源的jar包,感觉这个功能特别适合java.android开发者使用,共享出来給大家悄悄. 百度一下:manyjar,就可以 ...

  10. 基于vuecli3构建一个快速开发h5 APP的模板

    基于vuecli3构建的一个快速开发h5 APP的模板,集成了高德地图.mint-ui,以及antv-f2可视化框架 vue-cli3安装 查看vue cli版本 vue --version 要求no ...

随机推荐

  1. URL, URI 和 URN 之间的区别

    英文原文:What's the difference between a URI and a URL?  URI 标识一个事物 , URL 定位一个事物:然而,位置同样可以标识一个事物,所以,每个 U ...

  2. JAVA类的加载(1) ——类的加载及类加载器介绍

    过程:当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载.连接.初始化三个步骤来对该类进行初始化,有时候称为类加载(类初始化)   类加载 定义:类加载 指的是将类的class文件读入 ...

  3. JS 树形结构 根据子节点找到所有上级

    需求:是根据子菜单找到所有他上级菜单 进行面包屑的回显 要求子节点里包含父级id 代码如下:     parentTree(arr, id) {   //arr 所有的树数据 id 某个子节点的id  ...

  4. EdisonTalk.MongoProxy组件发布v0.0.6版本

    大家好,我是Edison. 组件发布的背景 之前工作中需要用到MongoDB的事务操作,因此参考了一些资料封装了一个小的组件,提供基础的CRUD Repository基类 和 UnitOfWork工作 ...

  5. DataGrip安装与使用

    写在前面:同学们记得以命令为主,图形界面为辅.了解图形怎么操作即可 一.DataGrip软件的安装和初始化 首先在浏览器上搜索datagrip,然后打开连接 点击DOWNLOAD   按照你电脑系统来 ...

  6. Vue07-Axios

    Axios axios是一个网络请求相关的库. axios: ajax i/o system 使用axios编写的网络请求代码,可以运行在浏览器端,也可以在Node环境中运行. 01. 支持的请求方式 ...

  7. 用友NCC&WMS&泛微 系统对接案例分享

    用户故事 产品版本:NCC2105 故事是这么开始的,用友全国伙伴社区的社区成员,对我们的多系统集成架构很感兴趣,经常跟我讨论相关系统集成层面的问题:随着企业的发展,由于信息产业的技术含量高,信息系统 ...

  8. MySQL 有哪些常见的面试题

    MySQL 是一种常用的关系型数据库管理系统,在面试过程中经常会涉及与 MySQL 相关的问题.以下是一些常见的 MySQL 面试题: 1. 介绍一下 MySQL 和其他数据库管理系统的区别. - M ...

  9. AI浪潮下,大模型如何在音视频领域运用与实践?

    视频云大模型算法「方法论」. 刘国栋|演讲者 在AI技术发展如火如荼的当下,大模型的运用与实践在各行各业以千姿百态的形式展开.音视频技术在多场景.多行业的应用中,对于智能化和效果性能的体验优化有较为极 ...

  10. Tensorflow2.0实战之GAN

    本文主要带领读者了解生成对抗神经网络(GAN),并使用提供的face数据集训练网络 GAN 入门 自 2014 年 Ian Goodfellow 的<生成对抗网络(Generative Adve ...