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中的Numeric包和Numarray包使用教程
Apr 13 Python
Python 文件处理注意事项总结
Apr 10 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
Python打印“菱形”星号代码方法
Feb 05 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python打造爬虫代理池过程解析
Aug 15 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
Pytest中skip skipif跳过用例详解
Jun 30 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数学运算
2011/12/30 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
深入PHP FTP类的详解
2013/06/13 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
理解Koa2中的async&await的用法
2018/02/05 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
原生js实现下拉框选择组件
2021/01/20 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
python交互式图形编程实例(一)
2017/11/17 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
房产转让协议书
2014/04/11 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
教师继续教育反思周记
2015/06/25 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技