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实现判断给定列表是否有重复元素的方法
Apr 11 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
在Pandas中处理NaN值的方法
Jun 25 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
pytorch 常用线性函数详解
Jan 15 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
打包PyQt5应用时的注意事项
Feb 14 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
Python之matplotlib绘制折线图
Apr 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
php实现RSA加密类实例
2015/03/26 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
python实现堆栈与队列的方法
2015/01/15 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
一个入门级python爬虫教程详解
2021/01/27 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
党支部综合考察材料
2014/05/19 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
小学运动会加油稿
2015/07/22 职场文书
新郎婚礼致辞
2015/07/27 职场文书
python获取对象信息的实例详解
2021/07/07 Python