La compressione video digitale HEVC (h265)

La compressione video digitale HEVC (h265)
Articolo di approfondimento teorico-pratico sulla compressione video digitale con il nuovo
(2015) algoritmo HEVC.
HEVC è l'acronimo di HighEfficiencyVideoEncoding il cui nome è tutto un programma, quindi
tradotto in italiano sarebbe: Codificatore Video a Alta Efficienza; è un algoritmo di 3a
generazione, successore del mitico H264 che ha portato l'alta definizione nei salotti di tutti, e
nipote dell'altrettanto mitico MPEG che ha portato la rivoluzione digitale nella tv, e ci ha regalato
i DVD.
Ogni generazione di questi algoritmi è più complessa delle precedenti e necessita di maggiore
potenza di calcolo sia per la codifica che la decodifica, ovviamente la compressione è
maggiore, questo è l'ordine di valori in campo, inteso come peso digitale del video per la stessa
qualità d'immagine.
MPEG = 100 ; H264 = 50 ; HEVC = 25
Ogni algoritmo permette una maggiore definizione del video,MPEG è nato per la risoluzione dei
DVD (720*576), H264 è nato assieme al FullHD (1920*1080) e HEVC è nato pensando al 4k
(3840*2160)
Un singolo frame SD ha 414.720 pixels, un frame 720p ne ha 1024.000, un frame 1080p ne ha
2.073.600, mentre un singolo frame 4k ha ben 8.294.400 pixels !
Strumenti software
Programmi impiegati : Avidemux , Handbrake , GomPlayer , VLC Player, MediaInfo, i primi due
sono dei compressori ricodificatori, il 3° e il 4° sono dei riproduttori e l'ultimo fornisce
informazioni sui file.
1/4
La compressione video digitale HEVC (h265)
Il test pratico
Il file di partenza è un file ottenuto da youtube, un video musicale pieno di cambi sequenza, e
molto movimentato, tutta roba che mette in crisi la compressione.
Il file originale è di 70,6 Mb , con un bitrate totale (audio+video) di 2547 kbps e un bitrate solo
video di 2352 kbps.
La qualità di compressione si può settare in tanti modi, ma un ottimo compromesso tra qualità e
velocità di compressione è il cosidetto metodo CRF, non scendo in dettagli per non appesantire
troppo l'articolo, basti sapere che si tratta di inserire un numero di due cifre, a valori bassi
corrisponde massima qualità e minima compressione, viceversa per valori più alti, i valori
plausibili vanno da 15 a 30.
Un altro aspetto determinante è la qualità della compressione, HEVC infatti è estremamente
complesso e quindi ha infiniti settaggi, l'encoder X265 ha creato dei "presets", data la lentezza
della mia CPU (un Amd LLiano 2,8Ghz dual core) posso usare solo i presets peggiori, per
ottenere tempi di codifica accettabili (a livelli medi si parla di 1 ora per comprimere un file da 3
minuti... non oso pensare i livelli lenti).
i settaggi più veloci sono nell'ordine: Ultrafast, Superfast, Veryfast , Faster.
I risultati del test
Parto con il preset Ultrafast e CRF= 26 , Ottengo un file con bitrate video 1298 (il 55% del
bitrate originale), la qualità è molto simile all'originale, ma nelle parti movimentate si notano
artefatti di compressione (quadretti colorati uniformi).
Aumentando il valore CRF peggiorerei la qualità, mentre diminuendolo aumenterei il bitrate oltre
il target del 50% richiesto da questo test, quindi decido di aumentare la qualità della
2/4
La compressione video digitale HEVC (h265)
compressione, passando al preset Superfast, sempre con CRF=26:
il file ha un bitrate video di 1315 kbps, molto simile al primo, ma la qualità è migliorata, ma
qualche artefatto rimane.
per aumentare la qualità non mi resta altro che incrementare ancora la qualità di compressione
passando al preset "veryfast" sempre con CRF=26 (aumentando il tempo di codifica ormai sono
a 4 fps medi..)
Questo terzo file ha bitrate di 1292 kbps, e la qualità è davvero molto molto simile all'originale,
gli artefatti sono praticamente scomparsi del tutto e osservabili solo facendo il fermo immagine,
riproducendo il file alla normale velocità non si notano differenze.
Aumento ancora la qualità con il preset "Faster" (i fps medi diventano 3..) , questo 4°file ha
bitrate video = 1309 kbps , e ora i risultati sono perfetti, si ha il 99% della qualità dell'originale,
eventuali differenze sono anche dovute alla ricompressione, che per forza di cose DEVE
introdurre qualche forma di degrado del video, seppur minima.
Faccio un 5° test per curiosità, a preset "Veryfast" e CRF=27, così il bitrate medio scende a
1147 kbps (49% dell'originale) ma tornano alla carica gli artefatti.. , probabilmente con il preset
"faster" e CRF=27 la qualità sarebbe la stesso che Veryfast + CRF=26, ma il bitrate più basso.
Quindi le dichiarazioni si sono dimostrate vere! HEVC permette di dimezzare il peso di un file
video rispetto a h264, mantenendo praticamente la stessa qualità.
Provando con un altro file video musicale 720p preso da youtube, con veryfast_26 il risultato è
ottimo, però la compressione è solo al 70%, e con CRF=27 raggiunge il 62%, questo video è
molto più movimentato con moltissimi cambi di scena veloci, evidentemente è difficile estrarre
più compressione in questo tipo di video.
3/4
La compressione video digitale HEVC (h265)
I modi ultrafast e superfast non convincono del tutto come qualità, mentre a partire da veryfast
la qualità è ai massimi livelli, con la mia cpu dualcore 2,8ghz il modo veryfast è il miglior
compromesso, purtroppo con la mia cpu comprimere un file lungo come un film richiede molta
pazienza..
Un utilizzo per Hevc potrebbe essere l'archiviazione di filmati h264, la ricompressione
permetterebbe risparmi consistenti di spazio su HD, e quindi evitare o ritardare l'acquisto di un
nuovo HD per l'archiviazione, occorrerebbe valutare quanto costa però in termini di energia
elettrica la ricompressione, per vedere se è valido come costo per Gb rispetto all'acquisto di un
nuovo HD.
Appendice:
Differenze tra SuperFast e Ultrafast: la dimensione minima della CodingUnit scende da 16 a 8,
il buffer di lookahead aumenta da 5 a 10, viene introdotto lo
scenecut
che aiuta nei cambi di sequenza, il motion estimation passa dall'inefficiente diamond a uno
standard hex, il subpixel ME passa da 0 a 1, il signhide da 0 a 1.
Differenze tra VeryFast e SuperFast: i Bframes consecutivi passano da 3 a 4, il buffer
lookahead aumenta da 10 a 15,
viene introdotto il SAO filter
(uno degli elementi chiave di HEVC) il weightp passa da 0 ad 1 e AQ MODE passa da 0 ad 1.
Differenze tra Faster e VeryFast: viene utilizzata la coding unit da 64x64pixel che aumenta
molto la compressione delle aree con pochi dettagli, il subme passa da 1 a 2.
4/4