Уведомления

Группа в Telegram: @pythonsu

#1 Май 15, 2015 12:20:34

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

Делаю скрипт для автоматической разбивки аудио файлов , вот есть одна функция:

def get_period_sec(part=2, sec=0):
    temp_period = []
    d = sec / part
    a = 0
    b = 0
    for _ in range(part):
        if range(part)[-1] == _:
            a = sec
            temp_period.append([b, a])
            b = d + b
        else:
            a = d + a
            temp_period.append([b, a])
            b = d + b
    print temp_period
get_period_sec(part=3, sec=394)

[, , ]

он выдает равные отрезки времени в списке.

Хотелось бы посмотреть как кто решит эту проблему более эффективным методом. В данном случае все очень примитивно написано =)



Офлайн

#2 Май 15, 2015 12:30:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

def split_int(i, parts=2):
    result = []
    chunk = i / parts
    for p in range(parts):
        start = p * chunk
        result.append([start, start + chunk])
    return result



Офлайн

#3 Май 15, 2015 12:51:27

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

Например если хотим 394 секунды разбить на 40 частей этот алгоритм в последнем чанке конечное число будет 360 а у нас 394 секунды, выходит полностью и правильно аудио файл мы не разобьем всегда будет нехватать несколько секунд ))
Так что тут как бы ты не много не дописал FishHook.



Офлайн

#4 Май 15, 2015 13:32:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9952
Репутация: +  856  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

Jeck290
он выдает равные отрезки времени в списке
>>> get_period_sec(part=2, sec=11)
[[0, 5], [5, 11]]
>>>

0 - 5 – 6 секунд
5 - 11 – 7 секунд



Отредактировано py.user.next (Май 15, 2015 13:49:47)

Офлайн

#5 Май 15, 2015 13:41:04

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

def get_period_sec(part, sec):
    avg = sec / float(part)
    out = []
    last = 0.0
    while last < sec:
        out.append([int(last),int(last + avg)])
	last += avg
    return out

Отредактировано giveback (Май 15, 2015 13:42:09)

Офлайн

#6 Май 15, 2015 20:08:07

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

py.user.next

py.user.next
0 - 5 – 6 секунд
5 - 11 – 7 секунд
Да знаю, там заглушка стоит , если видим что идет последний цикл итерации то выставляем максимальное число секунд что бы переконвертировать все аудио, просто я не додумался как обойти эту фичу (((



Офлайн

#7 Май 15, 2015 21:18:46

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

>>> def f(sec, parts):
...     r = range(0, sec, sec/parts)[:-1] + [sec]
...     return zip(r[:-1], r[1:])
... 
>>> f(394, 3)
[(0, 131), (131, 262), (262, 394)]

Отредактировано bismigalis (Май 15, 2015 21:38:41)

Офлайн

#8 Май 15, 2015 22:06:34

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

Jeck290
выходит полностью и правильно аудио файл мы не разобьем всегда будет нехватать несколько секунд ))
тут надо определится, как делить

например 10 секунд на три можно разделить так
012 345 6789
или так
0123 4567 89

Офлайн

#9 Май 15, 2015 23:06:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9952
Репутация: +  856  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

bismigalis
тут надо определится, как делить
А для 11 секунд и 3 частей
012 345 6789(10)
0123 4567 89(10)
01234 56789 (10)

Походу, тут надо более кропотливо выбирать индивидуально для каждого случая.



Офлайн

#10 Май 15, 2015 23:36:59

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Разбить отрезок времени на равные части.

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

т.е. второй вариант самый подходящий

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version