Help - Search - Member List - Calendar
Full Version: Маленькая програмулька AviInfo
Форумы RDA > Другие проекты на RusDivX > Полезные программы
Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
b-x
Еще кстати: а заметил ли кто, что программка под ХР не желает показывать ничего, если расширение написано большими буквами (AVI)? Если маленькими - avi - то все нормально. У меня - так...
starsoft
QUOTE (kvappa @ там)
Кстати, а можно ли как-нибудь сделать, чтобы в AC3 еще и наличие/отсутствие LFE показывалось?

Нет такой информации в заголовке авишки, только количество каналов, частота и тип кодека.

QUOTE (b-x @ там)
программка под ХР не желает показывать ничего, если расширение написано большими буквами (AVI)? Если маленькими - avi - то все нормально.

Какой вариант программы - exe или dll-расшиение эксплорера?
b-x
QUOTE (starsoft @ Воскресенье, 22 Июнь 2003, 11:36)
Какой вариант программы - exe или dll-расшиение эксплорера?

Который по правой кнопке мышки работает - наверное, dll, но я не специалист...
kvappa
2 starsoft:

В заголовке AVI такой информации, вполне возможно, что и нет, но информация есть в заголовке AC3, в начале AVI-файла.
Сначала находим AC3 Syncword - 0B77 и берем пятый байт после него
Например:
0B 77 41 98 1E 40 E1

E1 = 1 1 1 0 0 0 0 1

Алгоритм такой:
1. Если биты, помеченные фиолетовым, имеют значение 000, 001 или 010 - LFE канала нет (так как это 1 и 2 ch modes)
2. Если эти же биты имеют значения 011, 100 или 110, смотрим на бит, выделенный синим: 1 - LFE есть, 0 - LFE нет.
3. Если всё те же три бита имеют значения 101 или 111, смотрим на бит, обозначенный красным: 1 - LFE есть, 0 - LFE нет.

На всякий случай, вот табличка расшифровки трехбитного кода (ибо режимы в 2, 3 и 4 канала имеют по 2 модификации):
000 1+1 Ch1, Ch2
001 1/0 C
010 2/0 L, R
011 3/0 L, C, R
100 2/1 L, R, S
101 3/1 L, C, R, S
110 2/2 L, R, SL, SR
111 3/2 L, C, R, SL, SR
(L=Left, R=Right, S=Surround (Rear channel))

Нужная информация повторяется в AC3 в начале каждого фрейма, но в AVI возможна случайная комбинация 0B77, поэтому лучше искать сразу после ID потока.

В случае 2/0 (только в нем), где возможен dolby surround, можно сделать его детект:
2 бита, помеченные серым:

10 - Dolby Surround encoded

На остальные вариаты можно даже не обращать внимания:
00 - not indicated
01 - Not Dolby Surround encoded
11 - reserved

.

Поправил информацию!
starsoft
2 kvappa:
Спасибо за ценную информацию.

Еще осталось разобраться с вариантом в 2 аудиодорожки, у меня таких файлов очень мало...
Valky
2 kvappa:

Спасибо за инфу! Воспользуемся smileold.gif
kvappa
Да, если интересует более подробная информация по AC3, можно заглянуть сюда:
http://mpucoder.kewlhair.com/DVD/ac3hdr.html

А по поводу второй дорожки я подумаю...

kvappa
Ага, разобрался!!! smileold.gif

Каждый поток имеет свой символьный идентификатор:
00dc - видео, поток 0 (у некомпрессированного видео - вроде db)
01wb - звук, поток 1
02wb - звук, поток 2

Так что прежде, чем искать синк-код 0B77, сначала ищем, прямо с самого начала AVI и пока не найдем, вышеописанные метки. Всё, что нам нужно, находится не слишком далеко от начала файла. Но есть сложность: после метки могут быть просто нули, до метки следующего потока, или некоторое количество нулей, и только потом то, что нужно. Потоки могут перемежаться несколько раз, пока не пойдет нужная информация.
Поэтому, примерный алгоритм может быть такой:
1. Сначала смотрим в заголовке AVI, сколько в нем и каких потоков, потом начинаем искать нужное количество меток (чтобы не искать то, чего нет).
2. Ищем нужную метку, например 01wb. После ее нахождения, ищем дальше синк-код 0B77, пока его не найдем или не встретим следующую метку. Если попалась метка другого потока, перестаем искать комбинацию 0B77 и ищем дальше нужный нам поток.
3. когда найдем искомую комбинацию 0B77 в нужном потоке, повторяем то же самое для второго аудио-потока (02wb), если он есть.

Кстати, можно еще найти идентификатор 00dc, затем сделать поиск строки DivX (обычно - это очень близко), и считать его полную версию, даже с номером билда! С Xvid должно быть тоже самое, я думаю. Приду домой - проверю.

В общем, вроде картина более менее прояснилась, так что если есть еще какие-либо сложности, могу тоже поразбираться. winkold.gif

ЗЫ. Кстати, с ужасом обнаружил, что мой DivX 5.02 CE оставляет строку "DivX501b481" - так что попробую поставить обычную версию, не CE, и сравню.
starsoft
QUOTE (kvappa @ там)
Ага, разобрался!!!

Я тоже разобрался и вставил в программу инфу по каналам АС3. Но прежде чем выдать новую версию попробую еще сделать анализ прелоада и интерлива.

Кстати в только что сделанном рипе в 5.05 эта строчка соответствует "DivX503b830" winkold.gif
kvappa
Круть! Жду с нетерпением! winkold.gif

А версию кодека можно и по номерам билда определять. smileold.gif
kvappa
Хех! Оказывается, только DivX 5.xx прописывает себя после 00dc!

Вот 4 комбинации из 6-ти имеющихся на данный момент:
DivX5.00 = DivX500Build413
DivX5.01 = DivX501b450
DivX5.02 = DivX501b481
DivX5.03 = DivX503b740
DivX5.04 = DivX503b822
DivX5.05 = DivX503b830

Дополнил недостающее cool.gif
starsoft
DivX 5.04 = DivX503b822
kvappa
Внес исправления в пост о детекте каналов в AC3 !!!
starsoft
Обновление версии до 2.01в. Все подробности в первом посте smileold.gif
DarkK
Вот проверка прелоада и интерлива - это рулез. Спасибо
Beaver
Спасибо! Иногда этой проверки прелоада и интерлива очень не хватало... biggrin.gif
Milky Man
40 секунд интерливига маловато, желательно до 64 секунд сделать, лучше до 128 даже. Если не сложно, конечно. Чтобы с ас3 звуком нормально игралось, то 64 секунды рекомендуется как раз (Димоном smileold.gif).
IgorS
Спасибо. Полезная программа.
EvgenyK
Спасибо большое за новую версию. А в каких случаях все равно пишет 5.x ?
sanderp
QUOTE (Milky Man @ Понедельник, 30 Июнь 2003, 9:57)
40 секунд интерливига маловато, желательно до 64 секунд сделать, лучше до 128 даже. Если не сложно, конечно. Чтобы с ас3 звуком нормально игралось, то 64 секунды рекомендуется как раз (Димоном smileold.gif).

Там же разговор о миллисекундах!

А за прогу спасибо! smile.gif
starsoft
2 Milky Man:
Милки, для АС3 рекомендуется 64 милисекунды, а ограничение программы в 40 СЕКУНД! Интерлив в 40 секунд абсолютно бесполезен, это почти равнозначно его отсутствию вообще.

2 EvgenyK:
Возможно что не все варианты номеров билдов проанализированы, особенно для промежуточных версий между 5.02 и 5.03. Можно найти в файле информацию по номеру билда (например "DivX5.0XBuildXXX") и, если известно какой версии это соответствует, вписать в файл .dat в секцию [Video Codec] (ну и заодно написать в топик чтоб знали другие smileold.gif )
Korax
спасибо, обновимся smileold.gif
Yanch
Спасибо smileold.gif

ЗЫ. А в окне About правильнее писать "Thanks to..." а не "Thanks for..."
Valky
Спасибо за обновление!

Маленькие пометки для версии 2.02 smileold.gif

- если Interleave нулевой: 0 msek (-1.#J frame(s))
- хорошо бы было, если бы окошко про интерлив убиралось по клику, а то в крестик попасть трудно (то же самое и с окном Show Info... - правый клик - нужен для копирования, левый - закрыть окно) smileold.gif
starsoft
2 Valky:
QUOTE (Valky @ там)
хорошо бы было, если бы окошко про интерлив убиралось по клику, а то в крестик попасть трудно (то же самое и с окном Show Info... - правый клик - нужен для копирования, левый - закрыть окно)

Это немного проблематично - ведь для того, чтобы пометить что копируется, нужно хотя бы раз воспользоваться левой кнопкой для пометки smileold.gif А окошки легко закрываются кнопкой <ESC> winkold.gif
Могу по дабл-клику сделать закрывание - подойдет?
Valky
А то, что нужно копировать уже помечено, когда окошко открывается, поэтому я и написал. Щелкаем правой мышкой - копируем, щелкаем левой - закрываем окно. До ЭСКейпа тянутся нужно, а мышка всегда в руке smileold.gif
Впрочем, можно и по двойному, только тогда нужно весть об этой фиче донести до юзеров smileold.gif
starsoft
2 Valky:
Смотри, для окна с текстом одинарный клик убирает пометку, это важно для случая, когда нужна не вся информация, а только часть. А в окне интерлива вообще ничего не помечено, каждое текстовое поле нужно метить, значит тоже нужен левый клик.
Valky
Да, тут ты прав. И чего я докопался? Тогда сделай по дабл-клику выход, ладно? smileold.gif

Идея! Окно закрывается после выбора в меню "Копировать". Посмотрели, скопировали - окно больше не нужно.

А чтобы в окошке Preload/Interleave так же было, можно сделать под строчками Preload Interleave еще одно окошечко в две строки для текста про Preload и Interleave, окуда можно эти два параметра скопировать сразу.

Во размечтался! biggrinold.gif
starsoft
Опять обновление. Версия 2.02 ( не бета, заметьте smileold.gif )
Korax
спасибо, обновимся... smileold.gif
DarkK
А как считается битрейт видео? Общий битрейт - битрейт звука?
starsoft
Битрейт_видео = (Размер_файла - Размер_заголовка - Размер_индекса - Размер_звуковых_потоков) * 8 / (Время * 1000).

8 и 1000 чтоб получить килобиты.

Наиболее точный результат (+- 2) получается для файла, длина которого соответствует расчитанному для него при кодировании битрейту (то есть если расчитывали для 2 СД, то для объединенного файла, а не для каждого куска).
DarkK
А Размер_звуковых_потоков=?

Просто попалась полуторачасовая авишка, у которой звука было на 3 минуты. Битрейт видео на ней считался неправильно. Редкий изврат, конечно, но всё-таки... winkold.gif
starsoft
Хех, такой вариант я не учитывал. В следующей версии подправлю.
EvgenyK
Добавишь 5.1 ?
kvappa
Данные по бетам (что удалось найти)

DivX 5.0.3 beta Tahanea - DivX503b696
DivX 5.0.4 Shizo beta 3 - DivX503b804
DivX 5.1 beta Kauehi - DivX503b894
DivX 5.1 beta Manihi - DivX503b922
DivX 5.1 beta Kaukura - DivX503b936
Kolyan
Низнаю что я делаю не правильно, но у меня это прога показывает не правильно фильмы закодированные кодаком 3.хх.
Тоесть фильм закодирован кодаком 3.хх, а прога показывает 4 frownold.gif
У меня проинсталлирован кодак 5.1
Что мне надо сделать чтобы правильно увидить инфо о фильме 3.хх?
starsoft
QUOTE (Kolyan @ там)
Тоесть фильм закодирован кодаком 3.хх, а прога показывает 4

В этом программа не может ошибаться - у этих кодеков разная сигнатура. Либо это всё-таки закодировано 4-ым кодеком, либо информация в файле зачем-то исправлена вручную (это можно сделать используя AviTagEditor). Для поверки можно посмотреть что скажет на этот файл GSpot.
Kolyan
В томто и дело что GSpot и стационарный DivX плейер показывают правильно frownold.gif
Kolyan
Извените за панику winkold.gif
Кажись я разобрался, сам был невнимателен smileold.gif
Он мне показывал:
4.хх -> DivX Codec 4.x
5.хх -> DivX Codec 5.05
3.хх -> DivX ;-) MPEG-4 Fast-Motion

Вот последнию строчку я понимал как DivX 4.хх, а не как 3.хх
Можно было бы последнию строчку както обызначить подругому, чтобы было сразу ясно что 3.хх winkold.gif
Ну теперь буду знать smileold.gif
Спасибо за прогу, пользуюсь давно и охотно.
starsoft
QUOTE (Kolyan @ там)
Можно было бы последнию строчку както обызначить подругому, чтобы было сразу ясно что 3.хх

Нельзя, потому что это и есть официальное название версии 3.Х, у которой, кстати, есть 2 варианта - Low-Motion & Fast-Motion, которые имеют разные сигнатуры и по сути разные кодеры.
kvappa
Нашел баг!

Закодировал файл. Гружу в VirtualDub - всё показывается правильно: Frames: 329153 (3:48:48.313)

Смотрю через AviInfo -
Filesize: 2220.42 Mb (2328274944 bytes)
Play length: 03:29:17.778 (301088 frames)

Правильный только размер файла в метрах. Ну а со временем и числом фреймов - просто беда какая-то...

PS. Кстати, калькулятор Alonzo тоже отличился - для рипа на 4CD, битрейт на сотню больше чем надо насчитал... frownold.gif
kvappa
Дополнение:
DivX 5.1.1 beta 1 - DivX503b1009
Valky
QUOTE (kvappa @ Воскресенье, 19 Октября 2003, 2:04)
PS. Кстати, калькулятор Alonzo тоже отличился - для рипа на 4CD, битрейт на сотню больше чем надо насчитал... frownold.gif

Аналогично. Когда считал чтобы попасть в размер DVD-болванки промазал мегов на 300. Видать с большими объемами где-то там погрешности возрастають... sad.gif
starsoft
2 kvappa:
Спасибо!
Afed
А можно сделать так, чтобы когда из Експлорера делаешь инфо, то окно это не было прилеплено???
Чтобы оно открывалось отдельно??
kvappa
Поправляю инфо по 5-м кодекам.
Summary:

DivX500Build413=DivX Codec 5.00
DivX501b450=DivX Codec 5.01
DivX501b481=DivX Codec 5.02 build 481
DivX501b484=DivX Codec 5.02 build 484
DivX501b487=DivX Codec 5.02 build 487
DivX503b696=DivX Codec 5.05 Tahanea
DivX503b740=DivX Codec 5.03
DivX503b795=DivX Codec Sсhizo (5.04 beta 1 or 2)
DivX503b804=DivX Codec Sсhizo (5.04 beta 3)
DivX503b814=DivX Codec Sсhizo (5.04 beta 4)
DivX503b822=DivX Codec 5.04
DivX503b830=DivX Codec 5.05
DivX503b894=DivX Codec 5.05 Kauehi
DivX503b922=DivX Codec Manihi (5.1 beta 1)
DivX503b936=DivX Codec Kaukura (5.1 beta 2)
DivX503b959=DivX Codec 5.1
DivX503b1009=DivX Codec 5.1.1 beta 1
DivX503b1025=DivX Codec 5.1.1 beta 2
DivX503b1031=DivX Codec 5.1.1

Tahanea, хоть и имеет версию билда, даже более раннюю, чем 5.03, но это всё-таки более поздний проект, чем 5.05. Видимо, авторы кодека вернулись к какой-то отложенной идее. Кроме того, Tahanea и Kauehi не являются бета-версиями (по официальному заявлению, это проапгрейженный 5.0.5, и новые особенности этих модификаций могут являться прототипом для новых версий). А бета-версии 5.1 начинаются только с Manihi.

Sсhizo 5.04 beta 1 и 2 действительно имеют одинаковый номер билда.

DivX 5.02 два раза втихую обновлялся и имеет, в общей сложности, три билда. Два из них я так и не нашел пока. И так пол ночи прокопался в форумах divx.com и в инете, пока шизо-беты искал. winkold.gif

Кстати, я тоже бы очень хотел, чтобы новая версия не прилипала к эксплореру, а оставалась отдельным процессом. rolleyes.gif
starsoft
QUOTE (Afed @ там)
А можно сделать так, чтобы когда из Експлорера делаешь инфо, то окно это не было прилеплено???
Чтобы оно открывалось отдельно??

Да, в следующей версии так и будет.

2 kvappa:
Большое спасибо!
EvgenyK
Спасибо
Valky
2 kvappa:

Спасибо, воспользуемся! smileold.gif
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2025 Invision Power Services, Inc.