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安装第三方库的3种方法
Jun 21 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python pyheatmap包绘制热力图
Nov 09 Python
详解Python3中ceil()函数用法
Feb 19 Python
python的scipy实现插值的示例代码
Nov 12 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
python代码xml转txt实例
Mar 10 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
Python importlib模块重载使用方法详解
Oct 13 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高效率写法(详解原因)
2013/06/20 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
浅析JavaScript动画
2015/06/10 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
Python3实现从文件中读取指定行的方法
2015/05/22 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
Java分治归并排序算法实例详解
2017/12/12 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
为什么说python适合写爬虫
2020/06/11 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
服装机修工岗位职责
2013/12/26 职场文书
打架检讨书800字
2014/01/10 职场文书
大学活动邀请函
2014/01/28 职场文书
餐饮投资计划书
2014/04/25 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
老公保证书怎么写
2015/02/26 职场文书
环卫个人总结
2015/03/03 职场文书
工程款申请报告
2015/05/15 职场文书
党员转正介绍人意见
2015/06/03 职场文书