Conversión de video a WebM con ffmpeg / avconv

18

Mientras intentaba optimizar el tamaño de mis videos caseros , convertí algunos de ellos a WebM como prueba, usando Pitivi en Xubuntu. La diferencia de tamaño es significativa. El archivo webm resultante es solo alrededor del 10% del archivo original, mientras que la calidad de la imagen me parece bastante similar.

También intenté hacer la conversión usando avconvpara poder escribirlo, pero el archivo resultante se ve muy mal. Después de mirar la configuración de renderizado en Pitivi, probé algunos parámetros: avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmpero la calidad todavía se ve como basura, por lo que parece que me falta / estoy usando algunos parámetros incorrectos. ¿Alguien sabe cuáles son los parámetros correctos para convertir una película h264 en un webm y obtener la misma calidad que Pitivi?

Estas son las configuraciones en Pitivi: creando el Proyecto Pitivi Renderizado a webm (video html5) configuración de códec

jeroen
fuente

Respuestas:

53

Nota: Esta información se basa en FFmpeg Wiki en la codificación VP9 . Consulte ese artículo para obtener más información: se mantendrá y ampliará continuamente. Para obtener los mejores resultados se debe utilizar la una versión reciente de ffmpegpor descargarlo desde su página web (una acumulación estática será suficiente, ya que contiene el libvps-vp9codificador).

Velocidad de bits variable

La codificación VBR le brinda la calidad general óptima, ya que el codificador puede elegir libremente cuántos bits asignar a un cuadro. Elija este modo a menos que esté preparando videos para transmisión de velocidad de bits constante.

Opción 1: codificación de calidad constante

Por lo general, si no desea apuntar a un tamaño de archivo específico, debe dejar que la tasa de bits varíe libremente, ya que eso conducirá a la mejor calidad. Puede hacerlo estableciendo la tasa de bits en 0 y el factor de tasa constante ( CRF ) en el nivel de calidad objetivo:

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

El valor de CRF puede ser de 0 a 63. Valores más bajos significan mejor calidad. Los valores recomendados oscilan entre 15 y 35, con 31 recomendados para video HD de 1080p. Google tiene una guía con más información al respecto .

Opción 2: codificación de dos pasos con una tasa de bits objetivo

Si desea que su archivo tenga una tasa de bits o tamaño de archivo de destino específico, debe especificar la velocidad y utilizar la codificación de dos pasos (lo que garantizará una distribución de calidad óptima). Aquí estamos eligiendo 5 MBit / s, lo que debería ser suficiente para contenido de 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

Los usuarios de Windows deben usar en NULlugar de /dev/nully a en ^lugar de \.

Velocidad de bits constante

En primer lugar, libvpx ofrece modos de codificación de velocidad de bits constante y variable . Se debe evitar una velocidad de bits constante siempre que sea posible (a menos que apunte a un tamaño de archivo específico o escenario de transmisión), ya que la calidad promedio por tamaño de archivo será peor. Aún así, podría intentar establecer una tasa de bits constante si nada más funciona para usted, por ejemplo, con 1 MBit / s:

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

Mire la salida y aumente o disminuya la velocidad de bits a su gusto (o restricciones de tamaño de archivo). Por ejemplo, puede usar 500Ko 5M, etcétera.

Tiene que especificar -minrate, -maxratey la tasa de bits -b:vpara que el codificador pueda utilizar CBR. Todos tienen que tener el mismo valor; de lo contrario, elegirá una tasa de bits de destino diferente y codificará VBR, pero con mala calidad.

Audio

El códec de audio actual elegido para la codificación VP9 es Opus. FFmpeg elegirá el codificador necesario y sus opciones por defecto. Si desea establecer explícitamente -c:a libopus, también puede hacerlo. Consulte la libopusdocumentación para más opciones.

slhck
fuente
44
Esta es, actualmente, la mejor guía para codificar VP8 en todo Internet. Bien hecho, ¡desearía poder votar más de una vez!
evilsoup
@evilsoup Gracias. Todavía lo estoy ajustando y agregaré una nueva página en el wiki de FFmpeg más adelante.
slhck
¡Esta es realmente una respuesta maravillosa! Ahora entiendo por qué mi video siempre tenía la misma baja calidad, porque en realidad siempre estaba usando el valor predeterminado de 256 kBit / s. ¡Muchas gracias!
jeroen
¿Cuáles fueron las diferencias de tamaño entre el mp4 original y el webm convertido?
switz
1
@Dan acabo de actualizar la guía, noté que estaba un poco desactualizada. Me alegra que lo hayas encontrado útil.
slhck