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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
python 使用get_argument获取url query参数
Apr 28 Python
Python面向对象编程基础解析(二)
Oct 26 Python
Python 多核并行计算的示例代码
Nov 07 Python
python实现二叉树的遍历
Dec 11 Python
全面分析Python的优点和缺点
Feb 07 Python
python pandas 时间日期的处理实现
Jul 30 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
Pycharm+Python+PyQt5使用详解
Sep 25 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
python实现猜数游戏
Mar 27 Python
python数据类型强制转换实例详解
Jun 22 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/03/14 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
prettify 代码高亮着色器google出品
2010/12/28 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
js实现验证码功能
2020/07/24 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python3下载抖音视频的完整代码
2019/06/05 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Python是什么 Python的用处
2020/05/26 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
查询优化的一般准则有哪些
2015/03/08 面试题
护理专业推荐信
2013/11/07 职场文书
上课不认真检讨书
2014/09/17 职场文书