Audio Video Interleave

**Audio Video Interleave** (կրճատ **AVI**; «աուդիո և վիդեո հերթագայություն») RIFF-մեդիակոնտեյներ է, առաջին անգամ օգտագործվել է Microsoft-ի կողմից 1992 թվականին Video for Windows ծրագրային ապահովման մեջ։

Ֆայլի ֆորմատը AVI ընդլայնումով կարող է կրել վիդեո և աուդիո տվյալներ, խտացված կոդեկների տարբեր կոմբինացիաների օգտագործմամբ, որը թույլ է տալիս միատոն վերարտադրել տեսանյութը ձայնի հետ միասին։ AVI ֆայլը կարող է պարունակել տարբեր տեսակի խտացված տվյալներ (օրինակ՝ DivX-վիդեո + WMA-աուդիո կամ Indeo-վիդեո + PCM- աուդիո), կախված այն բանից, թե որ կոդեկն է օգտագործվել կոդավորման կամ ապակոդավորման համար։ Ինչպես DVD-ն, AVI ֆայլերը պահպանում են բազմահոսքային աուդիովիդեո։

## Ֆայլի ֆորմատ
Բոլոր AVI ֆայլերը իրենց մեջ կրում են երկու տարբեր պարտադիր LIST chunk-եր, որոնք սահմանում են հոսքի ֆորմատը և տվյալները։ AVI ֆայլերը նաև կարող են ներառել chunk ինդեքսը։ Այդ լրացուցիչ chunk-ը սահմանում է ֆայլում վիդեոտվյալների տեղադրությունը։
AVI-ֆայլի տիպիկ կառուցվածք՝

**RIFF** ('AVI ' **LIST** ('hdrl' ) **LIST** ('movi' ) ['idx1' ])

### LIST hdrl
AVI ֆայլի և տվյալների հոսքի վերնագրեր կրող Chunk: Տիպիկ կառուցվածք՝

**LIST** ('hrdl' 'avih' () **LIST** ('strl' ) **LIST** ('strl' ) **LIST** ('odml' ))

#### Ֆայլի հիմնական վերնագիր
Ֆայլը սկսվում է հիմնական վերնագրից։ AVI ֆայլերում այդ վերնագիրը սահմանվում է chunk-ով և FOURCC 'avih'-ով։ Վերնագիրը պարունակում է ընդհանուր ինֆորմացիա ողջ ֆայլի համար, ինչպես օրինակ՝ ֆայլում հոսքերի քանակը, վիդեոհոսքի լայնությունը և բարձրությունը։ Հիմնական վերնագիրը ունի հետևյալ կառուցվածքը՝

```c
typedef struct {
    DWORD dwMicroSecPerFrame;
    DWORD dwMaxBytesPerSec;
    DWORD dwReserved1;
    DWORD dwFlags;
    DWORD dwTotalFrames;
    DWORD dwInitialFrames;
    DWORD dwStreams;
    DWORD dwSuggestedBufferSize;
    DWORD dwWidth;
    DWORD dwHeight;
    DWORD dwReserved[4];
} MainAVIHeader;
```

**dwMicroSecPerFrame**-սահմանում է կադրերի միջև միկրովայրկյանների քանակը։ Այն ընդհանուր է ողջ ֆայլի համար։

**dwMaxBytesPerSec**-ցույց է տալիս ֆայլի տվյալների հաղորդման մոտավոր առավելագույն արագությունը։ Դրա իմաստը ցույց է տալիս վայրկյանում բայթերի քանակը, որոնք համակարգը պետք է մշակի։

**dwFlags**-պարունակում է վիդեոֆայլի հատկությունների ցուցակը. Թույլատրելի են հետևյալները.

**dwTotalFrames**- ցույց է տալիս կադրերի ընդհանուր քանակը ֆայլում։

**dwStreams**- ցույց է տալիս ֆայլում հոսքերի քանակը։ Օրինակ՝ աուդիո և վիդեո կրող ֆայլը ունի երկու հոսք։

**dwSuggestedBufferSize**-որոշում է ֆայլի ընթերցման համար խորհուրդ տրվող բուֆերի չափսը։ Այդ չափսը պետք է լինի անհրաժեշտ չափով մեծ, որպեսզի կրի ամենածավալուն chunk-ը։ Եթե այն հավասար է զրոյի կամ շատ քիչ է, ֆայլի վերարտադրման համար ծրագիրը կվերաբաշխի հիշողությունը աշխատանքի ընթացքում, որը կնվազեցնի արդյունավետությունը։

**dwWidth**- տալիս է AVI ֆայլի լայնությունը։

**dwHeight**-տալիս է AVI ֆայլի բարձրությունը։

#### Հոսքերի վերնագրեր
Հոսքի վերնագիրը ունի հետևյալ կառուցվածքը՝

```c
typedef struct {
  FOURCC fccType;
  FOURCC fccHandler;
  DWORD dwFlags;
  DWORD dwPriority;
  DWORD dwInitialFrames;
  DWORD dwScale;
  DWORD dwRate;
  DWORD dwStart;
  DWORD dwLength;
  DWORD dwSuggestedBufferSize;
  DWORD dwQuality;
  DWORD dwSampleSize;
  RECT rcFrame;
} AVIStreamHeader;
```


#### Ֆայլի ընդլայնված վերնագիր
Ֆայլի ընդլայնված վերնագիրը ունի հետևյալ կառուցվածքը՝

```c
typedef struct {
  DWORD dwTotalFrames;
} ODMLExtendedAVIHeader;
```


## Ծանոթագրություններ

## Արտաքին հղումներ
* AVI տեխնոլոգիայի նկարագրություն John’ P. McGowan’-ի հեղինակությամբ
* RIFF-AVI ֆորմատի դոկումենտացիա
* FourCC կոդեկների ցուցակ