利用moviepy对韩国女团视频进行自动剪辑

首先从网上下载女团的饭拍视频,建议是饭拍的竖屏视频,横屏的太远,女团的身体看得不明显,横屏的也不需要进行处理,因为我们的屏幕是横屏的,放横屏的视频自然是没有障碍。当然,看完这篇文章你也可以自己创建你喜欢的布局样式。

我这里是从http://www.gaobei.com/fanpai下载的视频,当然你可能需要一个百度网盘的超级会员,或者自己破解客户端。



为了对视频进行编辑,你可能会想到PR,但是PR的问题在于难以处理批量的任务,以及难以把视频准确地拼接到一起,你需要仔细地调整大小和位置,这是极为不方便的操作,做几个视频你就厌烦了。

python的moviepy库提供了很方便的操作,可以把几个视频拼到一起,你需要首先安装moviepy

pip3 install moviepy

我这里使用的是python3,python2的童鞋自己研究一下。首次安装会自动安装ffmpeg。

然后

from moviepy.editor import *

最核心的地方就一段代码。这个函数把RouteList列表里面的视频路径取出来,然后把它们resize成屏幕的1/12大小,再排好它们在屏幕上的位置就行了。由于我的显示器是1366x768的分辨率,你使用的时候可以改成自己的分辨率。最后输出到OutputRoute指定的位置。

如果你不清楚代码的具体含义,这里说一下方便你更好地DIY。VideoFileClip函数要求输入一个视频的路径,同时可以设置不需要音频,即audio=False。subclip是从两个参数(以秒为单位)指定的时间点截取视频,这里统一截取了10秒钟(这个问题其实很严重,后面再说)。resize需要提供一个(width,height)的大小,set_position需要提供一个[x,y]形式的坐标(指的是左上角的坐标)。CompositeVideoClip函数就相当于PR中的“序列”的概念,要求提供一个video的列表,这里是videos,size字段制定了输出的大小,相当于序列设置里面的大小。write_videofile把序列写到文件中。

def x12_1(RouteList,OutputRoute):
	#视频
	videos = []
	#位置
	pos = []
	for i in range(6):
		pos.append([i*1366/6,0])
	for i in range(6):
		pos.append([i*1366/6,768/2])
	#长度
	length = 10
	#大小
	size = (1366/6,768/2)
	#设置
	for i in range(12):
		video = VideoFileClip(RouteList[i],audio=False).subclip(0, length).resize(size)\
			.set_position(pos[i])
		videos.append(video)
	#输出
	result = CompositeVideoClip(videos, size=(1366, 768))
	result.write_videofile(OutputRoute)

那么下面要解释一下为什么要用subclip截取10秒了。

其实是为了解决一个问题:拼接的长度不一致。

比如说12个视频长度都不一样,最后拼接的时候会有问题,播放到后面你会发现出现越来越多的黑屏,因为时间较短的视频播放 完了,这就非常尴尬了。

为了不引入复杂的算法,我这里采用的是把视频打碎的方法,分成无数个10秒钟的短视频,然后12个一组进行拼接。

下面是把视频打碎的函数。具体不解释了,基本同上面的一样,而且更简单。拼接的时候注意最好把文件乱序排列,然后重命名,这样尽量避免来自同一个视频的片段同时出现,你也不想看1个人的12个视频组合在一起吧。

def CutIntoPieces(route,OutputRoute):
	video = VideoFileClip(route,audio=False)
	length = video.duration
	PieceLen = 10
	i = 0
	while 1:
		if (i + 1) * PieceLen < length:
			piece = video.subclip(i * PieceLen,(i + 1) * PieceLen)
			i = i + 1
			result = CompositeVideoClip([piece])
			result.write_videofile(OutputRoute[0:len(OutputRoute) - 4] + '_' + str(i) + '.mp4')
		else:
			break

调用的时候,类似这样就行了,dst.mp4只是个标志,最后的每个碎片都是dst_1.mp4,dst_2.mp4这种类型

CutIntoPieces('src.mp4','dst.mp4')

这里有个问题没有解决,就是多次调用这个函数之后会出现OSError,句柄无效的错误,目前还不清楚怎么回事,所以建议用bat脚本多次运行程序来避免这个问题。

最后视频可以放到火萤(http://www.huoying666.com/)里随机播放,岂不是美滋滋?


  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值