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