Scopo

Questa sezione fornisce suggerimenti per le impostazioni di codifica VP9 quando si esegue la codifica basata su file (ovvero non in tempo reale).

Questi consigli sono stati concepiti per i seguenti obiettivi:

  • Un equilibrio tra qualità e velocità di codifica
  • La velocità in bit minima per ottenere una qualità ragionevole
  • Impostazioni per soddisfare un'ampia gamma di tipi di contenuti

Questi consigli non:

  • Codifica live live
  • Ottimizzati per tipi di contenuti specifici (ad esempio filmati sportivi di grandi dimensioni)
  • Configurare impostazioni per dispositivi o requisiti di rete specifici

Codifica a risoluzione singola

VP9 supporta un'ampia gamma di dimensioni di fotogrammi, dalle piccole risoluzioni alla risoluzione 4K. I frame di dimensioni più grandi offrono una qualità migliore, ma richiedono più larghezza di banda per la pubblicazione e maggiore potenza di elaborazione per la decodifica.

Se stai creando un'unica risoluzione, 640 x 480 è una scelta sicura per un'ampia gamma di dispositivi web e mobili. I seguenti parametri a riga di comando FFmpeg consentono di creare un file a risoluzione singola a 750 kbps.

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Codifica multirisoluzione

Se prevedi di scegliere come target più risoluzioni o se la tua rete di distribuzione ha una larghezza di banda variabile, ti consigliamo di creare più risoluzioni. A questo punto, il tuo player può decidere quale risoluzione viene inviata allo spettatore.

Le codifiche video a più risoluzioni vengono spesso utilizzate nella velocità in bit adattiva, in cui il video player passa da una risoluzione all'altra in tempo reale in base alla larghezza di banda dell'utente. Ad esempio, Shaka Player ti consente di riprodurre codificazioni multirisoluzione, dove ogni codifica VP9 si trova in un file separato e il manifest DASH fornisce informazioni su ogni codice.

Per ulteriori informazioni sulla creazione di pacchetti video in formati adattivi, consulta la sezione Shaka Packager. Questa guida si concentra sulle impostazioni di codifica per VP9 in più risoluzioni.

Tutte le impostazioni seguenti possono essere utilizzate per singoli file a varie risoluzioni, combinati offrono un set completo adatto per lo streaming adattivo. Tieni presente che la versione 640 x 480 ha due versioni, una di bassa qualità (LQ) e l'altra di media qualità (MQ).

Velocità in bit

Si consiglia di utilizzare la modalità Qualità costante (CQ) durante la codifica dei file VP9 per la visualizzazione on demand. Questa modalità di codifica ti consente di specificare una velocità in bit target media, controllando sia la qualità massima del video sia la velocità in bit minima e massima.

I seguenti velocità in bit sono consigliati come basi per la distribuzione su Web e dispositivi mobili. Questi suggerimenti minimizzano la velocità in bit che raggiunge la qualità video adatta per la distribuzione sul Web mobile e sui dispositivi mobili; considerali come un consiglio per velocità in bit bassa e bassa, che può comunque raggiungere una qualità ragionevole.

Per gli esempi sopra riportati, si consiglia di impostare una velocità in bit minima al 50% di una velocità in bit target massima del 145%.

Dimensioni frame/frequenza fotogrammi Velocità in bit target (VOD, kbps) Velocità in bit min (50%) Velocità in bit massima (145%)
320 x 240p a 24,25,30 150 75 218
640 x 360p a 24,25,30 276 138 400
640x480p @ 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280 x 720p a 24,25,30 1024 512 1485
1280 x 720p a 50,60 1800 900 2610
1920 x 1080p a 24,25,30 1800 900 2610
1920 x 1080p a 50,60 3000 1500 4350
2560 x 1440p a 24,25,30 6000 3000 8700
2560 x 1440p a 50,60 9000 4500 13050
3840x2160p @ 24,25,30 12000 6000 17400
3840 x 2160p a 50,60 18000 9000 26100

Figura 2a: velocità in bit VOD consigliate

In FFmpeg, la velocità in bit è controllata tramite i seguenti comandi:

FFmpeg
-b:v <arg> Imposta la velocità in bit (ad es.500. 000)
-minrate <arg>
-maxrate <arg>
Imposta la velocità in bit minima e massima.

Ad esempio, per codificare contenuti 640 x 480, puoi utilizzare la riga di comando -b:v 750k -minrate 375 -maxrate 1088.

Qualità

In modalità CQ, imposterai anche il livello qualitativo massimo. Per la codifica VP9 basata su file sono consigliati i seguenti livelli qualitativi:

Altezza frame Qualità target (CQ)
240 37
360 36
480 34 (LQ) o 33 (MQ)
720 32
1080 31
1440 24
2160 15

In FFmpeg, la qualità è impostata con il comando -crf. Ad esempio, per impostare la qualità su 33, devi utilizzare il comando -crf 33

Codifica multipass e velocità di codifica

La codifica basata su file offre flessibilità in termini di velocità. Puoi anche eseguire più pass per lo stesso materiale per aumentare la qualità e scegliere la velocità per ciascuno.

Quando codifichi i file VP9 in FFmpeg, è consigliabile impostare il parametro -quality su good e poi la velocità del primo e del secondo pass in base alla tabella riportata di seguito con il parametro -speed. Offre un buon equilibrio tra il tempo di codifica e la qualità dell'output.

Altezza frame Velocità (primo pass) Velocità (secondo pass)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Ad esempio, una stringa di codifica primo pass in FFmpeg potrebbe includere -quality good -speed 4.

Spaziatura dei fotogrammi chiave

Consigliamo di consentire fino a 240 fotogrammi di video tra un fotogramma chiave e un altro (8 secondi per i contenuti di 30 f/s). I fotogrammi chiave sono fotogrammi video autosufficienti; non si affidano ad altri frame da visualizzare, ma tendono a essere più grandi di altri tipi di frame. Per la riproduzione web e per dispositivi mobili, la generosa spaziatura tra i fotogrammi chiave consente al codificatore di scegliere il posizionamento migliore dei fotogrammi chiave per massimizzare la qualità.

Nella spaziatura dei fotogrammi chiave FFmpeg viene controllato il comando -g, che indica il numero di frame. Per 240 frame sarebbe -g 240.

Consigli su piastrelle e thread

Il riquadro divide il frame video in più colonne, riducendo leggermente la qualità, ma velocizza le prestazioni di codifica. I riquadri devono avere una larghezza di almeno 256 pixel, quindi esiste un limite al numero di riquadri che possono essere utilizzati.

A seconda del numero di riquadri e della risoluzione del frame di output, potrebbero essere utili più thread della CPU. In linea generale, quando la dimensione del frame di output è molto ridotta, il valore è limitato a più thread.

Le seguenti impostazioni sono consigliate per l'aggiunta di piastrelle e thread a diverse risoluzioni.

Dimensioni frame Numero di colonne-colonne Numero di thread
320x240 1 (-tile-columns 0) 2
640 x 360 2 (-tile-columns 1) 4
640x480 2 (-tile-columns 1) 4
1280x720 4 (-tile-columns 2) 8
1920x1080 4 (-tile-columns 2) 8
2560 x 1440 8 (-tile-columns 3) 16
3840x2160 8 (-tile-columns 3) 16

In FFmpeg, il numero di riquadri è controllato con il parametro -tile-columns e il numero di thread di -threads. Ad esempio, un codificatore 640x480 utilizzerebbe la riga di comando -tile-columns 2 -threads 4.

Righe di comando FFmpeg

Riunendo i consigli precedenti, è possibile utilizzare i seguenti comandi FFmpeg per codificare i contenuti VP9.

Tieni presente che i comandi di primo e secondo passaggio sono concatenati. L'argomento -y nel comando di secondo passaggio risponde"Yes"quando FFmpeg chiede di sovrascrivere il file delle statistiche del primo pass con il video di output.

Tieni presente inoltre che un'origine a 1080p viene utilizzata per codificare i tag fino a 1280 x 720. Un'origine 4K viene utilizzata per output più grandi.

320 x 240 (24, 25 o 30 fotogrammi al secondo)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640 x 360 (24, 25 o 30 fotogrammi al secondo)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640 x 480 (bassa qualità, 24, 25 o 30 frame al secondo)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

640 x 480 (qualità media, 24, 25 o 30 fotogrammi al secondo)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

1280 x 720 (24, 25 o 30 fotogrammi al secondo)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

1280 x 720 (50 o 60 frame al secondo)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

1920 x 1080 (24, 25 o 30 fotogrammi al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm

1920 x 1080 (50 o 60 fotogrammi al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm

2560 x 1440 (24, 25 o 30 frame al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm

2560 x 1440 (50 o 60 fotogrammi al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

3840 x 2160 (24, 25 o 30 frame al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm

3840 x 2160 (50 o 60 frame al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm