Contempo: Encodear con FFmpeg: VP9 + Opus (WebM)

Encodear con FFmpeg: VP9 + Opus (WebM)

En esta serie de Encodear con FFmpeg, le toca el turno a VP9 y Opus.

VP9 es usado masivamente en Youtube, además la próxima generación de UHDTV traerá soporte integrado de VP9. Según Google, VP9  brinda mejor calidad a bajo bitrate que H.264. Y Opus es el mejor codec de audio con perdida que existe.

Antes que nada, VP9 pide un poco más de procesamiento para reproducir que H.264, así que podría haber desincronización dependiendo del tipo de encodeo o maquina usada. Además que el encodeo toma más tiempo. Todo esto lo puedes hacer en elementary OSUbuntu, y OS X.

Instalar VP9 y Opus junto con FFmpeg


En Ubuntu/elementary OS agregan un PPA con FFmpeg actualizado e instala FFmpeg.

En OS X instalan FFmpeg usando Homebrew. Y para agregar los encoders que faltan:
brew reinstall ffmpeg --with-faac --with-libvpx --with-x265 --with-opus

Configurar CRF, Compresión, y Audio


Calidad constante

Por suerte VP9 utiliza calidad constante al encodear, con la opción -crf. CRF tiene un rango de calidad entre 0 a 63, siendo 0 lo mejor y 63 lo peor, 10 o 15 es recomendable. Pero también tienes que poner un bitrate máximo/tope variable, con la opción -b:v pondremos un bitrate tope de 5M (5000 kbps). Y usaremos el encoder libvpx-vp9:
ffmpeg -i entrada.mkv -c:v libvpx-vp9 -crf 10 -b:v 5M -c:a copy salida.webm

Mayor calidad

Para mayor calidad usen las opciones -qmin -qmax. En -qmin tienen un rango de 0 a 63, de 0 a 4 es recomendable. En -qmax lo mismo, pero un 50 o más bajo es recomendable:
ffmpeg -i entrada.mkv -c:v libvpx-vp9 -qmin 0 -qmax 50 -crf 10 -b:v 5M -c:a copy salida.webm

Compresión

Para compresión está la opción -deadline, el cual usa los rangos best, good, y realtime, siendo best lo más lento (más comprimido) y realtime lo más rápido (menos comprimido). Por defecto usa good y es recomendable, pero si quisieran cambiar:
ffmpeg -i entrada.mkv -c:v libvpx-vp9 -crf 10 -b:v 5M -deadline realtime -c:a copy salida.webm

Audio

Puedes utilizar cualquier audio, pero usaremos Opus porque es lo usa WebM, con un bitrate variable máximo de 320k. Y finalmente todo quedaría así:
ffmpeg -i entrada.mkv -c:v libvpx-vp9 -qmin 0 -qmax 50 -crf 10 -b:v 5M -c:a libopus -vbr on -b:a 320k salida.webm

Echa un ojo a las demás opciones de libvpx en FFmpeg. Últimamente el decoder para hardware de VP9 soporta 4K (2160p a 60fps). VP9 ahora cuenta con el soporte de varios fabricantes de hardware como Intel, ARM, Nvidia, Broadcom, LG, Philips, Samsung, Realtek, etc. Y YouTube transmite en 4K con VP9, al igual que todos sus demás videos. Chrome, Firefox y Android ya vienen con el decoder VP9. Para reproducir VP9 usen mpv.