Conversione di video in WebM con ffmpeg / avconv


18

Durante il tentativo di ottimizzare le dimensioni dei miei video domestici, ne ho convertiti alcuni in WebM come test, utilizzando Pitivi su Xubuntu. La differenza dimensionale è significativa. Il file webm risultante è solo circa il 10% del file originale, mentre per me la qualità dell'immagine è praticamente la stessa.

Ho anche provato a fare la conversione usando in avconvmodo da poterlo script, ma il file risultante sembra davvero scadente. Dopo aver esaminato le impostazioni di rendering in Pitivi ho provato alcuni parametri:, avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmma la qualità sembra ancora una schifezza, quindi sembra che mi manchi / usando alcuni parametri sbagliati. Qualcuno sa quali sono i parametri corretti da utilizzare per convertire un film h264 in un webm e ottenere la stessa qualità di Pitivi?

Queste sono le impostazioni in Pitivi: creando il Progetto Pitivi Rendering su webm (video html5) configurazione codec

Risposte:


53

Nota: queste informazioni sono basate sul Wiki FFmpeg sulla codifica VP9 . Si prega di fare riferimento a tale articolo per ulteriori informazioni: verrà continuamente mantenuto ed esteso. Per ottenere i migliori risultati è necessario utilizzare la una versione recente di ffmpegda scaricandolo dal loro sito web (un accumulo di elettricità statica sarà sufficiente, ma contiene il libvps-vp9codificatore).

Bit rate variabile

La codifica VBR offre la qualità complessiva ottimale, poiché l'encoder può scegliere liberamente quanti bit assegnare a un frame. Scegli questa modalità a meno che tu non stia preparando video per lo streaming a bitrate costante.

Opzione 1: codifica di qualità costante

In genere, se non si desidera targetizzare una specifica dimensione del file, è necessario lasciare che il bitrate vari liberamente, poiché ciò porterà alla massima qualità. Puoi farlo impostando il bitrate su 0 e il fattore di tasso costante ( CRF ) sul livello di qualità target:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

Il valore CRF può essere compreso tra 0 e 63. Valori più bassi significano una migliore qualità. I valori consigliati vanno da 15 a 35, mentre 31 sono consigliati per video HD 1080p. Google ha una guida con maggiori informazioni a riguardo .

Opzione 2: codifica a due passaggi con un bitrate target

Se si desidera che il proprio file abbia un bitrate o una dimensione del file di destinazione specifici, è necessario specificare la velocità e utilizzare la codifica a due passaggi (che garantirà una distribuzione di qualità ottimale). Qui stiamo scegliendo 5 MBit / s, che dovrebbero essere sufficienti per i contenuti 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Gli utenti Windows devono utilizzare NULinvece di /dev/nulle un ^invece di \.

Bit rate costante

Prima di tutto, libvpx offre modalità di codifica bitrate costante e bitrate variabile . Il bitrate costante dovrebbe essere evitato quando possibile (a meno che non si scelga una dimensione del file specifica o uno scenario di streaming), poiché la qualità media per dimensione del file sarà peggiore. Tuttavia, potresti provare a impostare un bitrate costante se nient'altro funziona per te, ad esempio con 1 MBit / s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Guarda l'output e aumenta o diminuisci la velocità in bit a tuo piacimento (o vincoli sulla dimensione del file). Ad esempio, è possibile utilizzare 500Ko 5M, eccetera.

È necessario specificare -minrate, -maxratee il bitrate -b:vin modo che il codificatore di utilizzare CBR. Devono tutti avere lo stesso valore, altrimenti sceglierà invece un bitrate target diverso e eseguirà la codifica VBR, ma con una cattiva qualità.

Audio

L'attuale codec audio scelto per la codifica VP9 è Opus. FFmpeg sceglierà il codificatore necessario e le sue opzioni di default. Se vuoi impostare esplicitamente -c:a libopus, puoi farlo anche tu. Fare riferimento alla libopusdocumentazione per ulteriori opzioni.


4
Questa è attualmente la migliore guida per la codifica di VP8 su Internet. Ben fatto, vorrei poter votare più di una volta!
evilsoup,

@evilsoup Grazie. Lo sto ancora modificando e aggiungerò una nuova pagina sul wiki di FFmpeg in seguito.
slhck,

Questa è davvero una risposta meravigliosa! Ora capisco perché il mio video era sempre della stessa bassa qualità, perché in realtà utilizzavo sempre il valore predefinito di 256 kBit / s. Grazie mille!
gennaio

Quali erano i differenziali di dimensione tra il mp4 originale e il webm convertito?
switz,

1
@Dan Ho appena aggiornato la guida - ho notato che era un po 'datato. Mi fa piacere che l'abbia trovato utile.
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.