Документация по AVInfo 0.7.4

Описание

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

Принципы работы AVInfo

AVInfo анализирует командную строку, изменяет свои настройки в соответствии с ключами командной строки (см ниже), настраивает темплейты, oткрывает файл AVI, читает информацию из него, формирует "output" (строку вывода), выводит её в stdio (в консоль или в туда, куда её перенаправят при помощи операторов перенаправления ввода-вывода >, >>, |). В случае, если открыт файл с поврежденной структурой, или, вообще, не-AVI файл, AVInfo сообщит об ошибке. Поведение в подобных ситуациях может быть изменено при помощи ключей командной строки.

Данные, которые извлекает AVInfo из файла

Параметры командной строки

Общий синтаксис вызова avinfo выглядит так:

avinfo filename.avi [-key] [template1 template2]

Как видно, обязательным является только имя файла, при его отсутсвии avinfo выведет ооочень короткую справку и завершится.
Описание структуры темплейтов находится ниже. Вместо темплейта можно указать название "набора" темплейтов (predefined templates).

Список predefined templates

Вместо имени темплейта можно указать его порядковый номер (считая с нуля), например, так:

avinfo --3 movie.avi

Если указать вместо имени темплейта символ "?", то темплейт будет спрашиваться из stdin. Его можно использовать по отношению к любому темплейту.

Ключи командной строки

Все ключи делятся на две группы. Управляющие выводом/чтением и управляющие поведением при ошибках. Первые идут в группе -f, вторые в группе -e. При этом ключи перечисляются после -f без пробелов и запятых. Например, -ese, -fxiXdmn. Если встречаются ключи, противоречащие друг другу, больший приоритет имеет последний встретившийся ключ. Кроме того, есть ещё ключ "-o" для поддержки OGM. О нём читайте ниже.

Ключи для управления ошибками

Комбинация этих параметров позволяет управлять поведением AVInfo при возникновении ошибки. Например, -ees заставит AVInfo при возникновении ошибки просто "схлопнуться" не выдав при этом ничего. А -eis заставит "эмулировать нормальную работу" - сообщение об ошибках выдаваться не будет и будет сделана попытка показать хоть какую-то информацию.

По-умолчанию у AVInfo установлен режим -emi - при возникновении ошибки выдаётся сообщение и делается попытка продолжить.

Ключи для управления "фичами", -f[keys]

Подробнее о ключе -fa

Этот режим (фича) был сделан специально для генерации списков файлов так, чтобы информация о файле занимала точно одну строку, и не "переползала" на другие, при использовании в GoldEd'e, например. В этом режиме avinfo проверяет длину строки, и если она оказывается больше необходимой, начинает выкидывать параметры, стараясь-таки уложиться в 80 символов. (За эту идею отдельное спасибо Славе Суханову). К сожалению, эта фича действует только с режимом --list. Для остальных режимов он приводит к выкидыванию лишних символов - так, например, вместо длительности 0:23:00 будет просто написано 23m.

Описание темплейтов

Виды темплейтов

Существует два вида темплейтов. Один - общий (главный)- один для каждого файла. Другой - потоковый - повторяется для каждого потока. Например, если в файле два аудио потока и один видео - потоковый темплейт будет выведен ТРИ раза, каждый раз с данными очередного потока. Если в файле один видео и один аудио (стандартная ситуация), то потоковый темплейт будет выведен два раза.

Структура темплейта

Темплейт представляет из себя "pain-text" (т.е. обычный текст), который копируется один-в-один в строку вывода (output), и подстановок (substitution), которые заменяются на данные, полученные из avi файла.

Подстановки

Структура подстановки

Все подстановки регистрозависимы.
Подстановка выглядит так: L[data]
L может быть одним из следующих:

Подстановки главного темплейта начинающиеся с % или ^

ПодстановкаЗначениекомментарий
%n Имя файлаВ точности соответствует тому, которое было передано AVInfo.
%J Только имя файлаУ имени файла обрезаются путь и расширение
%Q Имя и расширениеУ имени файла обрезается путь (если есть).
%S Размер файлаТочный размер файла. Например, 2456789
%s Размер файла (human view) Размер файла в "человечном" виде. Т.е. предыдущее число (2456789) будет выглядеть как "~2.3 M"
%F dwMicroSecPerFrame Период между кадрами (в микросекундах). Величина, обратная fps.
%f fpsколичество кадров в секунду (с точностью до двух знаков после запятой)
%e Alt fps view Кадров в секудну (целая часть)
%EAlt-alt fps view Кадров в секунду (выводится только если fps<19)
%M dwMaxBytesPerSecМаксимальный битрейт. Обычно значение в файле не соответсвует реальности.
%R dwReserved1Оставленно для профилактики. Абсолютно бесполезное значение.
%G dwFlags Вывод флагов avi. (числовое значение)
%g dwFlags (decode)Вывод флагов avi. (попытка декодировать)
%T dwTotalFramesОбщее число фреймов
%I dwInitialFramesначальный фрем (что бы это могло значить?)
%t dwStreamsКоличество потоков
%b dwSuggestedBufferSize минимально необходимый буффер для декодирования (обычно игнорируется всеми)
%x dwWidthРазмер картинки по горизонтали
%y dwHeightРазмер картинки по вертикали
%r dwScale?
%a dwRate?
%A dwStart?
%N dwLengthдлительность. Обычно =0 и игнорируется (см %L и %l)
%v video codecчетырёхсимвольная сигнатура кодека (данные для первого видео-потока)
%VbiCompressionчетырёхсимвольная сигнатура кодека (данные для первого видео-потока)
%Bbits per pixelКоличество битов на пиксел. (Суммарные данные по всем видео потокам, если видео-потоков более одного, значение неверно)
%wformat tagномер аудио-кодека для первого аудио-потока
%DSamples per second частота оцифровки для первого аудио-потока
%CChanelsколичество каналов в первом аудио-потоке
%cMono/Stereo/Numberсловесное представление числа потоков (т.е. Mono/Stereo)
%z codec nameназвание кодека для первого видео-потока (данные взяты с сайта www.fourcc.org
%u codec URL (if known) адрес кодека для первого видео-потока
%Z codec author (company)Автор кодека (фирма-изготовитель)
%U codec author URL Адрес сайта автора
%p codec comments Комментарий относительно кодека
%P audio codec name Имя аудио-кодека
%W audio codec #define #define из mmreg.h
%! [cr] Перевод строки. Точный формат зависит от OS.
%% и ^^% и ^ соответственно

Подстановки, начинающиеся с &

Подстановки, начинающиеся с & имеют следующую структуру:
& [первая буква][вторая буква]

Возможные значения первой буквы

Как можно видеть, большая буква соответствует кейфреймам, маленькая - всем фреймам.

Возможные значения второй буквы

Комбинация этих двух букв и даёт смысл подстановки. Ниже приведена таблица значений. Далеко не все они осмысленны, и несущественные (на мой взгляд) сделаны серым цветом. Наиболее ценные - красным.
 avAVtT
n&an
Общее число аудио фреймов
&vn
Общее число видео-фреймов
&An
Общее число аудио-кейфреймов
&Vn
Общее число видео-кейфреймов
&tn
Общее число фреймов (как видео, так и аудио)
&Tn
Общее число кейфреймов (как видео, так и аудио)
b&ab
Аудио битрейт
&vb
Видео битрейт
&Ab
Битрейт аудио кейфреймов
&Vb
Битрейт видео кейфреймов
&tb
Совместный битрейт видео+аудио (битрейт контента)
&Tb
совместый битрейт кейфреймов (видео+аудио)
M&aM
Максимальный размер аудио фрейма
&vM
Максимальный размер видео-фрейма
&AM
Максимальный размер аудио кейфрейма
&VM
Максимальный размер видео кейфрейма
&tM
максимальный размер фрейма (и видео, и аудио)
&Tb
Максимальный размер кейрфейма
m&am
Минимальный размер аудио фрейма
&vm
Минимальный размер видео-фрейма
&Am
Минимальный размер аудио кейфрейма
&Vm
Минимальный размер видео кейфрейма
&tM
минимальный размер фрейма (и видео, и аудио)
&Tb
минимальный размер кейрфейма
s&am
Суммарный размер аудио фреймов (размер данных аудио потока)
&vs
Суммарный размер видео фреймов (размер данных видео потока)
&As
Суммарный размер аудио кейфреймов
&Vs
Суммарный размер видео кейфреймов
&ts
суммарный размер фреймов (размер "полезных данных" avi)
&Ts
суммарный размер кейфреймов
f&af
аудио фреймрейт
&vf
видео fps
&Af
Аудио фреймрейт
&Vf
Видео кейфрейм рейт (среднее число кейфреймов в секуднду)
&tf
Нечто несусветное
&Tf
что-то несусветное
F&aF
длительность аудио фреймов
&vF
пауза между кадрами
&AF
Промежутки между аудио кейфреймами
&VF
Средний промежуток времени между видео кейфреймами
&tf
несусветное нечто
&Tf
несусветное что-то

Кроме того, существует ещё несколько подстановок.

Замечание: Все величины в этом разделе (т.е. начинающиеся с &), касающиеся аудио/видео потоков показывают неверные результаты, если в файле более одного аудио и видео потоков.

Подстановки, начинающиеся с @

Эта группа подстановок достаточно специфична и предназначена для вывода содержимого LIST-INFO чанка (аналог mp3 tag'ов, но в AVI файле).

Стуктура подстановки: @L any text $ any text # any text * any text ]

Обязательными элементами является сам символ "@", буква после него и закрывающая квадратная скобка "]" в конце.


Между $,#,* может находиться любой текст.
Подстановка выводится только в случае, если соответствующее поле существует в файле.

Возможные значения для L:
БукваЗначениеАббревиатураТо, как об этом написано в стандарте
a  IARLArchival Location. Indicates where the subject of the file is archived.
b ИсполнительIARTArtist. Lists the artist of the original subject of the file. For example, Michaelangelo.
c  ICMSCommissioned. Lists the name of the person or organization that commissioned the subject of the file. For example, Pope Julian II.
d комментарийICMTComments. Provides general comments about the file or the subject of the file. If the comment is several sentences long, end each sentence with a period. Do not include newline characters.
e копирайтыICOPCopyright. Records the copyright information for the file. For example, Copyright Encyclopedia International 1991. If there are multiple copyrights, separate them by a semicolon followed by a space.
f датасозданияICRD Creation date. Specifies the date the subject of the file was created. List dates in year-month-day format, padding one-digit months and days with a zero on the left. For example, 1553-05-03 for May 3, 1553.
g  ICRPCropped. Describes whether an image has been cropped and, if so, how it was cropped. For example, lower right corner.
h  IDIMDimensions. Specifies the size of the original subject of the file. For example, 8.5 in h, 11 in w.
i  IDPIDots Per Inch. Stores dots per inch setting of the digitizer used to produce the file, such as 300.
j  IENGEngineer. Stores the name of the engineer who worked on the file. If there are multiple engineers, separate the names by a semicolon and a blank. For example, Smith, John; Adams, Joe.
k жанрIGNRGenre. Describes the original work, such as, landscape, portrait, still life, etc.
l  IKEYKeywords. Provides a list of keywords that refer to the file or subject of the file. Separate multiple keywords with a semicolon and a blank. For example, Seattle; aerial view; scenery.
m  ILGTLightness. Describes the changes in lightness settings on the digitizer required to produce the file. Note that the format of this information depends on hardware used.
n  IMEDMedium. Describes the original subject of the file, such as, computer image, drawing, lithograph, and so forth.
o названиеINAMName. Stores the title of the subject of the file, such as, Seattle From Above.
p  IPLTPalette Setting. Specifies the number of colors requested when digitizing an image, such as 256.
q  IPRDProduct. Specifies the name of the title the file was originally intended for, such as Encyclopedia of Pacific Northwest Geography.
r содержимоеISBJSubject. Describes the conbittents of the file, such as Aerial view of Seattle.
s  ISFTSoftware. Identifies the name of the software package used to create the file, such as Microsoft WaveEdit. //Or Nundub
t  ISHPSharpness. Identifies the changes in sharpness for the digitizer required to produce the file (the format depends on the hardware used).
u  ISRCSource. Identifies the name of the person or organization who supplied the original subject of the file. For example, Trey Research.
v  ISRFSource Form. Identifies the original form of the material that was digitized, such as slide, paper, map, and so forth. This is not necessarily the same as IMED.
w  ITCHTechnician. Identifies the technician who digitized the subject file. For example, Smith, John.

Потоковый темплейт

У потокового темплейта есть одна особенность. Он повторяется (в строке вывода) столько раз, сколько потоков в файле, каждый раз с данными очередного потока.

Подстановки, начинающиеся с символа "$" общие для видео и аудио потоков, c "#" являются специфичными для каждого типа потока. Эти данные показываются только если соответсвуют типу потока. Т.е. указание #w (ширина картинки) будет отображена для видео-потока и будет проигнорированна для аудио.

Подстановки, начинающиеся с $

ПодстановкаЗначениеКомментарий
$$ $
$! [cr]перевод строки
$f fccTypeТип потока (4 байта, или vids или auds)
$h fccHandlerДля видео-потока обычно тип кодека (4 символа)
$F dwFlagsфлаги, выводятся в виде числа
$R dwReserved1
$i dwInitialFrames
$c dwScale
$r dwRateОбычно здесь находится фпс (в сотых долях)
$s dwStart
$l dwLengthКоличество фреймов
$b dwSuggestedBufferSize
$q dwQuality
$S dwSampleSizeРазмер фрейма


Подстановки, начинающиеся с # (для видео-потока, vids)

ПодстановкаЗначениеКомментарий
#sbiSize
#wbiWidthШирина
#hbiHeightВысота
#pbiPlanesКоличество слоёв (обычно 1)
#cbiBitCountБитность цвета
#CbiCompressionСигнатура кодека
#SbiSizeImage
#XbiXPelsPerMeter
#YbiYPelsPerMeter
#ubiClrUsed
#ibiClrImportant

Подстановки, начинающиеся с # (для аудио-потока, auds)

ПодстановкаЗначениеКомментарий
###
#fwFormatTagпорядковый номер кодека
#HnChannelsколичество каналов звука
#pnSamplesPerSecЧастота оцифровки
#anAvgBytesPerSecБайтрейт
#bnBlockAlign
#BwBitsPerSampleБитность звука (4/8/16)
#zcbSize

Поддержка OGM

Файлы в формате OGM поддерживаются весьма криво. Я это знаю, просьба мне (пока) про глюки в обработке OGM не писать. До того момента, пока мне в руки не попадёт нормальная спецификация. Итак, через какое место поддерживается ogm: При указании ключа "-o" в командной строке, AVInfo вместо того, чтобы вызывать ф-цию ReadAVI (чтение информации из avi файла) вызывает ф-цию ReadOGM, которая читает (в меру того, что я знаю об OGM) информацию из OGM файла и заполняет структуры данных об ави. На сегодняшний момент это fps, codec, resolution, битность цвета. Соответственно, получившиеся данные "скармливаются" прочим частям программы как "якобы" avi. Отсюда произрастают массовые глюки. Давить их нет смысла, ибо как только ко мне попадёт нормальная дока по ogm, будет написан нормальный модуль работы с ogm.

Приложения

1. Смысл некоторых величин

2. Использование AVInfo совместно с CMD (windows NT/2k/XP/2003)

При вызове прогаммы ей предоставляется стандартный ввод и вывод, по-умолчанию ассоциированный с клавиатурой и консолью соотвественно. При помощи симоволов перенаправления ввода-вывода (>, >>, |) его можно передавать на стандартный ввод-вывод других программ или записывать в файл. Таким образом, есть возможность записать вывод, например, AVInfo в текствовый файл.

avinfo something.avi --struct-report > something.description

Команда цикла for позволяет выполнить одну и ту же команду с разными параметрами командной строки. Таким образом, для, например, создания файла descript.ion можно выполнить следующую команду:

for %a in (*.avi) do @avinfo -eis %a --description >>descript.ion

В cmd.exe (в отличии от command.com из состава w9x/dos) команда for поддерживает рекурсивный обход каталогов. Таким образом, для того, чтобы создать список файлов по всем каталогам начиная с какого-то, можно выполнить вот такую команду:

for /r "dir" %a in (*.avi) do @avinfo -fia -es %a --list >>my.txt

Для использования в batch-файлах символ % следует удвоить. Т.е. вместо %a следует писать %%a

3. Использование AVInfo совместно с FAR manager

Начиная с (какой-то там) беты Far 1.7 в фаре появилась возможность обрабатывать префиксы командной строки, так что, например, если настроить для avi файлов в ассоциациях на Viewer (F3) следующую строку:

edit:< avinfo "!.!" --far

то по нажатию F3 на любом ави-файле будет выдаваться информация о нём.

Так же, можно повесить в user menu следующую строчку. Она откроет в редакторе фара спискок всех avi-файлов в каталоге и подкаталогах с описанием. Кстати, этот пример используется у меня на машине довольно часто.

edit:<@for /R "!\" %a in (*.avi) do @avinfo -eis -fai %a --list