Tar*_*ngh 4 python video-processing moviepy
我正在创建一个使用 MoviePy 模块的 Python 脚本,从较大的视频中获取剪辑并将它们连接在一起。
剪辑的时间在 CSV 文件中详细说明,如下所示;
0,10
11,19
15,20
34,42等
我所做的是逐行读取 CSV 文件,然后使用 Moviepy 中的 subclip 方法创建一个存储在剪辑列表中的剪辑,但是我得到一个 IndexError - 列表索引超出范围。
可能是什么问题(如果我不使用 subclip 方法和 CSV 文件中的值,代码可以正常工作)?
这是我的代码:
video= VideoFileClip('file')
clipsArray = []
import csv
with open('csv file', 'r') as file:
reader = csv.reader(file)
for row in reader:
startTime = row[0]
endTime = row[1]
clip = fullVideo.subclip(startTime, endTime)
clipsArray.append(clip)
Run Code Online (Sandbox Code Playgroud)
错误信息是:
文件“C:\Anaconda3\envs\py35\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 685 行,在运行文件 execfile(文件名,命名空间)中
文件“C:\Anaconda3\envs\py35\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 85 行,在 execfile exec(compile(open(filename, 'rb').read(),文件名、'exec')、命名空间)
File "C:/spyder2-py3/program.py", line 32, in Clip = fullVideo.subclip(start, end) # 为每个时间戳创建剪辑
文件“”,第 2 行,子剪辑中
文件“C:\Anaconda3\envs\py35\lib\site-packages\moviepy\decorators.py”,第 86 行,包装器 for (arg, name) in zip(a, names)]
文件“C:\Anaconda3\envs\py35\lib\site-packages\moviepy\decorators.py”,第 86 行,在 for (arg, name) in zip(a, names)]
文件“C:\Anaconda3\envs\py35\lib\site-packages\moviepy\tools.py”,第 78 行,在 cvsecs 中查找 = re.findall(expr, time)[0]
IndexError:列表索引超出范围
CSV 文件:
0,12
16,21
22,29
34,59
89,130
140,160
162,171
它失败的原因是因为当您从此 csv 文件读取时,您会得到startTime和endTime作为字符串,例如'0'在'12'第一行中。
MoviePy 仅接受两种格式的时间:
'hh:mm:ss.dd'(小时、分钟、秒、秒的小数)的字符串,例如'05:12:10.50'5 小时 12 分 10.5 秒。所以你应该写
startTime = float(row[0])
endTime = float(row[1])
clip = fullVideo.subclip(startTime, endTime)
Run Code Online (Sandbox Code Playgroud)