专治爱剪辑的片头片尾的脚本(Python)
# 起因最近看到很多由爱剪辑做的视频,片头和片尾的展示实在影响视频的美观性,所以想着。如何用Python去实现。于是写了这个脚本。
# 依赖
这里需要一个Python的库叫(https://github.com/Zulko/moviepy),专门用来处理视频的。
# 思路讲解
首先我们观察一般爱剪辑剪过的视频,有普遍的特征,也就是他的片头由6s的展示片段。片尾有6.5s的展示片段。我们需要的就是把前6s和后6.5s的时间视频减掉。
## moviepy中的相关方法
视频时间获取
```
clip=VideoFileClip(文件名).subclip(开始时间,结束时间)
clip.duration #这个就是视频的时间
```
视频剪辑
```python
clip=VideoFileClip(文件名).subclip(开始时间,结束时间)
```
视频保存
`clip.write_videofile(文件名)`
## python中用到的相关方法
获取文件的后缀名
```
file_format=os.path.splitext(filename)
```
获取文件名(不带后缀)
```
file_name=os.path.splitext(filename)
```
# 全部代码
```
#!/usr/bin/env python
# coding=utf-8
from moviepy.editor import VideoFileClip
import os
import sys
import argparse
import pathlib
def get_file_times(filename):
u"""
获取视频时长(s:秒)
"""
clip = VideoFileClip(filename)
return clip.duration
def video_process(filename):
u"""
剪辑的区间在6到视频的总时长-6.5
"""
clip=VideoFileClip(filename).subclip(6,int(get_file_times(filename))-6.5)
file_name=os.path.splitext(filename) #获取文件名(不带后缀)
clip.write_videofile(file_name+"_fuck.mp4") #将文件变成文件名+fuck格式
def check_dir(path):
u"""
用来判断是文件,还是文件夹的方法
"""
my_path=pathlib.Path(path)
ex = my_path.exists()
if ex:
is_dir = my_path.is_dir()
is_file = my_path.is_file()
else:
is_dir=False
is_file=False
return ex,is_dir,is_file
def fuck_dir(filepath):
u"""
文件夹的处理方法
"""
pathDir =os.listdir(filepath)
for allDir in pathDir:
filepath = os.path.abspath(filepath)
child = os.path.join('%s/%s' % (filepath, allDir))
file_format=os.path.splitext(child)
if file_format == ".mp4":
print(child)
video_process(child)
def fuck_file(path):
u"""
文件的处理方法
"""
print("fuck from file")
filepath = os.path.abspath(path)
file_format=os.path.splitext(filepath)
if file_format == ".mp4":
video_process(path)
pass
parse=argparse.ArgumentParser(description="fuck ajj") #解析命令行参数
parse.add_argument("-i","--input",type=str,help="video item")
args = parse.parse_args()
video_item=args.input
ex,is_dir,is_file=check_dir(video_item)
print(ex,is_dir,is_file)
if not ex:
print("the file is not exist!!!!!!\nPlease reinput")
else:
if is_dir:
fuck_dir(video_item)
elif is_file:
fuck_file(video_item)
```
# 用法
```
python fuck_ajj.py -i 你需要处理视频的路径
```
> 当然也可以处理整个文件夹下所有的视频,只需要将路径作为参数传入就可以了 有了脚本也不会用,报一堆错误不会解决
Traceback (most recent call last):
File "D:\file\fuck_ajj.py", line 56, in <module>
File "D:\file\fuck_ajj.py", line 22, in check_dir
File "C:\Users\jasper\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1035, in __new__
self = cls._from_parts(args, init=False)
File "C:\Users\jasper\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 676, in _from_parts
drv, root, parts = self._parse_args(args)
File "C:\Users\jasper\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 660, in _parse_args
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType 还不错。根据楼主的代码自己也写了来用。保存的结果文件虽然只少了10来秒,但文件比原来爱剪辑的文件小了%70以上,很省空间。
但是程序是预先设置了片头和片尾时间,如果爱剪辑修改了这个时长的话,程序也就需要修改了。 靠什么原理处理视频? 这个可以 hjk 发表于 2018-9-16 18:36
靠什么原理处理视频?
获取广告的片段在整个视频里的位置,然后裁剪出来。 太高端了 看的一脸懵逼 我也不会用 爱剪辑还有其他视频吗?请尊重他人劳动成果!/手动滑稽 倪先生 发表于 2018-9-16 19:31
太高端了 看的一脸懵逼
了解Python的话应该挺好懂的吧:lol 现在好多有意思的库都没有接触,楼主这是在github上接触到的,还是实验楼啊 笨笨猪 发表于 2018-9-17 12:46
现在好多有意思的库都没有接触,楼主这是在github上接触到的,还是实验楼啊
GitHub上有个叫awesome-python,里面罗列了很多库awesome-Python地址