4 votos

¿Cómo puedo hacer que ffmpeg codifique usando calidad constante con aceleración de hardware h264_videotoolbox para Macs?

Información de fondo: Apple proporciona soporte de aceleración de hardware para codificar videos h264 y h265 a través de VideoToolbox. ffmpeg tiene soporte incorporado para VideoToolbox a través del códec h264_videotoolbox.

Problema: Tengo un montón de imágenes .png que quiero convertir en un video mp4 de alta calidad. Usar "-crf 18" funciona bien sin aceleración de hardware, como en lo siguiente:

ffmpeg -pattern_type glob -i '*.png' -framerate 25 -c:v libx264 -crf 18 -preset veryslow out.mp4

Pero esto tarda una eternidad. Puedo forzar una tasa de bits y usar la aceleración de hardware de mi Mac haciendo algo como esto:

ffmpeg -hwaccel videotoolbox -pattern_type glob -i '*.png' -framerate 25 -c:v h264_videotoolbox -b:v 7000k out.mp4

...lo cual codifica a 100fps en lugar de <10fps sin aceleración de hardware. Pero realmente quisiera tener una alta calidad constante, no una tasa de bits constante.

Parece que hay prácticamente ninguna documentación para el códec h264_videotoolbox, y ninguna explicación de qué significan realmente estas opciones:

usuario@maquina$ ffmpeg -h encoder=h264_videotoolbox
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  construido con Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuración: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_5 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags=-fno-stack-check --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Codificador h264_videotoolbox [VideoToolbox H.264 Encoder]:
    Capacidades generales: delay 
    Capacidades de hilos: none
    Formatos de píxeles admitidos: videotoolbox_vld nv12 yuv420p
Opciones de h264_videotoolbox:
  -profile                   E..V..... Perfil (de 0 a 4) (predeterminado 0)
     baseline                     E..V..... Perfil base
     main                         E..V..... Perfil principal
     high                         E..V..... Alto perfil
  -level                     E..V..... Nivel (de 0 a 52) (predeterminado 0)
     1.3                          E..V..... Nivel 1.3, solo disponible con Perfil Base
     3.0                          E..V..... Nivel 3.0
     3.1                          E..V..... Nivel 3.1
     3.2                          E..V..... Nivel 3.2
     4.0                          E..V..... Nivel 4.0
     4.1                          E..V..... Nivel 4.1
     4.2                          E..V..... Nivel 4.2
     5.0                          E..V..... Nivel 5.0
     5.1                          E..V..... Nivel 5.1
     5.2                          E..V..... Nivel 5.2
  -coder                     E..V..... Codificación de entropía (de 0 a 2) (predeterminado 0)
     cavlc                        E..V..... Codificación de entropía CAVLC
     vlc                          E..V..... Codificación de entropía CAVLC
     cabac                        E..V..... Codificación de entropía CABAC
     ac                           E..V..... Codificación de entropía CABAC
  -a53cc                 E..V..... Usar subtítulos cerrados A53 (si están disponibles) (predeterminado true)
  -allow_sw              E..V..... Permitir codificación de software (predeterminado false)
  -require_sw            E..V..... Requerir codificación de software (predeterminado false)
  -realtime              E..V..... Indicar que la codificación debería ocurrir en tiempo real si no es más rápida (por ejemplo, capturando desde la cámara). (predeterminado false)
  -frames_before         E..V..... Otros marcos vendrán antes de los marcos en esta sesión. Esto ayuda a suavizar problemas de concatenación. (predeterminado false)
  -frames_after          E..V..... Otros marcos vendrán después de los marcos en esta sesión. Esto ayuda a suavizar problemas de concatenación. (predeterminado false)

¿Qué es "nivel"? ¿Cómo difieren "perfil base"/"perfil principal"/"alto" y qué es un "perfil"...?

Agradecería ejemplos de cómo usar adecuadamente h264_videotoolbox con ffmpeg y específicamente cómo lograr algo como la opción CRF que existe con el códec h264 predeterminado.

2voto

Kenshin9977 Puntos 11

No sé si la documentación se ha actualizado desde tu publicación, pero aquí está del doc:

Calidad constante con -q:v. Ten en cuenta que la escala va de 1 a 100, siendo 1 el más bajo y 100 el más alto

Además de eso, no tengo idea de si la escala es logarítmica o no y cuál es el valor predeterminado, si es que hay alguno.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X