RIFF: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
 
Строка 1: Строка 1:
'''RIFF''' ({{lang-en|Resource Interchange File Format}}) — один из форматов [[файл]]ов-[[Медиаконтейнер|контейнеров]] для хранения потоковых [[мультимедиа]]-данных ([[видео]], [[аудио]], возможно текст). Наиболее известными контейнерными форматами, использующими RIFF в качестве основы, являются: [[AVI]] (видео), [[WAV]] (аудио), [[RIFF MIDI|RMI]] ([[MIDI]]-треки).
'''RIFF''' ({{lang-en|Resource Interchange File Format}}) — формат [[файл]]ов-[[Медиаконтейнер|контейнеров]] для хранения потоковых [[мультимедиа]]-данных ([[видео]], [[аудио]], текста). Наиболее известными контейнерными форматами, использующими RIFF в качестве основы, являются [[AVI]] (видео), [[WAV]] (аудио), [[RIFF MIDI|RMI]] ([[MIDI]]-треки).


Формат RIFF использует [[порядок байтов]] ''little-endian'' (младший байт идёт первым). Для машин с форматом данных ''big-endian'' предлагался формат '''RIFX''', однако из-за существенно меньшей в бытовом секторе популярности [[компьютер]]ов с таким форматом данных RIFX не прижился, и в настоящее время формат ''RIFF'' воспроизводится и на машинах с big-endian порядком байтов.
Формат RIFF использует [[порядок байтов]] ''little-endian'' (младший байт идёт первым). Для машин с форматом данных ''big-endian'' предлагался формат '''RIFX''', однако из-за существенно меньшей в бытовом секторе популярности [[компьютер]]ов с таким форматом данных RIFX не прижился, и в настоящее время формат ''RIFF'' воспроизводится и на машинах с big-endian порядком байтов.


Изначально RIFF имел принципиальное ограничение размера данных в 4 [[двоичные приставки|ГБ]] (точнее, максимальный размер файла <math>2^{32}+7</math> байт). В силу особенностей ряда популярных [[компьютерная программа|программ]] по созданию и воспроизведению файлов (в большой степени из-за медиастека в [[Windows|Microsoft Windows]]) ограничение усилилось до 2 ГБ (из-за замены в [[Синтаксический анализ|парсерах]] RIFF’а DWORD на signed int32). Для поддержки файлов больше 4 ГБ формат AVI был расширен до [[AVI-DV]], выходящего за рамки контейнера RIFF. На базе RIFF предложено расширение [[RF64]], позволяющее работать с 64-битными числами для размеров chunk’ов, разработанное [[European Broadcasting Union]].
Изначально RIFF имел принципиальное ограничение размера данных в 4 [[двоичные приставки|ГБ]] (точнее, максимальный размер файла <math>2^{32}+7</math> байт). В силу особенностей ряда популярных [[компьютерная программа|программ]] по созданию и воспроизведению файлов в [[Microsoft Windows]] ограничение усилилось до 2 ГБ (из-за использования в API RIFF ''signed int32''). Для поддержки файлов больше 4 ГБ формат AVI был расширен до [[AVI-DV]], выходящего за рамки контейнера RIFF. На базе RIFF предложено расширение [[RF64]], позволяющее работать с 64-битными числами для размеров chunk’ов, разработанное [[European Broadcasting Union]].


Формат RIFF является адаптацией формата [[Interchange File Format|IFF]] для little-endian компьютеров (в основном, ради [[IBM PC-совместимый компьютер|PC]] на x86). Разработан он был в [[1991 год]]у компаниями [[Microsoft]] и [[IBM]]. (IFF был создан фирмой [[Electronic Arts]] в [[1985 год]]у).
Формат RIFF разработан в [[1991 год]]у компаниями [[Microsoft]] и [[IBM]] на основе формата [[Interchange File Format|IFF]], разработанного компанией [[Electronic Arts]] в [[1985 год]]у, для little-endian компьютеров.


== chunk ==
== chunk ==
Основной концепцией RIFF-формата является '''chunk''' — блок данных, состоящий из трёх полей:
Основной концепцией RIFF-формата является '''chunk''' — блок данных, состоящий из трёх полей:
{| class="standard"
{| class="standard"
|-
|-
Строка 98: Строка 98:


=== LIST ===
=== LIST ===
Chunk 'LIST' имеет формат, аналогичный RIFF, первые 4 байта содержат ListType (тип вложенного chunk’а), далее до конца чанка следуют вложенные chunk’и. В рамках формата AVI внутри LIST содержатся chunk’и с заголовком файла, заголовками потоков. Так же chunk LIST используется для хранения информации о содержимом.
Chunk '''LIST''' имеет формат, аналогичный RIFF, первые 4 байта содержат ListType (тип вложенного chunk’а), далее до конца чанка следуют вложенные chunk’и. В рамках формата AVI внутри LIST содержатся chunk’и с заголовком файла, заголовками потоков. Так же chunk LIST используется для хранения информации о содержимом.


=== JUNK и PAD ===
=== JUNK и PAD ===
Для выравнивания блоков данных по размеру сектора на носителе для обеспечения скорости перемотки и доступа существуют два chunk’а: ''' 'JUNK' ''' и ''' 'PAD' ''', которые «ничего не значат» и пропускаются программами воспроизведения. Изначально предполагалось, что при создании файла эти chunk’и будут просто заполнены нулями, однако некоторые программы редактирования видео хранят там свою [[сигнатура|сигнатуру]] (например, так поступает [[Virtual Dub]]).
Для выравнивания блоков данных по размеру сектора на носителе для обеспечения скорости перемотки и доступа существуют два chunk’а: '''JUNK''' и '''PAD''', которые «ничего не значат» и пропускаются программами воспроизведения. Изначально предполагалось, что при создании файла эти chunk’и будут просто заполнены нулями, однако некоторые программы редактирования видео хранят там свою [[сигнатура|сигнатуру]] (например, так поступает [[Virtual Dub]]).


Запись chunk’ов в сокращённой нотации:
Запись chunk’ов в сокращённой нотации:
Строка 110: Строка 110:
=== INFO ===
=== INFO ===
'''INFO''' — специальный ListType для хранения информации о содержимом файла. INFO не влияет на то, как программы работают с файлом, эта информация (большей частью) показывается пользователю. Назначение INFO подобно назначению mp3-тегов.
'''INFO''' — специальный ListType для хранения информации о содержимом файла. INFO не влияет на то, как программы работают с файлом, эта информация (большей частью) показывается пользователю. Назначение INFO подобно назначению mp3-тегов.

Список chunk’ов для INFO:
Список chunk’ов для INFO:


* IARL ({{lang-en|Archival Location}}) — место архивного хранения документа (''практически не используется'')
* '''IARL''' ({{lang-en|Archival Location}}) — место архивного хранения документа (''практически не используется'')

* '''IART''' ({{lang-en|Artist}}) — список авторов произведения (''стандартный тег, отображается практически во всех плеерах'').
* '''IART''' ({{lang-en|Artist}}) — список авторов произведения (''стандартный тег, отображается практически во всех плеерах'').
* '''ICMS''' ({{lang-en|Commissioned}}) — список лиц, предоставивших содержимое файла (''не используется'')

* ICMS ({{lang-en|Commissioned}}) — список лиц, предоставивших содержимое файла (''не используется'')

* '''ICMT''' ({{lang-en|Comments}}) — комментарий (''отображается практически во всех плеерах'')
* '''ICMT''' ({{lang-en|Comments}}) — комментарий (''отображается практически во всех плеерах'')

* '''ICOP''' ({{lang-en|Copyright}}) — информация об авторских правах.
* '''ICOP''' ({{lang-en|Copyright}}) — информация об авторских правах.

* '''ICRD''' ({{lang-en|Creation date}}) — дата создания оригинального произведения. Формат YYYY-MM-DD (''редко используется'').
* '''ICRD''' ({{lang-en|Creation date}}) — дата создания оригинального произведения. Формат YYYY-MM-DD (''редко используется'').
* '''ICRP''' ({{lang-en|Cropped}}) — данные об обрезке произведения (''не используется'').

* ICRP ({{lang-en|Cropped}}) — данные об обрезке произведения (''не используется'').
* '''IDIM''' ({{lang-en|Dimensions}}) — физические размеры оригинала (''не используется'').
* '''IDPI''' ({{lang-en|Dots Per Inch}}) — [[Dots per inch|DPI]] оригинала (''не используется'')

* IDIM ({{lang-en|Dimensions}}) — физические размеры оригинала (''не используется'').
* '''IENG''' ({{lang-en|Engineer}}) — фамилии лиц, создававших файл (''не используется'').

* IDPI ({{lang-en|Dots Per Inch}}) — [[Dots per inch|DPI]] оригинала (''не используется'')

* IENG ({{lang-en|Engineer}}) — фамилии лиц, создававших файл (''не используется'').

* '''IGNR''' ({{lang-en|Genre}}) — [[жанр]] (''частично поддерживается'')
* '''IGNR''' ({{lang-en|Genre}}) — [[жанр]] (''частично поддерживается'')
* '''IKEY''' ({{lang-en|Keywords}}) — список ключевых слов, относящихся к произведению (''не используется'')

* IKEY ({{lang-en|Keywords}}) — список ключевых слов, относящихся к произведению (''не используется'')
* '''ILGT''' ({{lang-en|Lightness}}) — степень освещённости оригинала (зависит от оборудования оцифровки) (''не используется'').
* '''IMED''' ({{lang-en|Medium}}) — тип носителя оригинала (''не используется'')

* ILGT ({{lang-en|Lightness}}) — степень освещённости оригинала (зависит от оборудования оцифровки) (''не используется'').

* IMED ({{lang-en|Medium}}) — тип носителя оригинала (''не используется'')

* '''INAM''' ({{lang-en|Name}}) — название произведения. Существуют разногласия о том, следует ли использовать INAM или ISBJ для сохранения заголовка произведения (''стандартный тег, поддерживается и часто используется'')
* '''INAM''' ({{lang-en|Name}}) — название произведения. Существуют разногласия о том, следует ли использовать INAM или ISBJ для сохранения заголовка произведения (''стандартный тег, поддерживается и часто используется'')
* '''IPLT''' ({{lang-en|Palette Setting}}) — количество цветов при оцифровке (''не используется'').

* IPLT ({{lang-en|Palette Setting}}) — количество цветов при оцифровке (''не используется'').
* '''IPRD''' ({{lang-en|Product}}) — заголовок продукта, для которого в оригинале предназначалось произведение (''не используется'')

* IPRD ({{lang-en|Product}}) — заголовок продукта, для которого в оригинале предназначалось произведение (''не используется'')

* '''ISBJ''' ({{lang-en|Subject}}) — описывает содержимое файла. Периодически, наравне с INAM, используется для хранения заголовка (''используется'')
* '''ISBJ''' ({{lang-en|Subject}}) — описывает содержимое файла. Периодически, наравне с INAM, используется для хранения заголовка (''используется'')

* '''ISFT''' ({{lang-en|Software}}) — [[Программное обеспечение|ПО]], использованное для создания файла. Обычно автоматически заполняется программами по редактированию, но не отображается в списке тегов (''используется'')
* '''ISFT''' ({{lang-en|Software}}) — [[Программное обеспечение|ПО]], использованное для создания файла. Обычно автоматически заполняется программами по редактированию, но не отображается в списке тегов (''используется'')
* '''ISHP''' ({{lang-en|Sharpness}}) — необходимый уровень резкости для воссоздания произведения (''не используется'')

* ISHP ({{lang-en|Sharpness}}) — необходимый уровень резкости для воссоздания произведения (''не используется'')
* '''ISRC''' ({{lang-en|Source}}) — название организации, предоставившей произведение (''не используется'')
* '''ISRF''' ({{lang-en|Source Form}}) — форма оригинального произведения (бумага/слайд {{nobr|и т. д.}}) (''не используется'')

* ISRC ({{lang-en|Source}}) — название организации, предоставившей произведение (''не используется'')
* '''ITCH''' ({{lang-en|Technician}}) — специалист, производивший оцифровку (''не используется'')

* ISRF ({{lang-en|Source Form}}) — форма оригинального произведения (бумага/слайд {{nobr|и т. д.}}) (''не используется'')

* ITCH ({{lang-en|Technician}}) — специалист, производивший оцифровку (''не используется'')


== Ссылки ==
== Ссылки ==

Текущая версия от 15:48, 18 февраля 2024

RIFF (англ. Resource Interchange File Format) — формат файлов-контейнеров для хранения потоковых мультимедиа-данных (видео, аудио, текста). Наиболее известными контейнерными форматами, использующими RIFF в качестве основы, являются AVI (видео), WAV (аудио), RMI (MIDI-треки).

Формат RIFF использует порядок байтов little-endian (младший байт идёт первым). Для машин с форматом данных big-endian предлагался формат RIFX, однако из-за существенно меньшей в бытовом секторе популярности компьютеров с таким форматом данных RIFX не прижился, и в настоящее время формат RIFF воспроизводится и на машинах с big-endian порядком байтов.

Изначально RIFF имел принципиальное ограничение размера данных в 4 ГБ (точнее, максимальный размер файла байт). В силу особенностей ряда популярных программ по созданию и воспроизведению файлов в Microsoft Windows ограничение усилилось до 2 ГБ (из-за использования в API RIFF signed int32). Для поддержки файлов больше 4 ГБ формат AVI был расширен до AVI-DV, выходящего за рамки контейнера RIFF. На базе RIFF предложено расширение RF64, позволяющее работать с 64-битными числами для размеров chunk’ов, разработанное European Broadcasting Union.

Формат RIFF разработан в 1991 году компаниями Microsoft и IBM на основе формата IFF, разработанного компанией Electronic Arts в 1985 году, для little-endian компьютеров.

Основной концепцией RIFF-формата является chunk — блок данных, состоящий из трёх полей:

тип поля имя поля содержимое поля
FourCC ckID идентификатор типа содержимого chunk'а
DWORD ckSize размер данных chunk'а
BYTE[] ckData данные chunk'а

Если chunk содержит нечётное количество байтов, то в конец поля данных добавляется один байт 00h. Таким образом, размер chunk’а всегда равен чётному числу байтов.

FourCC (от англ. Four-Character Code) — четырёхсимвольный код-идентификатор видеокодеков, форматов сжатия, цветов или (пиксельных) размеров изображения, используемых в медиафайлах. Применительно к RIFF — это ckID (идентификаторы chunk’ов) и типы форм. Применительно к видеопотоку — это идентификатор кодека (например, «XVID», «DIV3», «MP43»). FourCC занимает 4 байта; это размер 32-битного числа, так что иногда FourCC записывают в виде числа (представления числа в ASCII little-endian).

Например:

FourCC число (шестнадцатеричное) число (десятичное)
'RIFF' 0x46464952 1179011410
'AVI ' 0x20495641 541677121
'DIVX' 0x58564944 1482049860
'idx1' 0x31786469 829973609

Два типа chunk’ов RIFF и LIST могут содержать внутри себя вложенные chunk’и. Весь файл представляет собою единый RIFF-chunk (это одна из причин ограничения размера файла).

ckID для chunk’ов самого формата RIFF всегда записываются большими буквами ASCII. В chunk’ах внутренних форматов (использующих RIFF), таких как AVI или WAV, ckID записывается маленькими буквами. Если ckID содержит две или три буквы, недостающие до 4 символов байты заменяются пробелами (AVI → 'AVI ').

Форма записи

[править | править код]

Для удобства записи в спецификациях используется следующая форма записи формата chunk’а:

ckID(<formType> ck)

Например, запись для AVI-файла: RIFF('AVI ' LIST('hdrl' avi_header) LIST ('movi' movi) [idx1]). (Квадратные скобки указывают на необязательность элемента.)

Стандартные chunk’и

[править | править код]

«RIFF» DWORD:SIZE DWORD:FOURCC BYTE[]:DATA

Chunk с ckID = 'RIFF' имеет следующую структуру ckData:

тип поля имя поля комментарий к полю
FourCC FormType тип содержимого
BYTE[] ck содержимое

Наиболее распространённые типы FourCC:

  • 'AVI ' — AVI: содержат видео- и аудиоинформацию.
  • 'WAVE' — WAV: содержит звуковую информацию
  • 'RMID' — RMI: содержит музыку в формате MIDI

Другие типы:

  • 'RDIB' — англ. RIFF Device Independent Bitmap формат хранения изображений
  • 'RMMP' — англ. RIFF Multimedia Movie File
  • 'PAL ' — англ. Palette Format

Chunk LIST имеет формат, аналогичный RIFF, первые 4 байта содержат ListType (тип вложенного chunk’а), далее до конца чанка следуют вложенные chunk’и. В рамках формата AVI внутри LIST содержатся chunk’и с заголовком файла, заголовками потоков. Так же chunk LIST используется для хранения информации о содержимом.

Для выравнивания блоков данных по размеру сектора на носителе для обеспечения скорости перемотки и доступа существуют два chunk’а: JUNK и PAD, которые «ничего не значат» и пропускаются программами воспроизведения. Изначально предполагалось, что при создании файла эти chunk’и будут просто заполнены нулями, однако некоторые программы редактирования видео хранят там свою сигнатуру (например, так поступает Virtual Dub).

Запись chunk’ов в сокращённой нотации:

JUNK (filler) PAD (filler)

INFO — специальный ListType для хранения информации о содержимом файла. INFO не влияет на то, как программы работают с файлом, эта информация (большей частью) показывается пользователю. Назначение INFO подобно назначению mp3-тегов.

Список chunk’ов для INFO:

  • IARL (англ. Archival Location) — место архивного хранения документа (практически не используется)
  • IART (англ. Artist) — список авторов произведения (стандартный тег, отображается практически во всех плеерах).
  • ICMS (англ. Commissioned) — список лиц, предоставивших содержимое файла (не используется)
  • ICMT (англ. Comments) — комментарий (отображается практически во всех плеерах)
  • ICOP (англ. Copyright) — информация об авторских правах.
  • ICRD (англ. Creation date) — дата создания оригинального произведения. Формат YYYY-MM-DD (редко используется).
  • ICRP (англ. Cropped) — данные об обрезке произведения (не используется).
  • IDIM (англ. Dimensions) — физические размеры оригинала (не используется).
  • IDPI (англ. Dots Per Inch) — DPI оригинала (не используется)
  • IENG (англ. Engineer) — фамилии лиц, создававших файл (не используется).
  • IGNR (англ. Genre) — жанр (частично поддерживается)
  • IKEY (англ. Keywords) — список ключевых слов, относящихся к произведению (не используется)
  • ILGT (англ. Lightness) — степень освещённости оригинала (зависит от оборудования оцифровки) (не используется).
  • IMED (англ. Medium) — тип носителя оригинала (не используется)
  • INAM (англ. Name) — название произведения. Существуют разногласия о том, следует ли использовать INAM или ISBJ для сохранения заголовка произведения (стандартный тег, поддерживается и часто используется)
  • IPLT (англ. Palette Setting) — количество цветов при оцифровке (не используется).
  • IPRD (англ. Product) — заголовок продукта, для которого в оригинале предназначалось произведение (не используется)
  • ISBJ (англ. Subject) — описывает содержимое файла. Периодически, наравне с INAM, используется для хранения заголовка (используется)
  • ISFT (англ. Software) — ПО, использованное для создания файла. Обычно автоматически заполняется программами по редактированию, но не отображается в списке тегов (используется)
  • ISHP (англ. Sharpness) — необходимый уровень резкости для воссоздания произведения (не используется)
  • ISRC (англ. Source) — название организации, предоставившей произведение (не используется)
  • ISRF (англ. Source Form) — форма оригинального произведения (бумага/слайд и т. д.) (не используется)
  • ITCH (англ. Technician) — специалист, производивший оцифровку (не используется)