Moviepy - 使用 CSV 文件中的时间创建多个子剪辑

Moviepy - Create multiple subclips using times from CSV file

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

剪辑的时间在 CSV 文件中有详细说明;

0,10

11,19

15,20

34,42 等等

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

可能是什么问题(如果我不对 CSV 文件中的值使用 subclip 方法,代码工作正常)?

这是我的代码:

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 行,在运行文件中 execfile(文件名,命名空间)

文件 "C:\Anaconda3\envs\py35\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py",第 85 行,在 execfile 中 执行(编译(打开(文件名,'rb')。读取(),文件名,'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 行,位于 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 文件中读取时,您会得到 startTimeendTime 作为字符串,例如第一个中的 '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)