I dettagli della compressione senza perdita H.264 di DropBox
By Olga Krovyakova - modified October 6, 2023, created April 3, 2019.
Un paio di settimane fa ci siamo imbattuti in un articolo sugli ingegneri di Dropbox che ricreavano l'algoritmo Pied Piper da un popolare programma televisivo. Dropbox ha sviluppato un algoritmo di compressione senza perdita di dati per file H.264 e JPEG e il nostro team si è messo a valutare questa soluzione e a raccogliere alcuni dettagli tangibili.
Con mezzo occhio, ci siamo resi conto che un file H.264 ricompresso cessava di essere H.264 e poteva essere utilizzato solo per l'archiviazione temporanea. Inoltre, questo metodo di compressione potrebbe risultare efficace in due condizioni: se il file utilizzava CAVLC come codificatore, oppure il file era codificato con blocchi PU e TU di dimensione massima. Entrambe le condizioni possono essere soddisfatte solo se il codec H.264 è impostato per la codifica a velocità massima.
Informazioni sul progetto Pied Piper
Il video è uno dei formati di dati più pesanti , quindi non sorprende che i servizi di elaborazione, trasferimento e archiviazione video debbano considerare la compressione come una soluzione praticabile. Tuttavia, ci sono alcune opzioni disponibili. Nell'agosto 2015 DropBox ha svelato la propria visione del problema: un algoritmo originale, ma incompleto, per file video standard H.264. L'obiettivo principale dell'azienda è l'archiviazione dei file dei propri clienti. Un utente medio si preoccupa poco di come questi file vengono archiviati, ciò che conta è scaricare esattamente gli stessi file intatti – nel modo in cui sono stati caricati. Quindi l'algoritmo DropBox è senza perdite. Inoltre, il risultato della compressione non è un file video nel formato sorgente.
Il nostro articolo mira a valutare l'efficienza di questo algoritmo nella compressione di diversi formati di file. A tale scopo, utilizzeremo ZOND 265, di Solveig Multimedia, un analizzatore di file video H.264 e H.265, come strumento ausiliario.
Stima dell'efficienza del compressore del progetto Pied Piper
Il codice sorgente e i file di test del compressore sono disponibili su GitHub. Per cominciare, compileremo un compressore e stimeremo i file di test. Successivamente, misureremo l'efficacia rispetto ai file video della vita reale.
Compressione
Linee guida specifiche per la compilazione del compressore Pied Piper sono disponibili solo per Linux. In effetti, è un singolo file: lo script "piedpiper_make". Quindi dobbiamo caricare Linux Ubuntu x64 e inserire tre comandi:
Dopo la compilazione, controlla la cartella corrente per i file di compressione:
- h264dec – il file eseguibile del compressore e del decompressore
- so.0, libopenh264.so – una libreria ausiliaria dinamica e un collegamento ad essa.
La compressione se eseguita dal comando:
./h264dec ./file-sorgente.264 ./file-destinazione.pip,
Decompressione:
./h264dec ./file-compresso.pip ./file-decompresso.264.
File di test del Pifferaio magico
Secondo il repository Git, il team DropBox ha utilizzato questi file come materiale di prova: "black.264", "tibby.264", "walk.264", 'BA1_FT_C.264", "BAMQ2_JVC_C.264". Li carichiamo in Zond 265 e scopriamo che sono stati compressi con lo stesso metodo (vedi screenshot di Zond 265, scheda Bitstream , foto 1 - 3 per il file "tibby.264"). Le proprietà principali dei file sono l'uso di CAVLC (PPS, entropy_coding_mode_flag: 0) e nessun B-frame (SPS,max_num_reorder_frames: 0). Abbiamo scelto i primi tre file per i nostri test di efficienza.
Fig. 1. Blocco SPS (Sequence Parametro Set) per il file "tibby.264
Fig. 2. Blocco di impostazione dei parametri dell'immagine per il file "tibby.264
Fig. 3. Struttura del flusso video per il file "tibby.264
Altri file di prova
Gli utenti possono utilizzare una serie di strumenti per ottenere file video: girare un video con una fotocamera (ad esempio, su un telefono cellulare), scaricarlo da numerosi servizi video (YouTube, VK, Vimeo, Facebook, ecc.) o utilizzare software con funzionalità di ricodifica.
Selezioniamo il file "VID_20150917_131139.264" come un normale videoclip del cellulare. Come gli esempi precedenti, non contiene fotogrammi B, ma utilizza CABAC anziché CAVLC come codificatore aritmetico. Il compressore restituisce un errore per i file YouTube (includono fotogrammi B e utilizzano CABAC), quindi li lasciamo dietro al nostro framework di test.
Scegliendo il software abilitato alla ricodifica, optiamo per l'utilità della console ffmpeg (modulo "libx264"). Facendo un salto in avanti, la compressione è possibile solo con il preset "ultrafast", mentre con il preset "superfast" non si ottengono risultati. I file di prova sono "tractor-ultrafast.264", "tractor-superfast.264".
Risultati del test
I risultati del test sono visualizzati nelle Tabelle 1 e 2. I dati quantitativi per i blocchi PU e TU sono stati raccolti utilizzando il software Zond 265 (schedaStream Stats ). fig. 4 rivela uno screenshot dei dati del file "tibby.264.
Fig. 4. PU e TU bloccano i dati per il file "tibby.264
Tabella 1. Compressore Pifferaio magico . Risultati dei test di efficienza.
Tabella 2. Compressore Pifferaio magico . Risultati dei test di efficienza.
Come implicano le tabelle sopra, la versione attuale dell'algoritmo Pied Piper funziona solo in due scenari: se un file utilizza CAVLC come codificatore o il file è codificato con blocchi PU e TU di dimensione massima. Questi scenari richiedono la massima velocità di codifica da un codec H.264. Apparentemente, tutto ciò si riduce a file piuttosto grandi. Questi sono i file creati dal codec ffmpeg con libx264, preimpostato "ultrafast.
Per ora è tutto. Apprezziamo il tempo impiegato per svolgere questa ricerca con il nostro team. In attesa di una risposta!
Olga Krovyakova is the Technical Support Manager in Solveig Multimedia since 2010.
She is the author of many text and video guidelines of company's products: Video Splitter, HyperCam, WMP Trimmer Plugin, AVI Trimmer+ and TriMP4.
She works with programs every day and therefore knows very well how they work. Сontact Olga via support@solveigmm.com if you have any questions. She will gladly assist you!