Contempo: Encodear con FFmpeg: HEVC (H.265)

Encodear con FFmpeg: HEVC (H.265)

En esta tercera parte de encodear con FFmpeg, le toca el turno al nuevo codec de video HEVC.

Ya encodeamos en H.264, también en VP9, y ahora será en HEVC (H.265). Y justo hoy se lanzó FFmpeg 2.6 con algunas optimizaciones en HEVC, el cual ya está casi funcionando bien. Y vale la pena adelantarse.

Instalar FFmpeg


En Ubuntu/elementary OS se agrega un PPA actualizado con FFmpeg, e instalan FFmpeg (otro PPA de respaldo).

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

Configurar CRF y Compresión


Afortunadamente, las configuraciones de HEVC son parecidas a las de H.264, y se puede usar Constant Rate Factor (CRF), y preset para compresión de calidad. Usaremos el encoder x265 para encodear a HEVC.

En HEVC usan un CRF con un rango de medición de calidad entre 0 a 51, siendo 0 lo mejor y 51 lo peor. Por defecto usa 28, el cual no tiene nada que ver con la medición de H.264. Pero recomiendo 23 (que vendría a ser el equivalente de 18 en H.264). Los preset de compresión de calidad son los mismos, por defecto usa medium, pero por las moscas usaremos slow (hay varios disponibles para relentizar o acelerar el encodeo), El profile no está funcionando, así que solo modificar el crf y preset con todo lo demás por defecto:
ffmpeg -i entrada.mkv -c:v libx265 -crf 23 -preset slow -c:a copy salida.mkv

Con HEVC obtienes menos peso, pero también puede relentizar la reproducción dependiendo del equipo usado. Si se hizo un encodeo lento con configuraciones que priorizan la calidad, eso puede afectar la decodificación. Si pasa eso, entonces usa un preset más rápido como faster, veryfast o ultrafast.

Y por último, revisa cuadros de imagen comparando si hay perdida visual cuando uses CRF altos o bajos. Esta vez será HEVC en 8 bits, ya que FFmpeg todavía no habilita el profile main10. Cuando optimicen para 10 bits, lo agregaré acá.