python批量剪切视频文件

news/2024/10/17 4:52:59/

  python也支持视频处理,参考文献1中介绍了几种视频处理方式,本文采用moviepy模块进行视频处理。
  moviepy不是python的默认安装模块,需要安装该模块,否则执行程序时会报下面的错误:

在这里插入图片描述
  可以通过下列命令在线安装moviepy模块,安装过程如下图所示,安装成功后,即可在python程序中导入moviepy模块并使用其中的内容。

pip install moviepy

在这里插入图片描述
  要剪切视频,需要获取视频长度,之前的文章中是调用ffmpeg获取的,而在python中通过创建VideoFileClip对象,在其duration属性中获取时长(参考文献1中返回的是毫秒,本文测试时该属性返回的时长是按秒算的)。程序代码如下所示:

# coding=gbkfrom moviepy.editor import VideoFileClip
import ospath = r"D:\test"
files=os.listdir(path)for onefile in files:myclip =VideoFileClip(path+'\\'+onefile )print(onefile+' 时长:',end='')print(myclip.duration)	

  获取时长后,仿照前面文章中的测试示例,将视频前后30秒的内容去掉。在python的moviepy模块中,主要调用subclip函数剪切视频及write_videofile保存视频。
  subclip函数设置起始时间和结束时间,一般结束时间都是通过总时间减去尾部剪切时间算的,但是该函数支持结束时间指定为负数,如果是负数,则程序会自动用总时间加上负数计算截止时间(这样其实就可以不用专门写代码获取视频时长了),如下面的函数说明所示。

在这里插入图片描述
  最终的批量剪切视频文件的程序如下所示:

	# coding=gbkfrom moviepy.editor import VideoFileClipimport ospath = r"D:\test"files=os.listdir(path)fileIndex=1;for onefile in files:myclip =VideoFileClip(path+'\\'+onefile )print(onefile+' 时长:',end='')print(myclip.duration)subclip = myclip.subclip(30, -30)subclip.write_videofile(path+'\\'+str(fileIndex)+".mp4")fileIndex+=1

  上述程序执行完毕后,视频虽然已剪切完毕,但是还是报了一个句柄无效的错误(如下图所示),根据参考文献4,在循环语句块中的write_videofile后面增加了一行myclip.close()语句,再运行程序,就不会出现该错误。
在这里插入图片描述
  使用C#调用ffmpeg剪切视频和用python剪切视频各有千秋:
  ffmpeg只有一个可执行文件,将其放在C#程序目录下即可调用,但是通过命令行参数方式调用ffmpeg时需要拼接命令行参数,并且命令行参数中的视频文件路径不能包含空格,否则ffmpeg识别命令行参数时就会出错。
  而python程序安装moviepy模块时虽然装的东西不少,但是安装完毕后使用moviepy时代码简单,上面的python程序总共就十几行,并且不用像C#调用ffmpeg时一样组装命令行参数。

参考文献
[1]https://blog.csdn.net/weixin_42076509/article/details/107127147
[2]https://blog.csdn.net/qq_39241986/article/details/117887624
[3]https://zulko.github.io/moviepy/
[4]https://blog.csdn.net/qq_40706679/article/details/110882529
[5]https://blog.csdn.net/ucsheep/article/details/80999939


http://www.ppmy.cn/news/589381.html

相关文章

ffmpeg视频剪切与拼接

文章目录 ffmpeg工具进行视频剪切与合并剪切视频拼接视频ts格式拼接将ts格式文件转为mp4格式mp4格式拼接 ffmpeg工具常用命令 ffmpeg的安装及基本使用可以看上一篇博客 FFmpeg工具进行快速的视频拼接 ffmpeg工具进行视频剪切与合并 多媒体视频处理工具FFmpeg有非常强大的功能…

使用免费开源软件 Blender 编辑视频,从剪切开始

Blender 是一款强大的免费开源的 3D 建模软件,不为人知的是它还是一款强大的视频编辑软件。因为是免费软件使用它编辑视频,不用担心水印的问题,还能享受专业视频编辑软件的功能。 下面会简单介绍如何使用这款软件做视频剪辑。 1. 下载 Blen…

二叉树题目:二叉树展开为链表

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 后记 题目 标题和出处 标题:二叉树展开为链表 出处:114. 二叉树展开为链表 难度 3 级 …

ModaHub魔搭社区:向量数据库MIlvus服务端配置(三)

目录 gpu 区域 logs 区域 metric_config 区域 gpu 区域 在该区域选择是否在 Milvus 里启用 GPU 用于搜索和索引创建。同时使用 CPU 和 GPU 可以达到资源的最优利用,在特别大的数据集里做搜索时性能更佳。 若要切换到 CPU-only 模式,只要将 enable 设…

Linux ACPI 高级电源管理状态

ACPI Power States 中定义了 G、S、D、C、P 5 个大的电力状态。 G状态 Global system state G 状态表示的是用户看到的整个系统的电力状态。 G0 运行模式。向硬件提供电源,软件可以运行的状态。 G1 停止模式。所谓的待机或休眠状态。 G2 软件为关闭状态&#xf…

金融场景下Java微服务图片压缩/加密等处理实战

目录导读 金融场景下Java微服务图片压缩/加密等处理实战1. 业务场景1.1 业务诉求1.2 业务分析 2. 技术分析2.1 技术预研2.2 处理问题汇总 3. 达成效果4. 编码解构 金融场景下Java微服务图片压缩/加密等处理实战 研究某项技术或者代码框架时,如果没有清晰的业务目标…

【Python爬虫与数据分析】进阶语法

目录 一、异常捕获 二、迭代器 三、拆包、聚合、映射 四、filter() 函数 五、匿名函数 六、闭包 七、装饰器 一、异常捕获 异常捕获可增强程序的健壮性,即程序在遇到遇到异常的时候并不会做中断处理,而是会将异常抛出,由程序员来分析…

红警3修改器无法连接服务器,红警3序列号修改器-不能加入游戏怎么办?红警3连局域网说cd-– 手机爱问...

2018-03-05 为什么我的红警不能联局域网 红警局域网联机的具体方法: 适用于原版红警、尤里复仇,及任何同样的扩展版。 第一步:安装IPX协议。 方法: 控制面板——网络连接(或网上邻居属性)——本地连接属性 ——在“此连接使用下列项目”中&am…