как запросить свойства видеофайла?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

как запросить свойства видеофайла?

Сообщение Piar » 20.04.2005 (Ср) 15:54

не могу найти способ из VB получить расширенную информацию о свойствах файла. конкретно для файлов типа "видеозапись"
Windows XP при отображении свойств файла определяет (кроме размера, даты и т.д.):

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

как эту информацию получить из кода Visual Basic?
поиском не нашел, доки какие смог перерыл - тоже не нашел.
помогите, плиз

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 20.04.2005 (Ср) 16:03

Посмотри эту ссылку
[url]
http://www.mentalis.org/apilist/AVIFileInfo.shtml
[/url]

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 21.04.2005 (Чт) 10:11

спасибо за ссылку, Aleksej
с помощью приведенного примера сделал практически все что нужно, НО...
функции AVIFileInfo и AVIStreamInfo позволяют только считывать хедеры AVI-файла и каждого из потоков, которые в нем есть.
информация о скорости потока в хедере не содержится.
остается узнать способ, которым можно выяснить битрейт аудио-потока.
любой полноценный плеер или даже сама WinXP выдает как минимум два пункта, например: "формат аудио: Lame MP3, битрейт: 192 кбит/с".
кто-нибудь посоветует откуда ее выдернуть?

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 21.04.2005 (Чт) 13:35

Piar, А там может быть variable bitrate и сложно будет определить кбит/с, если только размер аудио потока поделить на время можно узнать среднее значение...
Программисты не глючат - глючат компиляторы...

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 21.04.2005 (Чт) 18:57

CodeName33, конечно может быть и VBR, но размер аудио потока я тоже не могу определить.
а любой плеер и любая прога по обработке видео откуда-то этот средний битрейт берет, даже винда его показывает просто при отображении свойств файла :( ...

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 21.04.2005 (Чт) 19:18

Что такое битрейт? Это всего-лишь некая величина, определяющая количество информации (в киллобайтах) выданное декодером в секунду. Вычесляется оно по довольно простой схеме.
Псевдо-код будет выглядеть примерно так:
Код: Выделить всё

Длина_В_Секундах = ВзятьДВС(Поток)
Длина_В_Байтах = ВзятьДВБ(Поток)

Битрейт = ((Длина_В_Байтах / Длина_В_Секундах) / 1000) * 8


Если файл открыт и полностью прочитан (так назваемый MPEG_ACCURATE, ввел понятие Рэй Долби) - то если у тебя файл с переменным битрейтом, ты получишь среднее значение этого битрейта.
Последний раз редактировалось xolod 21.04.2005 (Чт) 20:51, всего редактировалось 1 раз.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 21.04.2005 (Чт) 20:15

xolod, :)
во-первых, надо ДЕЛИТЬ, а не УМНОЖАТЬ ;)
а во-вторых, в том и загвоздка, что я НЕ МОГУ определить длину конкретного аудио-потока внутри AVI-файла, где потоков может быть сколько угодно :( если ты знаешь как - скажи!

только не надо говорить что для этого надо прочитать весь файл, который может быть и 700MB и больше! операционка явно считает среднюю скорость потока, не считывая весь файл с винта!

помогите...

Sur
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 14.07.2003 (Пн) 20:54
Откуда: C2H5OH

Сообщение Sur » 21.04.2005 (Чт) 20:31

Piar

Я для своего видеокаталога много перепахал инфы на твою тему. И по последнему вопросу рекомендую слить прогу abcAVI Tag Editor. Сама-то она и не нужна, но хелп у нее содержит исчерпывающую информацию для получения битрейтов аж двумя способами. Мне приблизительный подошел и работает. Не найдешь - скину почтой.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 21.04.2005 (Чт) 20:59

2 Piar
Я тебя в двух местах обманул. Действительно делить, к тому же еще надо доделить на 1000. Мне простительно, голова трещит апосля.. да не важно чего, просто апосля :)
Насчет определения всякой-разной информации, ща буду пример катать, накатую - выложу.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.04.2005 (Чт) 21:04

xolod, таки была баня с лялями? ;)

З.Ы. как думаешь, долго я ещё буду тебя преследовать? :D

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 21.04.2005 (Чт) 21:07

Пока я не схожу с вами (и с лялями) в баню? :)

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 22.04.2005 (Пт) 9:01

Piar, AVIStreamInfo - можно получить информацию о потоке. Там dwLength - это размер потока.
Программисты не глючат - глючат компиляторы...

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 22.04.2005 (Пт) 10:56

CodeName33, dwLength - это длина потока в фреймах. не спорю, для видеопотока она отображает реальное количество фреймов. но для аудио там просто полный бред. я просмотрел десяток авишников и убедился в том что из AVIStreamInfo НЕВОЗМОЖНО получить достоверную информацию именно об аудио. для обычной киношки dwLength может отличаться на 2 порядка! это просто недостоверная нифа, так сказать атавизм разработки общего для всех потоков хедера, которые реально уже не несут полноценной смысловой нагрузки...

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 22.04.2005 (Пт) 11:00

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

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 22.04.2005 (Пт) 11:38

нашел инфу о структуре:
RIFF ('AVI '
LIST ('hdrl'
'avih'(<Главный заголовок AVI>)
LIST ('strl'
'strh'(<Заголовок потока>)
'strf'(<Формат потока>)
'strd'(<Дополнительные данные заголовка>)
'strn'(<Название потока>)
...
)

так вот, AVIFileInfo - считывает <Главный заголовок AVI>
AVIStreamInfo - считывает <Заголовок потока>
осталось узнать КАКАЯ ФУНКЦИЯ ВОЗВРАЩАЕТ <Формат потока>??
сам формат этой записи уже тоже нашел

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 22.04.2005 (Пт) 13:49

Piar, Дык dwSampleSize*dwLength - это и будет размер. Я так выводил прогресс бар при сохранении аудио потока в файл.
Программисты не глючат - глючат компиляторы...

Sur
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 14.07.2003 (Пн) 20:54
Откуда: C2H5OH

Сообщение Sur » 22.04.2005 (Пт) 14:37

Piar
У тебя наверно материал не полный. Возьми тут AVI-Info 1.041 класс:
http://edais.mvps.org/Files/Demo/index.html


тут чтобы получить битрейты всех аудио, надо поправить в цикле:

Код: Выделить всё
                            ElseIf AVIStream.fccType = AudioTag Then
                                m_HasAudio = True
                                m_AudioCodec = AVIStream.fccHandler
                                Get #FNum, , AVIWave.wf
                                If (AVIChunk.chSize >= 16) Then Get #FNum, , AVIWave.wBitsPerSample
                                m_AudioFormat = AudioCodecFromFormat(AVIWave.wf.wFormatTag)
                               
                    With AVIWave.wf
                        m_Channels = .nChannels
                        m_SamplesPerSec = .nSamplesPerSec
                        m_KBitPerSec = .nAvgBytesPerSec / 1000 * 8
                    End With
                   
Debug.Print m_KBitPerSec & " (kbps)"
                            End If 'AVIStream.fccType

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 22.04.2005 (Пт) 15:20

Ну все, нахрена парился вчера. Готовый же класс уже написан достопочтимым Mike D Sutton. Piar, юзай.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Piar
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 20.04.2005 (Ср) 15:32
Откуда: Рязань

Сообщение Piar » 23.04.2005 (Сб) 13:39

ToALL! Господа! огромное спасибо всем за помощь, Mike D Sutton - рулит ;) приятно было по-общаться, отличная конфа![/b]

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 19.07.2006 (Ср) 12:45

А нет ли подобного класса для чтения не только AVI но и MPEG например и прочих?

Sur
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 14.07.2003 (Пн) 20:54
Откуда: C2H5OH

Сообщение Sur » 20.07.2006 (Чт) 13:08

Вот тут MediaInfoLib - DLL, к бейсику прикручивается, лучше из бесплатного не найти, проект не заброшен.
http://sourceforge.net/project/showfile ... p_id=86862
Пить или не пить? - да не вопрос!

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 20.07.2006 (Чт) 14:17

Sur
Описание впечатляет. Еще бы работало как надо, будем тестить, спасибо.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 21.07.2006 (Пт) 1:12

А из платного попадалось что стоящее?

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 21.07.2006 (Пт) 2:23

Туманный какой-то примерчик этот. Чтобы теги вытащить придется помучиться. В общем хрень какая-то не структурированная :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 44

    TopList