¿Cómo traduzco las opciones de HandbrakeCLI a las opciones de FFmpeg?

13

Tengo un montón de configuraciones de línea de comandos que funcionan para el freno de mano, pero a veces en algunos videos (no tengo idea de por qué) el freno de mano lanza "Excepción de falta de memoria". Me preguntaba si puedo encontrar las mismas teclas de opción y hacerlo con FFmpeg, pero parece que no es tan fácil de hacer.

FFmpeg a veces no tiene esas opciones o hace cosas por defecto. Por ejemplo, no sé cómo hacer anamórficos personalizados con FFmpeg. Para mí es muy importante que los videos resultantes sean tan buenos como si estuvieran hechos con freno de mano. Aquí está la línea para freno de mano:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

¿Cómo convierto esto en un comando FFmpeg?

iLemming
fuente

Respuestas:

20

Handbrake utiliza el codificador x264 para la conversión de video. Hay un sitio con una descripción general de todas las opciones x264 y sus contrapartes FFmpeg . Sin embargo, estos están un poco en desuso y algunas de estas opciones ya no funcionan o podrían haber cambiado de nombre. Debería usar los perfiles x264 para la mayoría de las opciones de detalles, pero llegaremos allí.

Muchas de las opciones básicas de freno de mano (por ejemplo, velocidad de fotogramas) no son específicas de x264, y están dispersas en la documentación en línea de FFmpeg .

Antes de comenzar, verifique que use una versión reciente de FFmpeg. Su sitio de descarga tiene compilaciones estáticas para todos los principales sistemas operativos.

Vamonos:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    La sintaxis de FFmpeg es ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Especifique la velocidad de cuadros de video con -r 29.97. (El freno de mano --cfrsolo establece una velocidad de fotogramas constante. No es necesario aquí).

  • --arate 44.1

    Establezca la frecuencia de muestreo de audio con -ar 44100(en Hz).

  • --format mp4

    No es necesario porque FFmpeg sabe que quieres MP4.

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    Esto no hace nada más que configurar el tamaño a 1920 × 1080. En FFmpeg, hacerlo con -s:v 1920x1080, o si desea utilizar los filtros, -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Establezca el codificador con -c:v libx264y la velocidad de bits en constante con -b:v 5200K. Tenga en cuenta que todavía no estamos allí cuando se trata de configuraciones de calidad.

  • --aencoder faac --ab 128 --mixdown stereo

    Similar a lo anterior, con -c:a libfaac -b:a 128K -ac 2. Tenga en cuenta que FAAC ya no es compatible con FFmpeg; en su lugar, use el codificador FFmpeg incorporado con -c:a aac -b:a 128K.

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    Esto establece el modo de codificación en VBV que apunta a un escenario de transmisión en lugar de solo una tasa de bits constante o una calidad constante. La calidad constante también se llama CRF , el valor predeterminado para x264, se llama "Factor de velocidad" en Handbrake. Si bien CRF generalmente le brinda codificaciones de la mejor calidad, el modo VBV le brinda un archivo que es más adecuado para la transmisión en línea o para ciertos dispositivos con capacidades limitadas.

    Para configurar VBV, use las opciones -maxrate 5200Ky -bufsize 5200Ken ffmpeg.

    Para configurar CRF, use -crf 23en ffmpeg.

  • level=42

    Uso -level 42. Este es el nivel H.264 .

  • bframes=2:min-keyint=60:keyint=60:ref=4

    Establezca el número de B-Frames con -bf 2. El intervalo mínimo de fotogramas clave se establece con -keyint_min 60, y el intervalo máximo con -g 60. El número de imágenes de referencia se establece con -refs 4.

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    Estas son opciones que también puede configurar en ffmpeg -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1, como cualquier otra configuración de codificador x264 que no esté directamente asignada a las opciones de ffmpeg.

    Aquí está la versión "TL; DR" si eres flojo, no te importan los detalles o si las cosas no funcionan: úsalo -preset:v medium(o déjalo fuera, ya que el valor predeterminado medio es predeterminado). Los preajustes x264 eligen un conjunto de opciones que intercambian la velocidad de codificación por la eficiencia de compresión. Están convenientemente el nombre de ultrafast, superfast, veryfast, faster, fast, mediuma slow, slowery veryslow. Elija lo que le resulte más cómodo.

Entonces, para resumir, la versión larga:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

O el corto que usaría (con la codificación VBV y algunas opciones de detalles eliminadas):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Cambie a una codificación de calidad constante para una conversión de uso múltiple, use esto y cambie el -crfparámetro de 18 a 28, donde menor significa mejor calidad y 23 es el valor predeterminado:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4
slhck
fuente
Jaja @slhck, justo cuando estaba dando los últimos toques a mi respuesta, tú vas y le das una mejor.
evilsoup