Det finns inte en enda algoritm för att komprimera och dekomprimera videofiler. Videokomprimering är en komplex process som involverar en kombination av tekniker. De specifika algoritmerna som används beror på den kodek (kodare-decoder) som används. Olika codecs använder olika tillvägagångssätt och erbjuder olika avvägningar mellan kompressionsförhållande, kvalitet och beräkningskomplexitet.
Här är en uppdelning av de viktigaste komponenterna och vanliga algoritmer involverade:
1. Rumslig komprimering (kodning inom ram): Detta handlar om att komprimera enskilda ramar. Tekniker som används inkluderar:
* Diskret kosinustransform (DCT): Detta är en kärnkomponent i många codecs som MPEG, H.264 och H.265. Den förvandlar rumsliga data (pixelvärden) till frekvenskoefficienter. Högfrekventa koefficienter, som representerar fina detaljer, är ofta mindre betydande och kan kvantiseras (reduceras i precision) eller kasseras, vilket leder till komprimering.
* wavelet transformer: Ett alternativ till DCT och erbjuder potentiellt bättre komprimering i vissa fall.
* fraktal komprimering: Utnyttjar självlikhet inom en bild för att uppnå komprimering. Mindre vanligt i videokomprimering på grund av högre beräkningskostnader.
2. Temporal kompression (kodning mellan ramarna): Detta utnyttjar redundans mellan på varandra följande ramar. Tekniker inkluderar:
* rörelseuppskattning och kompensation (MEC): Detta identifierar rörelseområden mellan ramar. Istället för att kodas för hela nya ram kodas endast skillnaderna (rörelsevektorer och restdata). Detta minskar avsevärt mängden data som behövs.
* Förutsägbar kodning: Förutsäger nästa ram baserat på tidigare ramar och kodar endast förutsägelsefelet.
3. Entropikodning: Detta är det sista steget, vilket ytterligare minskar storleken på de komprimerade data genom att tilldela kortare koder till mer frekventa symboler (t.ex. med hjälp av Huffman -kodning eller aritmetisk kodning).
Populära videokodeks och deras algoritmer:
* mpeg-1, mpeg-2: Äldre standarder, med DCT och rörelsekompensation. MPEG-2 används fortfarande för sändning tv.
* mpeg-4 del 2 (divx, xvid): Förbättrades på MPEG-1/2 med mer sofistikerad rörelseuppskattning och bättre kvantiseringstekniker.
* H.264/AVC (avancerad videokodning): En mycket effektiv codec, allmänt används i Blu-ray-skivor, online-video och många andra applikationer. Använder DCT, sofistikerad rörelseuppskattning och andra avancerade tekniker.
* H.265/HEVC (Högeffektiv videokodning): Efterträdaren till H.264 och erbjuder ännu bättre kompressionsförhållanden till bekostnad av högre beräkningskomplexitet.
* VP8, VP9, AV1: Royaltyfria Codecs utvecklade av Google (VP8, VP9) och en öppen källkodsallians (AV1). AV1 anses vara en stark konkurrent till H.265.
dekomprimering: Dekompressionsprocessen vänder i huvudsak dessa steg. Det handlar om avkodning av entropikodade data, utföra inversa DCT eller wavelet-omvandlingar, tillämpa rörelsekompensation (om tillämpligt) och rekonstruera ramarna.
Sammanfattningsvis är videokomprimering en mångfacetterad process som involverar en kombination av rumsliga och temporära kompressionstekniker, tillsammans med entropikodning. De exakta algoritmerna som används beror starkt på den valda Codec, som dikterar de specifika avvägningarna mellan kompressionseffektivitet, kvalitet och beräkningskrav.