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