快捷搜索: 王者荣耀 脱发

python批量剪切视频文件

  python也支持视频处理,参考文献1中介绍了几种视频处理方式,本文采用moviepy模块进行视频处理。   moviepy不是python的默认安装模块,需要安装该模块,否则执行程序时会报下面的错误:   可以通过下列命令在线安装moviepy模块,安装过程如下图所示,安装成功后,即可在python程序中导入moviepy模块并使用其中的内容。

pip install moviepy

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

# coding=gbk

from moviepy.editor import VideoFileClip
import os

path = r"D:	est"
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=gbk
	
	from moviepy.editor import VideoFileClip
	import os
	
	path = r"D:	est"
	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时一样组装命令行参数。

经验分享 程序员 微信小程序 职场和发展