Finalità

Questa sezione fornisce consigli per le impostazioni di codifica VP9 quando si esegue la codifica basata su file (ovvero non live).

Questi consigli sono pensati per i seguenti obiettivi:

  • Un equilibrio tra qualità e velocità di codifica
  • Il bit rate minimo per ottenere una qualità ragionevole
  • Impostazioni per adattarsi a un'ampia gamma di tipi di contenuti

Questi consigli non:

  • Codifica live dell'indirizzo
  • Ottimizzare per tipi di contenuti specifici (ad es. filmati sportivi con movimenti rapidi)
  • Configurare le impostazioni per requisiti specifici di dispositivo o rete

Codifica a risoluzione singola

VP9 supporta una gamma di dimensioni dei frame, dalle risoluzioni più piccole fino a 4K. Le dimensioni dei frame più grandi offrono una qualità superiore, ma richiedono una larghezza di banda maggiore per la distribuzione e una potenza di elaborazione maggiore per la decodifica.

Se crei una singola risoluzione, 640 x 480 è una scelta sicura per un'ampia gamma di dispositivi web e mobili. I seguenti parametri della riga di comando FFmpeg ti 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. Il player può quindi controllare la risoluzione inviata allo spettatore.

Le codifiche video multirisoluzione vengono spesso utilizzate nello streaming con bitrate adattivo, 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 codifiche multirisoluzione, in cui ogni codifica VP9 si trova in un file separato e un manifest DASH fornisce informazioni su ogni codifica.

Per maggiori informazioni sul packaging dei video nei formati di streaming adattivo, consulta Shaka Packager. Questa guida si concentrerà sulle impostazioni di codifica per VP9 in più risoluzioni.

Tutte le impostazioni riportate di seguito possono essere utilizzate per singoli file a varie risoluzioni. Insieme, forniscono un set completo adatto allo streaming adattivo. Tieni presente che la versione 640x480 ha due versioni, una di bassa qualità (LQ) e l'altra di media qualità (MQ).

Velocità in bit

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

Le seguenti velocità in bit sono suggerite come valori di base per la distribuzione sul web e sui dispositivi mobili. Questi suggerimenti riducono al minimo il bitrate, ottenendo una qualità video adatta alla distribuzione web e mobile per i consumatori. Considerali come un consiglio per un bitrate "basso" che può comunque raggiungere una qualità ragionevole.

Per gli esempi precedenti, è consigliabile impostare la velocità in bit minima al 50% della velocità in bit target e la velocità in bit massima al 145% del target.

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

Figura 2a: velocità in bit VOD consigliate

In FFmpeg, il bit rate viene controllato con i seguenti comandi:

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

Ad esempio, quando codifichi contenuti 640x480, puoi utilizzare la riga di comando -b:v 750k -minrate 375 -maxrate 1088.

Qualità

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

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à viene impostata con il comando -crf. Ad esempio, per impostare la qualità su 33, utilizza il comando -crf 33.

Codifica multipass e velocità di codifica

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

Quando codifichi file VP9 in FFmpeg, ti consigliamo di impostare il parametro -quality su good e poi impostare la velocità della prima e della seconda passata in base alla tabella riportata di seguito con il parametro -speed. In questo modo si ottiene un buon equilibrio tra il tempo di codifica e la qualità dell'output.

Altezza frame Velocità (primo passaggio) Velocità (secondo passaggio)
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 al primo passaggio in FFmpeg potrebbe includere -quality good -speed 4.

Spaziatura dei fotogrammi chiave

Si consiglia di consentire fino a 240 fotogrammi di video tra i fotogrammi chiave (8 secondi per i contenuti a 30 fps). I keyframe sono fotogrammi video autosufficienti, ovvero non si basano su altri fotogrammi per il rendering, ma tendono a essere più grandi rispetto ad altri tipi di fotogrammi. Per la riproduzione web e mobile, una spaziatura generosa tra i fotogrammi chiave consente all'encoder di scegliere il posizionamento migliore dei fotogrammi chiave per massimizzare la qualità.

La spaziatura dei fotogrammi chiave in FFmpeg è controllata dal comando -g, che indica il numero di frame. Per 240 fotogrammi, il valore è -g 240.

Suggerimenti per la suddivisione in riquadri e la creazione di thread

Il tiling divide il frame video in più colonne, il che riduce leggermente la qualità ma velocizza le prestazioni di codifica. I riquadri devono essere larghi 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 generale, i thread multipli hanno un valore limitato quando le dimensioni del frame di output sono molto piccole.

Le seguenti impostazioni sono consigliate per la suddivisione in riquadri e la suddivisione in thread a varie risoluzioni.

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

In FFmpeg, il numero di riquadri è controllato dal parametro -tile-columns e il numero di thread da -threads. Ad esempio, una codifica 640x480 utilizzerebbe la riga di comando -tile-columns 1 -threads 2.

Righe di comando FFmpeg

Combinando i suggerimenti precedenti, i seguenti comandi FFmpeg possono essere utilizzati per codificare i contenuti VP9.

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

Tieni inoltre presente che per le codifiche destinate a un output fino a 1280 x 720 viene utilizzata una sorgente a 1080p. Per un output più grande viene utilizzata una sorgente 4K.

320x240 (24, 25 o 30 frame 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 1 \
  -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 1 \
  -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 frame 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 2 \
  -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 2 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x360.webm

640x480 (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 2 \
  -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 2 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x480-low.webm

640x480 (qualità media, 24, 25 o 30 frame 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 2 \
  -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 2 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -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 4 \
  -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 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 4 \
  -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 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2-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 4 \
  -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 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 4 \
  -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 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm

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

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
  -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 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm

2560 x 1440 (50 o 60 frame al secondo)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
  -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 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm

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

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
  -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 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -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 8 \
  -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 8 \
  -quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm