iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python用moviepy对视频进行简单的处理
  • 567
分享到

python用moviepy对视频进行简单的处理

2024-04-02 19:04:59 567人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录楔子moviepy的简单使用一个小栗子那么moviepy是如何工作的呢?视频属性视频合成1.多个视频按照先后顺序拼接起来。比如一个一分钟和一个两分钟的视频组合起来,变成三分钟。2

楔子

随着自媒体时代,现在对视频的处理变得越来越常见。我们可以使用Adobe的一些专业工具,但是效率不高;如果只是对视频进行一些简单的处理的话,或者视频的数量非常多的话,那么使用专业软件显然就不太适合了。

python中有专门用于处理视频的库:moviepy,可以非常方便地对视频进行一些简单处理,下面我们就来看一看。

首先是安装:pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple,个人推荐安装的时候使用清华源,因为moviepy需要依赖另一个库:imageio_FFmpeg,这个库里面包含了一个50多MB的ffmpeg二进制文件,直接从pypi上拉取的话会很长时间,如果网络不行的话。当然安装moviepy的时候,imageio_ffmpeg就顺带安装了。

从这里我们也看到,moviepy底层还是依赖ffmpeg这个专业软件的,而ffmpeg是跨平台的,所以moviepy也可以在任意平台上使用。

moviepy的简单使用

我们来简单看一下如何使用moviepy这个模块,不过在使用之前我们需要一个视频,就使用you-get工具从bilibili上下载一个吧。

下面我们就使用这个下载的视频进行演示。

一个小栗子

我们以一个小栗子,来演示一下使用moviepy是怎么操作视频的。


from moviepy import editor

# 调用 `VideoFileClip(文件名)` 即可将视频加载进来
# 可以读取各种格式的视频文件
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv")

# 调用subclip方法,传入起始时间和结束时间,即可截取视频中的指定部分
"""
video_clip.subclip(): 截取视频全部,相当于没做处理
video_clip.subclip(10): 从视频的 `第10秒` 截取到 `结尾`
video_clip.subclip(10, -2): 从视频的 `第10秒` 截取到结尾的 `前两秒`
video_clip.subclip((1, 35), (3, 10)): 从视频的 `第1分35秒` 截取到 `3分10秒` 
video_clip.subclip((1, 2, 18), (2, 1, 34)): 从视频的 `第1小时2分18秒` 截取到 `第2小时1分34秒`
"""
video_clip = video_clip.subclip(5, 20)

# 调整音量,变为原来的0.5
video_clip = video_clip.volumex(0.5)

# 做一个文本剪贴板,自定义样式、颜色。
text_clip = editor.TextClip("hanser, little angel", fontsize=40, color="blue")
# 让文本在屏幕的正中间显示,持续10秒,设置透明度为0.8
"""
屏幕左上角为(0, 0),右下角为(屏幕宽度, 屏幕高度)
set_position((800, 500)): 显示在800, 500的位置上
set_position(("center", "center")): 显示在屏幕的正中央
set_position((0.4, 0.6), True): 显示在距离左边百分之40、距离上边百分之60的位置上

set_duration(10): 持续10秒
set_opacity(0.6): 设置透明度为0.6
"""
text_clip = text_clip.set_position(("center", "center")).set_duration(10).set_opacity(0.8)

# 然后把文本剪贴板贴在视频上
video_clip = editor.CompositeVideoClip([video_clip, text_clip])

# 然后导出视频,可以是其它的视频格式
video_clip.write_videofile("1.mp4")

# 下面很重要:
r"""
如果你是在windows上执行,不出意外的话,当你在执行 editor.TextClip() 的时候,会报出如下错误:

OSError: MoviePy Error: creation of None failed because of the following error:

[WinError 2] 系统找不到指定的文件。.

.This error can be due to the fact that ImageMagick is not installed on your computer, 
or (for Windows users) that you didn't specify the path to the ImageMagick binary in file conf.py, 
or that the path you specified is incorrect

这个错误是由于你的电脑上缺少ImageMagick造成的,我们需要去Http://www.imagemagick.org/script/download.PHP
这个网站上下载对应操作系统的ImageMagick,我这里是Windows。可能下载的比较慢,毕竟是外网。
如果觉得速度无法忍受的话,我提供了相应了网盘链接: 链接:https://pan.baidu.com/s/1n1xNohD7V-abQbX81UENJQ 提取码:usl3,可以进行保存下载

下载完毕之后,直接安装在指定的目录。
然后修改site-packages\moviepy\config_defaults.py, 在文件的尾部有如下内容:
import os

FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = os.getenv('IMAGEMAGICK_BINARY', 'auto-detect')

我们把 `IMAGEMAGICK_BINARY = ` 后面的内容,换成你刚才ImageMagick的安装路径下magick.exe的绝对路径:
import os

FFMPEG_BINARY = os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio')
IMAGEMAGICK_BINARY = r'E:\ImageMagick-7.0.10-Q16\magick.exe'
"""
# 然后执行就没有问题了

我们看到此时文字就添加进去了,并且该视频只有15秒,也就是我们截取的部分。

那么moviepy是如何工作的呢?

moviepy使用ffmpeg对视频、音频文件进行读取和导出,使用ImageMagick生成文字等等。

首先我们使用VideoFileClip对视频进行读取,得到VideoFileClip对象,我们记作clip。我们可以对这个clip进行任意的操作(剪切、合并、调整亮度、速度、和其它的clip拼接在一起等等)。并且我们需要注意的是,这些操作是可以链式调用的,因为每一次操作都会得到一个新的clip,不会影响原来的。我们上面演示了视频的读取、以及指定部分的截取、音量的调整、以及添加文字等等,我们后面还会介绍更多操作。

并且我们最后调用clip的write_videofile方法,可以将处理之后的视频写入本地。当然我们还可以使用pygame,或者jupyter notebook进行展示。为了方便,我们后面就使用jupyter notebook。

视频属性

我们说一个视频,肯定有大小、宽高、fps、时长等等属性,下面我们就来看看如何获取这些属性。


from moviepy import editor

# 调用 `VideoFileClip(文件名)` 即可将视频加载进来
# 可以读取各种格式的视频文件
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv")
# 获取宽度和高度
print(video_clip.size) # [800, 600]
print(video_clip.w, video_clip.h) # 800 600

# 获取fps
print(video_clip.fps) # 23.976023976023978

# 获取时长,单位是秒
print(video_clip.duration) # 155.12

# 获取大小,可以直接使用os模块
import os
# 大概16兆
print(os.stat(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv").st_size) # 16852110
print(os.stat(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv").st_size / 1024 ** 2) # 16.07142448425293

视频合成

视频合成有两种方式:

1.多个视频按照先后顺序拼接起来。比如一个一分钟和一个两分钟的视频组合起来,变成三分钟。


from moviepy import editor
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv")

# 截取10到20秒
video_clip1 = video_clip.subclip(10, 20)
# 截取1分45秒到结尾的前两秒
video_clip2 = video_clip.subclip((1, 45), -2)
# 然后前后拼接起来
clip = editor.concatenate_videoclips([video_clip1, video_clip2])
# 使用jupyter进行展示,设置一个宽度
clip.iPython_display(width=360)

此时视频就展示在jupyter上了,而且是两个视频拼接在一起的。并且在concatenate_videoclips中还可以指定一个transition参数(也是一个VideoFileClip对象),作为衔接之间的过渡。

还是比较简单的,假设我们有5个视频,如果只是简单的前后拼接就可以这么做。


from moviepy import editor


videos = ["1.mp4", "2.mp4", "3.flv", "4.mp4", "5.flv"]
clips = []
for video in videos:
 clips.append(editor.VideoFileClip(video))

editor.concatenate_videoclips(clips).write_videofile("xxx.mp4")

这里值得一提的是,多个clip进行拼接,并不需要这些clip之间有相同的尺寸、时长什么的,仅仅是将它们按照顺序拼接起来而已。

另外,当你用jupyter进行展示时,视频不要过长,否则报错。当然你也可以给ipython_display函数传递一个maxduration参数,让它支持显示更大时长的视频文件。但是注意:如果文件过大,在jupyter上可能会耗光你的内存。

2.多个视频在同一个画面上显示


from moviepy import editor
# margin: 设置外边距
video_clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv").margin(10)

video_clip1 = video_clip.subclip(10, 20)
# editor.vfx.mirror_x: x轴镜像
video_clip2 = video_clip1.fx(editor.vfx.mirror_x)
# editor.vfx.mirror_y: y轴镜像
video_clip3 = video_clip1.fx(editor.vfx.mirror_y)
# resize: 等比缩放
video_clip4 = video_clip1.resize(0.8)
# 列表里面有两个列表,所以会将屏幕上下等分
# 上半部分显示video_clip1, video_clip2,下半部分显示video_clip3, video_clip4
clip = editor.clips_array([[video_clip1, video_clip2], [video_clip3, video_clip4]])
clip.ipython_display(width=600)

所以我们看到concatenate_videoclips是将多个视频前后拼接,而clips_array是将多个视频同时显示在一个画面里面。

修改视频属性


from moviepy import editor


clip = editor.VideoFileClip(r"C:\Users\satori\Desktop\警察蜀黍!!!就是这个人!!!! 翻唱.flv").subclip(10, 20)

clip = (clip.fx(editor.vfx.resize, width=460) # 调整尺寸,保持比例
  .fx(editor.vfx.speedx, 2) # 调整倍数
  .fx(editor.vfx.colorx, 0.5) # 画面调暗
  )

视频音频合成

假设我们有一个视频A和一个视频B,我要将视频B的音频和视频A组合起来,怎么做呢?


from moviepy import editor


clipA = editor.VideoFileClip(r"A.mp4")
clipB = editor.VideoFileClip(r"B.mp4")

# 获取B的音频
audioB = clipB.audio

# 将B的音频和A组合起来
clipA = clipA.set_audio(audioB)
# 然后保存即可

# 或者我们也可以直接加载一个音频
audio = editor.AudioFileClip("b.mp3")

以上就是python用moviepy对视频进行简单的处理的详细内容,更多关于python moviepy对视频处理的资料请关注编程网其它相关文章!

--结束END--

本文标题: python用moviepy对视频进行简单的处理

本文链接: https://www.lsjlt.com/news/121458.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python用moviepy对视频进行简单的处理
    目录楔子moviepy的简单使用一个小栗子那么moviepy是如何工作的呢?视频属性视频合成1.多个视频按照先后顺序拼接起来。比如一个一分钟和一个两分钟的视频组合起来,变成三分钟。2...
    99+
    2024-04-02
  • 怎么在python中使用moviepy对视频进行处理
    本篇文章为大家展示了怎么在python中使用moviepy对视频进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研...
    99+
    2023-06-08
  • Python视频处理模块之moviepy的用法教程
    目录楔子moviepy 的简单使用视频截取音量调整在视频上添加文字获取视频属性视频合成修改视频属性视频音频合成楔子 随着自媒体时代,现在对视频的处理变得越来越常见。我们可以使用 Ad...
    99+
    2024-04-02
  • Python中使用moviepy进行视频分割的实现方法
    场景 moviepy官网: https://pypi.org/project/moviepy/ 是一个用于视频编辑的Python库:切割、连接、标题插入、视频合成、非线性编辑,视频处...
    99+
    2024-04-02
  • 怎样利用PPT进行简单的视频剪辑
    今天就跟大家聊聊有关怎样利用PPT进行简单的视频剪辑,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。相信很多小伙伴在日常办公中都会遇到编辑视频的需要,...
    99+
    2024-04-02
  • 如何使用PHP进行视频处理?
    随着网络技术的飞速发展,视频已经成为人们日常生活中不可或缺的一部分。在这个数字时代,如何使用PHP进行视频处理已经成为了一个热门话题,本文将介绍PHP的一些基本功能和工具,以帮助大家更好地处理视频。一、认识PHPPHP是一种高级程序设计语言...
    99+
    2023-05-22
    PHP 视频处理 多媒体应用
  • 使用Python进行网站数据爬取和视频处理
    导语 在互联网时代,我们经常需要从网站上获取数据并进行分析或处理。有时候,我们还需要对视频数据进行一些操作,比如剪辑、转码、合成等。Python是一门非常适合做数据分析和视频处理的编程语言,它有很多...
    99+
    2023-09-04
    python 网络爬虫 requests 爬虫代理 视频处理 moviepy 数据爬取
  • 如何在PHP中进行视频处理?
    在当今日益数字化的时代,视频处理已成为人们日常工作和生活中不可或缺的一部分。而在PHP开发领域,如何进行视频处理也是一个很重要的问题。本文将介绍PHP中常用的视频处理方式及其实现方法。一、视频格式介绍在进行视频处理之前,我们需要首先了解一些...
    99+
    2023-05-14
    PHP 视频处理 处理视频
  • 如何使用PHP进行视频文件处理?
    视频文件处理是现代网络应用程序中必不可少的一部分,它包括裁剪、压缩、转码、添加水印和合并等操作。PHP 作为一种流行的服务器端编程语言,可以用于处理这些要求。在本文中,我们将介绍如何使用 PHP 处理视频文件。安装 FFMPEG 库FFMP...
    99+
    2023-05-14
    PHP 视频文件处理 处理技巧
  • Python使用zlib对数据进行简单压
    在Python丰富的库中,也有着对数据进行压缩处理的库(zlib)。对于需要数据压缩的应用程序,此模块中的功能允许使用zlib库进行压缩和解压缩。 (本文只对简单的字符串数据进行压缩,如需压缩文件等复杂数据类型,详见zlib官网...
    99+
    2023-01-31
    简单 数据 Python
  • 音视频处理工具FFmpeg与Java结合的简单使用
    一、什么是FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavco...
    99+
    2023-09-03
    ffmpeg 音视频
  • 如何使用 JavaScript object URLs进行图像音频和视频的处理
    本篇文章为大家展示了如何使用 JavaScript object URLs进行图像音频和视频的处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。许多Web应用程序需...
    99+
    2024-04-02
  • Golang与FFmpeg: 利用命令行工具进行音视频处理
    Golang是一种编程语言,而FFmpeg是一个开源的音视频处理工具。在Golang中,我们可以利用命令行工具来调用FFmpeg进行...
    99+
    2023-10-08
    Golang
  • 如何进行OpenCV2中的视频流读取与处理
    这篇文章跟大家分析一下“如何进行OpenCV2中的视频流读取与处理”。内容详细易懂,对“如何进行OpenCV2中的视频流读取与处理”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如...
    99+
    2023-06-26
  • 用python进行简单的画图操作
    我用python的matplotlib模块进行简单的画图操作,作为入门参考,下面直接上代码:#coding:utf-8 import numpy as np import matplotlib.pyplot as plt x=np.lins...
    99+
    2023-01-31
    画图 操作 简单
  • 如何利用MySQL和C++开发一个简单的视频处理功能
    如何利用MySQL和C++开发一个简单的视频处理功能视频处理已经成为了现代科技领域中的重要应用之一。而在这个领域中,MySQL和C++也是两大常用的工具。MySQL作为一种关系型数据库管理系统,可以用来存储和管理大量的数据,而C++作为一种...
    99+
    2023-10-22
    MySQL C++ 视频处理
  • 使用Python怎么对Excel进行处理
    本篇文章为大家展示了使用Python怎么对Excel进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本...
    99+
    2023-06-07
  • 使用python对视频文件分辨率进行分组的实例代码
    在平时的工作中,我们的目录有很多的视频文件,如果你没有一个好的视频分类习惯,在找视频素材的时候会很费时,通过对视频的分辨路进行分类可以在需要的时候快速找到你想要的视频分辨率。当然人工...
    99+
    2024-04-02
  • python编程简单几行代码实现视频转换Gif示例
    目录一、前言二、教程1. 安装必备库moviepy2. 写入代码3. 转换效果4. GIF很大的解决方案5. 截取视频长度转换6. 指定转换后的图片大小(分辨率)示例一、前言 很多网...
    99+
    2024-04-02
  • 如何使用TS对axios的进行简单封装
    目录1.安装axios2.在合适路径下新建request.ts(名称可随意),例如可以在项目的src下创建utils文件夹创建request.ts3.导入axios并创建axios实...
    99+
    2022-11-13
    ts axios简单封装 ts封装axios
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作