Perché la codifica VP8 / 9 è così lenta rispetto a H.264?


11

Di recente ho voluto provare i codec Webm VP8 e VP9 ma quando ho corso ffmpegper codificare un file H.264 MP4 in uno degli altri due codec, mi sono reso conto che la codifica è (quasi di un ordine di grandezza) più lenta.

Un video 1080p30 da H.264 a VP9 a 3 MBit / s viene codificato a circa 6-7 fps mentre lo stesso video codifica a circa 40 fps a H.264. Ho usato il libvpx-vp9codec ffmpegper il formato VP9. Sto ottenendo gli stessi risultati anche per VP8 e Theora.

Qualcuno può spiegarmi perché VP9 è molto più lento? Ho provato una macchina diversa che mi ha dato risultati simili usando il freno a mano.


Risposte:


11

libvpx-vp9è un codificatore molto più lento di libx264ma le impostazioni predefinite dei thread in ffmpeg (0 = auto) non sono efficaci per libvpx. Impostandolo manualmente si ottiene un dosso. per esempio

ffmpeg -i in.mp4 -c:v libvpx-vp9 -threads 4 out.mp4

Su una macchina a 4 core, quando codifico uno stream H.264 1080-30p, ottengo un bump da 3.8 fpsa 10 fps.


Si dovrebbe anche menzionare che ci sono diverse velocità predefinite, vale a dire, -presetper libx264e -speedper libvpx-vp9. Vedere ffmpeg -h full. Questi possono fare la differenza, ma influiscono anche sulla qualità o sull'efficienza della compressione.
Slhck,

1
L'ho provato su macchine piuttosto vecchie ma ho usato 4 thread poiché entrambe le macchine sono quad-core. L' -speedopzione non ha fatto una grande differenza per me
comfreak


3

VP9 è un codec più complesso che offre una migliore compressione. Il rapporto compressione / prestazioni video tende ad essere esponenziale. Dovresti aspettarti che la sostituzione del VP9 (AV1) sia ancora più lenta.


1
Quindi, in altre parole, anche se il codec "solo" produce un miglioramento delle dimensioni relativamente piccolo, potrebbe essere molto più lento? I risultati che ho ottenuto sono rappresentativi?
comfreak,

1
VP9 può essere fino al 50% più efficiente in termini di qualità, @comfreak. Non lo definirei così piccolo. Non puoi semplicemente confrontare la dimensione del file risultante.
slhck,

@slhck: Quindi stai dicendo che 3MBit / s possono codificare più informazioni originali di H.264 e quindi una velocità in bit inferiore rispetto al materiale sorgente in H.264 potrebbe essere un'opzione per accelerare le cose?
comfreak,

1
@comfreak L'uso di un bitrate più basso non aumenta automaticamente la velocità del processo di codifica. Sto solo dicendo che esiste un compromesso tra efficienza di compressione e velocità, e molti provider di streaming, ad esempio, preferirebbero investire il tempo della CPU per creare flussi di qualità superiore a un bitrate complessivo inferiore, per risparmiare spazio e larghezza di banda. L'uso di codec più efficienti (come VP9 o HEVC su H.264) aiuta anche a questo proposito.
Slhck,

Ma essenzialmente, se la velocità è il fattore più importante per te, dovresti rimanere con codec più vecchi (ad es. H.264), preset meno efficienti in termini di compressione e forse anche cercare la codifica assistita da GPU, ad esempio con NVENC.
slhck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.