Moviepy - 使用CSV文件

时间:2016-01-28 17:13:29

标签: python video-processing moviepy

我正在创建一个使用MoviePy模块的Python脚本,从较大的视频中获取剪辑并将它们连接在一起。

剪辑的时间详见CSV文件;

0.10

11,19

15,20

34,42 等

我所做的是逐行读取CSV文件,然后使用Moviepy中的子剪辑方法创建一个存储在剪辑列表中的剪辑,但是我得到一个IndexError - 列表索引超出范围。

可能是什么问题(如果我不将子剪辑方法与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)

错误消息是:

文件" C:\ Anaconda3 \ envs \ py35 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py",第685行,在runfile中     execfile(filename,namespace)

文件" C:\ Anaconda3 \ envs \ py35 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py",第85行,在execfile中     exec(编译(打开(文件名,' rb')。read(),filename,' exec'),命名空间)

文件" C:/spyder2-py3/program.py" ;,第32行,在     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行,in     for(arg,name)in zip(a,names)]

文件" C:\ Anaconda3 \ envs \ py35 \ lib \ site-packages \ moviepy \ tools.py",第78行,在cvsecs中     finds = re.findall(expr,time)[0]

IndexError:列表索引超出范围

CSV文件:

0,12 16,21 22,29 34,59 89,130 140,160 162,171

1 个答案:

答案 0 :(得分:1)

失败的原因是因为当您从此csv文件中读取时,您会将startTimeendTime作为字符串,例如第一行中的'0''12'

MoviePy只接受两种格式:

  • 表示秒数的数字格式(int或float)
  • 形式为'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)