Codifica di base

Nozioni di base sulla compressione video

Questa sezione illustra le opzioni di base per la codifica VP9, incluse le dimensioni del frame, il controllo di velocità in bit di base e la qualità.

Se non hai mai utilizzato la compressione video, puoi guardare questo video per scoprire di più sulla necessità della compressione video e su come funziona.

Un semplice codice

Il seguente comando FFmpeg converte un file di input in un video VP9 con audio Opus. Questa è la codifica più semplice possibile che utilizza le impostazioni predefinite.

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

Questo codice di codifica FFmpeg utilizza i seguenti parametri della riga di comando:

FFmpeg
-i <filename> Specifica il nome del file di input
-c:v libvpx-vp9 Chiede a FFmpeg di creare un video VP9
-c:a libopus Indica a FFmpeg di creare audio Opus
output.webm Specifica il nome del file di output

FFmpeg deduce il tipo di file da creare dal nome del file di output utilizzato. In questo esempio, FFmpeg genererà un file WebM perché abbiamo richiesto output.webm.

Risoluzione

Ogni video ha una dimensione del frame (che indica la larghezza e l'altezza in pixel). Il seguente parametro a riga di comando FFmpeg può essere utilizzato per controllare le dimensioni del frame video di output per la codifica VP9:

FFmpeg
-vf scale=<width>x<height> Larghezza e altezza frame

Ad esempio, il seguente comando FFmpeg genererà un video WebM 640x480 VP9.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Le risoluzioni più piccole sono di qualità inferiore, ma quelle più grandi richiedono più larghezza di banda, maggiore potenza di elaborazione per la decodifica e potrebbero non essere supportate sui dispositivi meno recenti. Per VP9, 640x480 è considerato una risoluzione sicura per una vasta gamma di dispositivi mobili e Web.

Velocità in bit (velocità in bit)

VP9 supporta diverse modalità di velocità in bit:

modalità
Quantificatore costante (Q) Consente di specificare un valore di quantificatore fisso; la velocità in bit varia
Qualità vincolata (CQ) Consente di impostare un livello qualitativo massimo. La qualità può variare all'interno dei parametri di velocità in bit
Velocità in bit variabile Consente di bilanciare qualità e velocità in bit nel tempo all'interno dei vincoli in termini di velocità in bit
Velocità in bit costante (CBR) Cerca di mantenere una velocità in bit abbastanza costante mentre la qualità varia

Questa modalità è consigliata per i video basati su file (anziché per il live streaming). Per la modalità CQ vengono utilizzati i seguenti parametri della riga di comando FFmpeg:

FFmpeg
-b:v <arg> Imposta la velocità in bit target (ad es.500. 000)
-minrate <arg>
-maxrate <arg>
Imposta la velocità in bit minima e massima.
-crf <arg> Imposta il livello qualitativo massimo. I valori validi sono 0-63, mentre i numeri più bassi sono di qualità superiore.

Ad esempio, il seguente comando FFmpeg creerà un file video 640x480 di media qualità in modalità CQ, con una velocità in bit media di 750 kbps e una qualità massima vincolata a 33.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

La velocità in bit varia a seconda della qualità che vuoi raggiungere e della risoluzione del video. Puoi trovare un set completo di velocità in bit a varie risoluzioni qui.

Impostazioni qualità e velocità

La compressione di video è un equilibrio tra la qualità dell'output e la quantità di tempo necessaria per crearlo. In linea generale, è sempre possibile ottenere una qualità migliore concedendo più tempo per la codifica, ma il tempo necessario per ottenere la massima qualità possibile potrebbe non essere pratico.

VP9 offre diverse impostazioni per bilanciare qualità e velocità:

  • L'impostazione della qualità indica al codificatore l'approccio necessario per comprimere il video. Le modalità disponibili sono quelle migliori, quelle più efficaci e quelle in tempo reale.

  • Le impostazioni di raggruppamento dei messaggi in thread consentono al codificatore di utilizzare più thread di CPU per codificare il video. Queste impostazioni potrebbero ridurre leggermente la qualità, ma possono migliorare notevolmente la velocità di codifica e decodifica.

Questi due tipi di impostazioni sono controllati da diversi parametri della riga di comando:

FFmpeg
-threads Indica il numero di thread da utilizzare durante la codifica.
-quality Può essere impostato su good, best o realtime
-speed Questo parametro ha significati diversi a seconda che la qualità sia impostata su good o realtime. Le impostazioni di velocità 0-4 si applicano per la Vod in good e best, con 0 la più alta qualità e 4 la più bassa. Realtime valori validi sono 5-8; numeri più bassi significano qualità più elevata
-tile-columns Il tiling suddivide il video in aree rettangolari, il che consente il multi-thread per codifica e decodifica. Il numero di riquadri è sempre una potenza di due. 0=1 riquadro, 1=2, 2=4, 3=8, 4=16, 5=32.

Il seguente comando FFmpeg creerà un file 640 x 480 con qualità impostata su 'good' e velocità impostata su 0 (alta qualità):

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

Le impostazioni per la qualità e la velocità potrebbero variare in base alla risoluzione e alla potenza di elaborazione disponibile. Nella sezione successiva è disponibile una serie completa di consigli.