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基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
python解决字符串倒序输出的问题
Jun 25 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
python爬虫基础知识点整理
Jun 02 Python
详解python logging日志传输
Jul 01 Python
为什么说python更适合树莓派编程
Jul 20 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 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新建类问题分析及解决思路
2015/11/19 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
使用js画图之饼图
2015/01/12 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python中zfill()方法的使用教程
2015/05/20 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python字典简介以及用法详解
2016/11/15 Python
python 生成器协程运算实例
2017/09/04 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
Django视图扩展类知识点详解
2019/10/25 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
师范应届生教师求职信
2013/11/05 职场文书
关于旷工的检讨书
2014/02/02 职场文书
国家助学金受助感言
2015/08/01 职场文书
聘用合同范本
2015/09/21 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL