AVInfo анализирует командную строку, изменяет свои настройки в соответствии с ключами командной строки (см ниже), настраивает темплейты, oткрывает файл AVI, читает информацию из него, формирует "output" (строку вывода), выводит её в stdio (в консоль или в туда, куда её перенаправят при помощи операторов перенаправления ввода-вывода >, >>, |). В случае, если открыт файл с поврежденной структурой, или, вообще, не-AVI файл, AVInfo сообщит об ошибке. Поведение в подобных ситуациях может быть изменено при помощи ключей командной строки.
Если указать вместо имени темплейта символ "?", то темплейт будет спрашиваться из stdin. Его можно использовать по отношению к любому темплейту.
Все ключи делятся на две группы. Управляющие выводом/чтением и управляющие поведением при ошибках. Первые идут в группе -f, вторые в группе -e. При этом ключи перечисляются после -f без пробелов и запятых. Например, -ese, -fxiXdmn. Если встречаются ключи, противоречащие друг другу, больший приоритет имеет последний встретившийся ключ. Кроме того, есть ещё ключ "-o" для поддержки OGM. О нём читайте ниже.
Комбинация этих параметров позволяет управлять поведением AVInfo при возникновении ошибки. Например, -ees заставит AVInfo при возникновении ошибки просто "схлопнуться" не выдав при этом ничего. А -eis заставит "эмулировать нормальную работу" - сообщение об ошибках выдаваться не будет и будет сделана попытка показать хоть какую-то информацию.
По-умолчанию у AVInfo установлен режим -emi - при возникновении ошибки выдаётся сообщение и делается попытка продолжить.
Существует два вида темплейтов. Один - общий (главный)- один для каждого файла. Другой - потоковый - повторяется для каждого потока. Например, если в файле два аудио потока и один видео - потоковый темплейт будет выведен ТРИ раза, каждый раз с данными очередного потока. Если в файле один видео и один аудио (стандартная ситуация), то потоковый темплейт будет выведен два раза.
Темплейт представляет из себя "pain-text" (т.е. обычный текст), который копируется один-в-один в строку вывода (output), и подстановок (substitution), которые заменяются на данные, полученные из avi файла.
Подстановка | Значение | комментарий |
%n | Имя файла | В точности соответствует тому, которое было передано AVInfo. |
%J | Только имя файла | У имени файла обрезаются путь и расширение |
%Q | Имя и расширение | У имени файла обрезается путь (если есть). |
%S | Размер файла | Точный размер файла. Например, 2456789 |
%s | Размер файла (human view) | Размер файла в "человечном" виде. Т.е. предыдущее число (2456789) будет выглядеть как "~2.3 M" |
%F | dwMicroSecPerFrame | Период между кадрами (в микросекундах). Величина, обратная fps. |
%f | fps | количество кадров в секунду (с точностью до двух знаков после запятой) |
%e | Alt fps view | Кадров в секудну (целая часть) |
%E | Alt-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 | четырёхсимвольная сигнатура кодека (данные для первого видео-потока) |
%V | biCompression | четырёхсимвольная сигнатура кодека (данные для первого видео-потока) |
%B | bits per pixel | Количество битов на пиксел. (Суммарные данные по всем видео потокам, если видео-потоков более одного, значение неверно) |
%w | format tag | номер аудио-кодека для первого аудио-потока |
%D | Samples per second | частота оцифровки для первого аудио-потока |
%C | Chanels | количество каналов в первом аудио-потоке |
%c | Mono/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. |
%% и ^^ | % и ^ соответственно |
Подстановки, начинающиеся с & имеют следующую структуру:
& [первая буква][вторая буква]
a | v | A | V | t | T | |
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 | IARL | Archival Location. Indicates where the subject of the file is archived. | |
b | Исполнитель | IART | Artist. Lists the artist of the original subject of the file. For example, Michaelangelo. |
c | ICMS | Commissioned. Lists the name of the person or organization that commissioned the subject of the file. For example, Pope Julian II. | |
d | комментарий | ICMT | Comments. 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 | копирайты | ICOP | Copyright. 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 | ICRP | Cropped. Describes whether an image has been cropped and, if so, how it was cropped. For example, lower right corner. | |
h | IDIM | Dimensions. Specifies the size of the original subject of the file. For example, 8.5 in h, 11 in w. | |
i | IDPI | Dots Per Inch. Stores dots per inch setting of the digitizer used to produce the file, such as 300. | |
j | IENG | Engineer. 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 | жанр | IGNR | Genre. Describes the original work, such as, landscape, portrait, still life, etc. |
l | IKEY | Keywords. 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 | ILGT | Lightness. 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 | IMED | Medium. Describes the original subject of the file, such as, computer image, drawing, lithograph, and so forth. | |
o | название | INAM | Name. Stores the title of the subject of the file, such as, Seattle From Above. |
p | IPLT | Palette Setting. Specifies the number of colors requested when digitizing an image, such as 256. | |
q | IPRD | Product. Specifies the name of the title the file was originally intended for, such as Encyclopedia of Pacific Northwest Geography. | |
r | содержимое | ISBJ | Subject. Describes the conbittents of the file, such as Aerial view of Seattle. |
s | ISFT | Software. Identifies the name of the software package used to create the file, such as Microsoft WaveEdit. //Or Nundub | |
t | ISHP | Sharpness. Identifies the changes in sharpness for the digitizer required to produce the file (the format depends on the hardware used). | |
u | ISRC | Source. Identifies the name of the person or organization who supplied the original subject of the file. For example, Trey Research. | |
v | ISRF | Source 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 | ITCH | Technician. 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 | Размер фрейма |
Подстановка | Значение | Комментарий |
#s | biSize | |
#w | biWidth | Ширина |
#h | biHeight | Высота |
#p | biPlanes | Количество слоёв (обычно 1) |
#c | biBitCount | Битность цвета |
#C | biCompression | Сигнатура кодека |
#S | biSizeImage | |
#X | biXPelsPerMeter | |
#Y | biYPelsPerMeter | |
#u | biClrUsed | |
#i | biClrImportant |
Подстановка | Значение | Комментарий |
## | # | |
#f | wFormatTag | порядковый номер кодека |
#H | nChannels | количество каналов звука |
#p | nSamplesPerSecЧастота оцифровки | |
#a | nAvgBytesPerSecБайтрейт | |
#b | nBlockAlign | |
#B | wBitsPerSample | Битность звука (4/8/16) |
#z | cbSize |
При вызове прогаммы ей предоставляется стандартный ввод и вывод, по-умолчанию
ассоциированный с клавиатурой и консолью соотвественно. При помощи симоволов
перенаправления ввода-вывода (>, >>, |) его можно передавать на стандартный ввод-вывод
других программ или записывать в файл. Таким образом, есть возможность записать вывод, например, 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
Начиная с (какой-то там) беты 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