Moviepy - Создайте несколько подклипов, используя время из файла CSV.

Я создаю сценарий Python, который использует модуль MoviePy, чтобы брать клипы из большего видео и объединять их вместе.

Время для клипов подробно описано в файле CSV следующим образом;

0,10

11,19

15,20

34,42 и т. Д.

Я прочитал файл CSV построчно, а затем с помощью метода subclip из Moviepy создал клип, который хранится в списке клипов, однако я получаю индекс списка 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)

Сообщение об ошибке:

Файл "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'), пространство имен)

Файл "C: /spyder2-py3/program.py", строка 32, в clip = fullVideo.subclip (start, end) # Создайте клипы для каждой из временных меток

Файл "", строка 2, в подклипе

Файл "C: \ Anaconda3 \ envs \ py35 \ lib \ site-packages \ moviepy \ decorators.py", строка 86, в оболочке для (arg, name) в zip (a, names)]

Файл "C: \ Anaconda3 \ envs \ py35 \ lib \ site-packages \ moviepy \ decorators.py", строка 86, in for (arg, name) в zip (a, names)]

Файл "C: \ Anaconda3 \ envs \ py35 \ lib \ site-packages \ moviepy \ tools.py", строка 78, в cvsecs find = re.findall (expr, time) [0]

IndexError: список индекса вне допустимого диапазона

CSV-файл:

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


person TarlochanSingh    schedule 28.01.2016    source источник
comment
Пожалуйста, опубликуйте свое полное сообщение об ошибке, чтобы мы могли увидеть, где возникает ошибка.   -  person Zulko    schedule 28.01.2016
comment
@Zulko Я добавил сообщение об ошибке   -  person TarlochanSingh    schedule 28.01.2016
comment
Кажется, что время в вашем CSV-файле не отформатировано так, как его ожидает MoviePy. Можете ли вы вставить несколько строк из вашего файла CSV?   -  person Zulko    schedule 04.02.2016
comment
@Zulko добавил несколько строк   -  person TarlochanSingh    schedule 04.02.2016
comment
Итак, я думаю, вы хотите добавить float (startTime), float (endTime) в subclip ()   -  person Zulko    schedule 04.02.2016
comment
@Zulko привет, это сработало! Хотите добавить это в качестве ответа, чтобы я мог проголосовать за него? Не могли бы вы мне сказать, зачем понадобился float ()?   -  person TarlochanSingh    schedule 05.02.2016
comment
@Zulko Привет, я опубликовал новый вопрос о вашем скрипте soccer_cuts.py, в котором спрашивается, что означают определенные строки, и как проще всего получить среднюю громкость клипа. Буду признателен, если дадите ответ?   -  person TarlochanSingh    schedule 11.02.2016


Ответы (1)


Причина сбоя в том, что при чтении из этого CSV-файла вы получаете startTime и endTime в виде строк, например '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)
person Zulko    schedule 04.02.2016