Da quello che ricordo, i codec di famiglia JPEG e MPEG / H264 rappresentano internamente le immagini nello spazio colore YCbCr (non RGB), dove Y è la luminanza e Cb con Cr sono i componenti della crominanza. Mentre viene utilizzato ogni pixel del componente Y, la crominanza viene ridotta in base a uno dei pochi schemi possibili. Il guadagno di compressione principale in JPEG (e nei fotogrammi chiave dei codec di movimento) viene ottenuto mediante la quantizzazione dei risultati DCT, il che significa eliminare le componenti ad alta frequenza di ciascun blocco di immagine.
Per comprimere le differenze tra i fotogrammi causati dal movimento, la previsione del movimento viene utilizzata nel componente di luminanza (prima del DCT). Molto brevemente, ogni fotogramma è diviso in blocchi regolari di pixel e ogni blocco del fotogramma corrente viene confrontato con i pixel del fotogramma precedente per trovare la corrispondenza più simile. Questo produce il vettore di spostamento (vettore di movimento). Poiché la corrispondenza non è ideale, le differenze di valori dei pixel in ciascuna delle componenti Y, Cb e Cr vengono passate attraverso la normale compressione JPEG (DCT, quantizzazione, codifica Huffman) e inviate lungo il vettore di movimento per formare un Delta Frame.
Qui troverai alcuni suggerimenti per ulteriori ricerche. Spero che non dovrai reinventare la ruota. Esistono alcuni strumenti di elaborazione delle immagini Linux / Unix che potresti sfruttare per il tuo compito.