Python多个MP4合成视频的实现方法


Posted in Python onJuly 16, 2021

开始安装使用

主要是利用 moviepy 这个库, 里面提供了丰富的功能, 我们只需要使用简单的拼接函数

一、安装 Python

这个就不多说了, 直接去官网下载对应的安装包: https://www.python.org/downloads/release/python-364/
然后双击运行,记得点 Add to Path 然后,一路 next

二、安装 moviepy

命令行执行:

pip install moviepy

三、安装 ffmpeg

我们先使用如下命令来尝试安装:

pip install ffmpeg
pip install imageio-ffmpeg

把以上代码保存为 xx.py , 然后在相同目录执行命令:

python3 xx.py

如安装不成功,可以试一试以下操作:

如果之前没安装过 ffmpeg , 这个时候导入 moviepy 开始使用会报错的, 所以我们可以先用 imageio 自带的方法下载 ffmpeg
新建文本文件:

import imageio
import ssl

# 下面这一句不是必须的, 但是某些情况下访问 https 会报SSL证书不受信任, 加上这一句可以允许通过
ssl._create_default_https_context = ssl._create_unverified_context

# 下载 ffmpeg 组件
imageio.plugins.ffmpeg.download()

四、开始写拼接脚本

# 主要是需要moviepy这个库
from moviepy.editor import *
import os

# 定义一个数组
L = []

# 访问 video 文件夹 (假设视频都放在这里面)
for root, dirs, files in os.walk("./video"):
    # 按文件名排序
    files.sort()
    # 遍历所有文件
    for file in files:
        # 如果后缀名为 .mp4
        if os.path.splitext(file)[1] == '.mp4':
            # 拼接成完整路径
            filePath = os.path.join(root, file)
            # 载入视频
            video = VideoFileClip(filePath)
            # 添加到数组
            L.append(video)

# 拼接视频
final_clip = concatenate_videoclips(L)

# 生成目标视频文件
final_clip.to_videofile("./target.mp4", fps=24, remove_temp=False)

把上面代码的 源文件夹 和 目标文件名 改成你自己需要的, 然后把以上代码保存为 concatenate.py 文件, 然后在相同目录执行命令:

python3 concatenate.py

五、等待运行完毕, 完结撒花 ?

等待输出走到 100% , 视频就合并好了。

Moviepy - Building video ./target.mp4.
MoviePy - Writing audio in targetTEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video ./target.mp4

Moviepy - Done !
Moviepy - video ready ./target.mp4

其实 moviepy 还有很多方便的方法, 比如截取视频:

video = VideoFileClip("xxoo.mp4")

# 剪辑视频,截取视频前20秒
video = video.subclip(0,20)

# 剪辑视频,从10秒开始到视频结尾前12秒
video = video.subclip(10, video.duration-12)

六、补充内容

上面的拼接代码实际上有点小问题, files.sort()把文件排序,实际上排出来的结果是不符合我们正常思维的,比如: 1.mp4, 10.mp4, 2.mp4。因为他是从前往后逐字符比较的,而我们想要的结果一般是: 1.mp4, 2.mp4, 10.mp4。这个问题除了自己写各种逻辑代码来处理,也可以直接用一个第三方库: natsort,这个库提供了优秀的自然排序方法。

安装 natsort:

pip3 install natsort

使用:

  • 导入库: from natsort import natsorted
  • 把代码 files.sort() 替换为 files = natsorted(files)

代码如下:

"""
project = 'Code', file_name = 'Video_stitching', author = 'AI悦创'
time = '2020/4/25 12:19', product_name = PyCharm, 公众号:AI悦创
# code is far away from bugs with the god animal protecting
    I love animals. They taste delicious.
"""
# 主要是需要moviepy这个库
from moviepy.editor import *
from natsort import natsorted
import os

# 定义一个数组
L = []

# 访问 video 文件夹 (假设视频都放在这里面)
for root, dirs, files in os.walk("./video"):
    # 按文件名排序
    # files.sort()
    files = natsorted(files)
    # 遍历所有文件
    for file in files:
        # 如果后缀名为 .mp4
        if os.path.splitext(file)[1] == '.mp4':
            # 拼接成完整路径
            filePath = os.path.join(root, file)
            # 载入视频
            video = VideoFileClip(filePath)
            # 添加到数组
            L.append(video)

# 拼接视频
final_clip = concatenate_videoclips(L)

# 生成目标视频文件
final_clip.to_videofile("./target.mp4", fps=24, remove_temp=False)

这样的成功我做出来 MP4 视频的拼接。

到此这篇关于Python把多个MP4合成一个视频的文章就介绍到这了,更多相关Python MP4合成视频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python单元测试简单示例
Jul 03 Python
python中正则表达式 re.findall 用法
Oct 23 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
pymysql的简单封装代码实例
Jan 08 Python
python 实现线程之间的通信示例
Feb 14 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
python db类用法说明
Jul 07 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 Python
深入理解pytorch库的dockerfile
Jun 10 Python
Python如何解决secure_filename对中文不支持问题
利用Matlab绘制各类特殊图形的实例代码
Flask response响应的具体使用
Python 快速验证代理IP是否有效的方法实现
Jul 15 #Python
Django路由层如何获取正确的url
Jul 15 #Python
Python实现排序方法常见的四种
Jul 15 #Python
手把手教你使用TensorFlow2实现RNN
You might like
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
Open and Print a Word Document
2007/06/15 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
js中DOM三级列表(代码分享)
2017/03/20 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
大学生毕业自我鉴定范文
2013/11/03 职场文书
幼师求职信
2014/06/23 职场文书
仓管员岗位职责
2015/02/03 职场文书
村党组织公开承诺书
2015/04/30 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB