H265 mucho más rápido que MP4 normal

Gracias a @Will_Tschumy (ver enlace más abajo), hay una excelente publicación sobre la configuración de un perfil de calidad constante H265.

Acabo de ejecutar algunas pruebas lado a lado (una a la vez) con los mismos archivos TS de origen.

En general, los trabajos H265 se convirtieron tres veces más rápido que los trabajos MP4 equivalentes. Además, el tamaño de los H265 es casi un 50% menor que los MP4 equivalentes.

Esto demuestra cuánto sé. Habría asumido exactamente lo contrario. Pero ahora, estoy tratando de averiguar si hay alguna razón para NO estandarizarse en H265. Hasta ahora, la reproducción está bien, los subtítulos están bien, etc. Hasta ahora… no hay señales de advertencia…

Publicación del perfil de calidad constante H265

En este momento, esto parece ser un tema de discusión afortunado de encontrar.

BrianGGG

Eso es muy interesante, ¿ambos están utilizando aceleración por hardware?

Para mi ojo inexperto, sí. Ambos estaban usando la codificación por hardware.
He adjuntado los archivos de registro de una conversión idéntica con los dos perfiles por si puedes echarles un vistazo rápido.

log.zip (2.2 MB)

En una nota no relacionada, tener tantas líneas como las siguientes en un archivo de registro DEBUG es realmente un problema para el espacio y la usabilidad. ¿Vale la pena solicitarlo como una nueva CARACTERÍSTICA?

2018-02-14T04:52:34 MCEBuddy.AppWrapper.MencoderCropDetect

Sí, están cerca en cuanto a parámetros de conversión; la única diferencia significativa es que la versión mp4 tenía un filtro extra (hqdn3d) y algunas otras opciones x264 en el perfil que eliminan el ruido del vídeo, y que la tasa de bits final fue de unos 4 Mbps frente a 2,4 para el hevc.

Para una comparación perfecta entre mpeg4 y hevc, en tu perfil H265 cambia hevc_nvenc por h264_nvenc y mantén el resto igual. Ahora pruébalo y obtendrás una comparación perfecta de la velocidad de un hevc frente a un mpeg4 con un codificador nvidia cuda.

Con el cambio que sugeriste arriba, los tiempos para 264 vs 265 fueron casi idénticos.

Si es sencillo, ¿puedes explicar brevemente qué está frenando el perfil MP4 (por ejemplo, por qué los adicionales podrían ser o no necesarios)?

Claro, es el conjunto de opciones que se utilizan para la codificación. El perfil MP4 utiliza una serie de filtros y otras opciones de codificación avanzadas (las he resaltado a continuación)

ffmpeg-video=-ss 3 -vf yadif=0:-1:1,hqdn3d -vcodec libx264 -b 1400k -x264opts me=hex:trellis=1:subq=8:partitions=all:8x8dct=1:ref=3:rc-lookahead=50:keyint=25:min-keyint=20:bframes=1:weightb=1:level=4.0:b-pyramid=normal:direct=auto:mixed-refs=1:deblock=-1,-1:no-fast-pskip=1:no-dct-decimate=1:b-adapt=0:threads=auto -map 0:v -sn

Están diseñadas para ofrecer la mejor calidad posible y un archivo razonablemente pequeño (determinado por la tasa de bits de 1.4 Mbps). Por eso es más lento en la codificación, pero deberías obtener una imagen de mejor calidad que con un cuantificador constante directo. Puedes buscar las opciones en Google o ver la página de ffmpeg para obtener más detalles (lo mismo aplica para otros codificadores como handbrake y mencoder).

La codificación siempre se trata de un equilibrio entre velocidad, tamaño y calidad, y hay muchas maneras de controlar esos equilibrios entre la tasa de bits, los filtros y los parámetros de codificación. Cuanto más grande el archivo (mayor tasa de bits), mejor la calidad; cuanto más rápida la codificación, menor la calidad (generalmente) — ya entiendes la idea.

Prueba esto, ejecuta el perfil MP4 Normal con codificación por hardware y luego ejecuta el perfil MP4 Fast con codificación por hardware y observa la diferencia. El Fast debería ser más rápido porque tiene menos filtros y ajustes de control de calidad.

Dicho eso, si tu codificador tarda lo mismo en codificar h265 y h264, todo lo demás siendo igual, eso es increíble porque h265 generalmente produce una imagen de mucha mejor calidad para una tasa de bits/tamaño dado. Así que sigue siendo el claro ganador.

Otro elemento que podría estar relacionado con esto.

Hoy noté que:

  • Cuando uso el perfil MP4, mi GPU nunca supera el 20% durante la codificación con FFMPEG.
  • Cuando uso el perfil H265, mi GPU llega al 60% y a veces al 70% con FFMPEG.

¿Podría haber algo relacionado con el threading en H265 que no ocurra en MP4?
Lo intenté y no logré determinarlo por mí mismo, así que publico los dos perfiles a continuación. ¿Hay algo en los dos perfiles siguientes que pueda estar causando este comportamiento?

gracias
BrianGGG

[MKV HVEC Constant Quality]
Description=ADVERTENCIA: Codificación de calidad constante (25) con Nvidia HVEC.
order=ffmpeg, handbrake
AllowH264CopyRemuxing=true
FixedResolution=true
AutoDeinterlace=true
ffmpeg-UsingHardwareEncoding=True
ffmpeg-general=-threads 0 -hwaccel auto
ffmpeg-video=-ss 3 -c:v hevc_nvenc -cq 23 -rc vbr -map 0:v
ffmpeg-audio=-acodec ac3 -ab 192k -map 0:a
ffmpeg-audioac3=-acodec ac3 -ab 384k -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-general=–decomb --denoise=“weak” --loose-anamorphic --verbose=2 -T -O
handbrake-video=–start-at duration:3 -e x265 -q 18
handbrake-audio=-E ffac3 -R auto -B 192 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E ffac3 -R auto -B 384 -D 0 -a 1,2,3,4,5
handbrake-ext=.mkv
handbrake-audiodelay=skip
PreConversionCommercialRemover=true

[MP4 Normal]
Description=Perfil principal, buena calidad en 1 paso MP4 (H.264/AAC). Bueno para la mayoría de las conversiones, produce buenos resultados y es más rápido que la conversión de dos pasos.
order=ffmpeg,mencoder,handbrake
mencoder-general=-ss 3 -vf pullup,softskip,yadif=0:-1,hqdn3d,harddup
mencoder-video=-ovc x264 -x264encopts bitrate=1400:me=hex:trellis=1:subq=8:partitions=all:8x8dct:ref=3:rc_lookahead=50:keyint=25:keyint_min=20:bframes=1:weight_b:level_idc=40:b_pyramid=normal:direct_pred=auto:mixed_refs:deblock=-1,-1:nofast_pskip:nodct_decimate:b_adapt=0:threads=auto
mencoder-audio=-oac faac -faacopts br=160:mpeg=4:tns:object=2
mencoder-audioac3=-oac faac -faacopts br=256:mpeg=4:tns:object=2
mencoder-ext=.avi
mencoder-remuxto=.mp4
mencoder-audiodelay=skip
ffmpeg-general=-threads 0
ffmpeg-video=-ss 3 -vf yadif=0:-1:1,hqdn3d -vcodec libx264 -b 1400k -x264opts me=hex:trellis=1:subq=8:partitions=all:8x8dct=1:ref=3:rc-lookahead=50:keyint=25:min-keyint=20:bframes=1:weightb=1:level=4.0:b-pyramid=normal:direct=auto:mixed-refs=1:deblock=-1,-1:no-fast-pskip=1:no-dct-decimate=1:b-adapt=0:threads=auto -map 0:v -sn
ffmpeg-audio=-acodec libfdk_aac -ab 160k -cutoff 18000 -map 0:a
ffmpeg-audioac3=-acodec libfdk_aac -ab 256k -cutoff 18000 -map 0:a
ffmpeg-ext=.mp4
ffmpeg-audiodelay=skip
handbrake-general=–decomb --loose-anamorphic --verbose=2 -f mp4 -O
handbrake-video=–start-at duration:3 -e x264 -b 1400 -x me=hex:trellis=1:subq=8:partitions=all:8x8dct:ref=3:rc-lookahead=50:keyint=25:keyint-min=20:bframes=1:weight-b:level-idc=40:b-pyramid=normal:direct-pred=auto:mixed-refs:deblock=-1,-1:nofast-pskip:nodct-decimate:b-adapt=0:threads=auto
handbrake-audio=-E faac -R auto -B 160 -D 0 -a 1,2,3,4,5
handbrake-audioac3=-E faac -R auto -B 256 -D 0 -a 1,2,3,4,5
handbrake-ext=.mp4
handbrake-audiodelay=skip
PreConversionCommercialRemover=true

Puede haber muchas razones, por ejemplo, algunos de los filtros utilizados en el perfil MP4 para reducción de ruido y otros parámetros avanzados pueden no ser compatibles con la GPU y, por lo tanto, ejecutarse en la CPU. Los modos de codificación (tasa de bits constante vs cuantificador constante) tienen diferentes capacidades según la GPU, algunas son más eficientes.

¿Podrías hacer una prueba para nosotros con diferentes modos en tu perfil MKV (por ejemplo, en lugar de -cq 23 usa -b:v 1400) y decirnos cómo se comporta la GPU?

¿Cómo se comporta tu GPU si ejecutas tu perfil MKV y cambias hevc_nvenc a h264_nvenc? Esa sería una buena comparación de las capacidades de codificación h264 de la tarjeta frente a hevc.

Primera prueba realizada. El comportamiento de H264 es similar al de H265. No hay problema para superar el 20% de GPU con este perfil.
Ajustaré el H265 como se indica arriba para la próxima prueba en breve.

He buscado y no logro encontrar una respuesta definitiva a esta pregunta, así que pensé en publicarla aquí ya que estamos hablando de codificación por hardware en h265.
¿Qué GPU debería comprar si quiero hacer esto?
He leído en muchos lugares que la codificación por hardware (mediante NVIDIA) produce vídeo de baja calidad; ¿sigue siendo así? Muchos de los posts que leí son bastante antiguos.
Además, como estoy ejecutando un servidor Plex, me encantaría que la GPU que elija también pudiera hacer transcodificación por hardware…

Gracias de antemano por cualquier ayuda.

  • Cguy

mencionando a @Will_Tschumy @NYPLAYER @BrianGGG

Eso es una tontería: he usado tarjetas tanto de AMD como de NVIDIA. La única diferencia que he visto es la velocidad: las tarjetas NVIDIA son más rápidas para la misma calidad (tanto en configuración como en percepción). La 1060 tiene una excelente relación calidad-precio y consumo. No creo que te equivoques con cualquiera de las dos opciones, pero he tenido mejores resultados con NVIDIA. ¡Suerte!

via Newton Mail

Muchas gracias, Will. Eso debería ahorrarme muchos dolores de cabeza.