社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python剪辑视频?太简单了!

Python绿色通道 • 3 年前 • 859 次点击  




    

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包

人生苦短,快学Python!

最近我在网上下载一个视频,结果下载到本地是近百个视频片段,为了方便观看只能将这些片段合并为一个视频整体。

不过我并没有搜到能够处理类似情况的小工具,只是发现剪映等软件可以实现视频合并功能。但是为此下载一个视频剪辑软件,再将一百个视频导进去,最后重新渲染视频也要花费不少时间。

那我,还不如干脆写个Python小脚本,让程序自己慢慢跑去。

MoviePy

MoviePy是一个用于视频编辑的Python模块,你可以用它实现一些基本的操作(比如视频剪辑,视频拼接,插入标题),还可以实现视频合成,还有视频处理,抑或用它加入一些自定义的高级的特效。

# 先安装moviepy模块
pip install moviepy

结合我们前文的需求,搭配使用os模块和MoviePy就可以实现视频片段的合并。

在交互式环境中输入如下命令:

from moviepy.editor import *
import os
L = []

# Python视频片段存放的文件夹
for root, dirs, files in os.walk(r"D:\视频\Python视频"):
    files.sort()  # 按文件名排序
    for file in files: # 遍历所有文件
        if os.path.splitext(file)[1] == '.mp4': # 筛选后缀名为.mp4的视频文件
            filePath = os.path.join(root, file)     # 拼接完整文件路径
            video = VideoFileClip(filePath)   # 载入视频
            L.append(video) # 添加到数组
    final_clip = concatenate_videoclips(L)
    final_clip.to_videofile("合并视频.mp4", fps = 30, remove_temp = False)

由于视频片段比较多,总时长也比较长,因此运行特别慢。

不过最后,还是成功得到了合并后的Python学习视频。

实际上,这只是MoviePy模块最最简单的应用,它还可以用在剪辑视频的方方面面。

更多应用

比如我们可以使用MoviePy模块截取视频的一部分,并对被定格的一帧画面进行处理,从而实现下图一样的定格视频效果。

还可以给视频增加各种特效,比如给MoviePy Logo做一个闪动的阴影效果[1]。

如果我们使用MoviePy模块对视频进行截取GIF,把截取的GIF进行ASCII字符转换[2]。

最后将被ASCII字符转换成的图片合并成新视频,再添加背景音乐,就可以实现B站特别火的字符画视频。

其实放开思路,Python在视频剪辑方面的应用也很多。

比如我还发现有人通过音频剪辑的方式,对音频进行二次处理。

这种方式,能够一次性过滤停顿、杂音和静音,得到新的音频文件。

从此以后,人人都是“通辽可汗”!

参考资料

[1]

ucsheep: MoviePy实战案例-给MoviePy_Logo做一个闪动的阴影效果

[2]

Dragon少年: 见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频

如果你对Python进行视频剪辑方面感兴趣,记得多多点赞支持一下,点赞数比较多的话,我会继续分享相关案例。



    



  1. Python 办公自动化,全网最全干货来了!

  2. Python和Excel的完美结合:常用操作汇总


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/148730