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读取浮点数和读取文本文件示例
May 06 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
详解Django中的form库的使用
Jul 18 Python
使用Python脚本生成随机IP的简单方法
Jul 30 Python
Python Web框架Tornado运行和部署
Oct 19 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
python奇偶行分开存储实现代码
Mar 19 Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
python根据txt文本批量创建文件夹
Dec 08 Python
python flask解析json数据不完整的解决方法
May 26 Python
python如何调用字典的key
May 25 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 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
帅气的琦玉老师
2020/03/02 日漫
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP5常用函数列表(分享)
2013/06/07 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python实现解数独程序代码
2017/04/12 Python
python之PyMongo使用总结
2017/05/26 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python集合是否可变总结
2019/06/20 Python
Python安装whl文件过程图解
2020/02/18 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
PHP中如何使用Cookie
2015/10/28 面试题
本科生学习总结的自我评价
2013/10/02 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
工厂会计员职责
2014/02/06 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
财务部岗位职责
2015/02/03 职场文书
收银员岗位职责范本
2015/04/07 职场文书