Как получить длительность видеоклипа/фильма (avi, mpeg, wmv и т.д.) Или как рассчитать на основе имеющихся параметров (fps, bpp, filesize) P.S. желательно способы, которые можно использовать под unix.
IceStudent Там вроде только avi. Я тут нашёл, что движок mplayer выводит информацию в режиме -slave. Осталось только разобраться, куда он её всё-таки выводит
сложность в том, что avi/mpeg это всего лишь контейнер, в котором что-то лежит. по спецификации avi не поддерживает переменный fps, mpeg - поддерживает, но в действительности есть куча avi с переменным fps (правда, не на всех плеерах они играются). индексы в контейнерах могут как быть, так и отсутствовать. или быть, но не соответствовать истине. mplayer в этом смысле не самый лучший выбор. очень часто он ошибается с длинной, причем в сторону ее занижения. т.е. он считает, что доиграл до конца, а фильм все равно продолжается или просто не отображает длину видео и все. типа будем играть сколько сможем пока я не нашел другого способа, чем проиграть видео в /dev/nul (условно) с максимальной скорость. только времени это займет. из всех видимых и опробованных мной программ точнее всего определяет длину файла AVIdemux. он opensource - может, есть смысл "распотрошить" его?
kaspersky Я тоже заметил некорректное определение длины. Но это на фильмах, которые некорректно склеены из нескольких кусков. Все подобные фильмы при просмотре с отображением в osd инфы о длительности и текущей позиции показывают, что фильм склеен. Т.е. выводимая в osd общая длительность например один час, а текущая позиция в течение фильма четыре раза проходит интервал от 0 до 15 мин. Отсюда все неприятности. Но это не только mplayer так ведет себя. Xine тоже буксует на клееных фильмах. А mplayer я использую потому, что он воспроизводит wmv3, которые xine не поддерживает со своим дефолтным набором кодеков.