El perfil HEVC MP4 produce archivos mucho más grandes que antes

Hola a todos,

Hace unos meses empecé a usar el perfil «HEVC MP4» para convertir archivos WTV y también para volver a convertir archivos H264 previamente convertidos. Al principio me impresionó que los archivos resultantes fueran mucho más pequeños de lo esperado. Así siguió hasta que actualicé MCEBuddy a la versión 2.5.5 y cambié la tarjeta gráfica de una Gigabyte GV-N630D3 a una GeForce GTX 1650. Aún consigo archivos más pequeños que con los perfiles H264, pero no tan pequeños como los que obtenía cuando empecé a usar el perfil «HEVC MP4».

Por ejemplo: para un vídeo WTV de 29,25 minutos, primero lo convertí a un mp4 H264 de 205 MB y luego pude reconvertirlo a un H265 de 53 MB; sin embargo, ahora solo logro reducirlo a unos 125 MB. Los tres archivos mp4 tienen la misma resolución y no parece haber diferencias apreciables en calidad de vídeo.

Aún más desconcertante: al pasar de un vídeo H264 (perfil MP4 High Quality) a H265 (perfil HEVC MP4) apenas baja de 693 MB a 677 MB, cuando antes bajaba hasta unos 450 MB.

Sé que se supone que al convertir de H264 a H265 debería esperar una reducción de aproximadamente el 50 %. Pero al principio conseguía una reducción mucho mayor y me encantaba; me gustaría volver a conseguirlo para ahorrar mucho más espacio en mis discos duros.

¿Alguien puede ayudarme a entender qué está pasando y resolver mi problema? ¿Qué demonios se me está escapando?

¡¡¡Muchísimas gracias!!!

Aquí está mi MCEBuddy.log

Encantado de subir archivos de ejemplo si ayuda.

¿Acaso usaste codificación por software antes y ahora estás usando aceleración por GPU? La razón por la que pregunto es que mi primera codificación HEVC fue por software y tardó muchas horas, pero el archivo era pequeño… como 700 megas por una película. Al día siguiente compré una tarjeta de video capaz de hacer HEVC, una ASUS GeForce 1650 para ser exacto, y volví a codificar el mismo archivo y, aunque seguía siendo significativamente más pequeño que el mismo archivo codificado en H.264, era casi 2.5 veces más grande que la codificación por software.

No tengo una respuesta para la diferencia y nunca pude encontrarla con nadie. Solo comparto mi experiencia porque parece similar a la tuya.

Déjame advertirte sobre las trampas de HEVC. Si tienes mucho contenido con escenas muy oscuras, como películas de terror, puedes encontrarte con problemas de calidad, específicamente un tipo de efecto de halo de círculos concéntricos alrededor de cualquier movimiento. Sucede principalmente cuando hay movimiento, pero no siempre. Tienes que probar algunas películas y ver si te molesta, a mí sí. La única forma de hacer que desaparezca es aumentar la calidad. Desafortunadamente, no puedo obtener ayuda sobre cómo modificar los perfiles de MCEBuddy, así que estoy estancado con una cantidad creciente de archivos TS sin convertir. Cuando lo resuelva, lo compartiré aquí.

Tienes razón. Y creo que ahora entiendo más o menos por qué.

La percepción que tenía era que la aceleración por hardware simplemente permitía que la GPU prestara su potencia de procesamiento para acelerar el proceso de codificación. En realidad, no funciona así. Al utilizar la aceleración por hardware con tu GPU de Nvidia, estás pidiendo que el codificador integrado de la GPU Nvidia también se ponga en marcha. Aunque el codificador de Nvidia integrado en la GPU puede funcionar mucho más rápido que Handbrake, la calidad del resultado es inferior. En otras palabras, para lograr una calidad similar, los archivos de video convertidos con aceleración por hardware son más grandes.

En consecuencia, tenemos que elegir entre una codificación más rápida utilizando el poder de procesamiento de la GPU o una codificación de mejor calidad por Handbrake como aplicación que se ejecuta en la CPU. Qué decepción que las tarjetas gráficas más potentes no puedan ayudarnos a acelerar la codificación si preferimos Handbrake.

Por favor, consulta el artículo a continuación para una explicación más detallada.
https://www.techspot.com/article/1131-hevc-h256-enconding-playback/page5.html

Aquí está lo que he encontrado que funciona si quieres usar Handbrake. El parámetro de calidad que se pasa es el mismo entre el software handbrake/ffmpeg y ffmpeg por hardware, sin embargo, el hardware para Handbrake es diferente. Así que lo que terminé haciendo fue crear perfiles específicos para codificación por hardware. He probado la codificación por hardware en NVidia e Intel. Puedo decirte que Intel es la mejor. Buen tamaño de archivo y gran calidad, al menos cuando se usa h.265. A continuación están mis perfiles, módalos para adaptarlos a tus necesidades.

Aquí están mis perfiles:

[HEVC MKV Intel]
Description=HEVC en MKV configurado para usar Intel.
order=handbrake
DisableEncoderReordering=true
ffmpeg-general=-threads 0
ffmpeg-video=-ss 0 -vf yadif=0:-1:1,hqdn3d -vcodec hevc_qsv -preset slow -crf 26 -vsync 2 -map 0:v -sn
ffmpeg-audio=-acodec ac3 -map 0:a
ffmpeg-audioac3=-acodec copy -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
handbrake-general=--decomb --auto-anamorphic --verbose=2
handbrake-video=--start-at duration:0 -e qsv_h265 --encoder-preset quality -q 26
handbrake-audio=--aencoder copy --audio-copy-mask ac3,eac3,truehd,dts,dtshd,mp3,flac --audio-fallback ffac3 -R auto
handbrake-audioac3=--aencoder copy --audio-copy-mask aac,ac3,eac3,truehd,dts,dtshd,mp3,flac -R auto
handbrake-ext=.mkv
handbrake-audiodelay=skip

[HEVC MKV NVidia]
Description=HEVC en MKV configurado para usar NVidia.
order=handbrake
DisableEncoderReordering=true
ffmpeg-general=-threads 0
ffmpeg-video=-ss 0 -vf yadif=0:-1:1,hqdn3d -vcodec hevc_nvenc -preset hq -crf 26 -vsync 2 -map 0:v -sn
ffmpeg-audio=-acodec ac3 -map 0:a
ffmpeg-audioac3=-acodec copy -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
ffmpeg-UsingHardwareEncoding=true
ffmpeg-DisableSoftwareEncoderFallback=true
handbrake-general=--decomb --auto-anamorphic --verbose=2
handbrake-video=--start-at duration:0 -e nvenc_h265 --encoder-preset hq -q 26
handbrake-audio=--aencoder copy --audio-copy-mask ac3,eac3,truehd,dts,dtshd,mp3,flac --audio-fallback ffac3 -R auto
handbrake-audioac3=--aencoder copy --audio-copy-mask aac,ac3,eac3,truehd,dts,dtshd,mp3,flac -R auto
handbrake-ext=.mkv
handbrake-audiodelay=skip
handbrake-UsingHardwareEncoding=true
handbrake-DisableSoftwareEncoderFallback=true
AllowAllCopyRemuxing=true

¿Querías recomendar conseguir una nueva tarjeta gráfica con GPU compatible con Intel Quick Sync?

Nunca he usado Handbrake por separado excepto cuando elegía el perfil HEVC MP4 en MCEbuddy.

Todavía no tengo un buen dominio del marco de conocimiento en conversión de video. Y mi hardware es bastante antiguo también. Tal vez debería invertir más tiempo y dinero en aprender más sobre conversión de video y conseguir mejor hardware considerando mi considerable necesidad de convertir grabaciones de TV.

No pretendo decir compren esto y no aquello. Solo estoy transmitiendo mis hallazgos. Llevo un par de décadas haciendo conversión de video y captura de TV, pero de ninguna manera soy un experto. Mi sistema actual tiene una GPU integrada basada en Intel (UHD 630) y puede codificar por hardware h.265 a 10 bits. También tiene una RTX 2070. He realizado pruebas comparando el tamaño y la calidad de toda la codificación h.265 por hardware entre Intel y NVIDIA, y he descubierto que, al menos con mis ajustes y pruebas, Intel produce un archivo más pequeño pero de calidad igual o mejor, partiendo del mismo archivo fuente. La calidad está en el ojo de quien la mira, y mis ojos ya no son lo que eran. No tengo una tarjeta basada en AMD para probar, así que podría ser que dé resultados aún mejores.

Vas por buen camino. Aprende todo lo que puedas, haz tus propias pruebas y determina qué funciona mejor para ti. Descubrirás que constantemente estarás ajustando para obtener mejores resultados y en la búsqueda del mejor equilibrio entre calidad y tamaño para ti. A continuación, algunos recursos para comenzar.

https://www.videohelp.com/ Ha existido durante años y es una gran comunidad.
Hardware Encoding - MCEBuddy El foro de codificación por hardware aquí también es un excelente recurso.

Investiga sobre HandBrake y ffmpeg. Serán la fuente principal de conversión utilizada en los perfiles de MCEBuddy. Personalmente uso HandBrake porque me resulta más familiar. ffmpeg también es una gran herramienta, pero mi conocimiento de ella es más limitado.

Otra cosa con la que no estoy muy familiarizado es la eliminación de comerciales. Pero los foros aquí son una gran fuente de información y orientación.

Espero que eso ayude. No temas hacer preguntas. Intento ayudar en estos foros tanto como puedo en mi tiempo libre, pero hay muchas personas haciendo lo mismo. Un consejo: activa el registro de depuración y adjunta el registro de conversión cuando hagas preguntas sobre una conversión. Los registros ayudan mucho a entender lo que está haciendo MCEBuddy y pueden ayudar a identificar problemas.

Prefiero ffmpeg sobre Handbrake y mis pruebas han demostrado que produce archivos más pequeños que H.264 con la misma o mayor calidad, con configuraciones que no logro hacer funcionar con MCEBuddy… sí funcionan con FFmpeg Batch AV Converter, que puedo ejecutar 4 codificaciones simultáneamente sin que mi sistema deje de ser usable. Si uso MCEBuddy no puedo usar mis ajustes porque nadie me ayuda a hacerlos funcionar con MCEBuddy; he experimentado y no entiendo cómo MCEBuddy pasa los parámetros a la GPU. El perfil HEVC predeterminado en MCEBuddy es inadecuado no solo porque produce menor calidad, sino también porque usa software para el desentrelazado, lo que ralentiza las codificaciones y consume más recursos del sistema, por lo que solo puedo ejecutar 2 codificaciones al mismo tiempo para mantener el sistema usable.

Los parámetros que uso en FFmpeg Batch AV Converter son:

-c:v hevc_nvenc -c:a copy -preset hq -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26

El problema es que FFmpeg Batch no hace todo lo que MCEBuddy puede y hace, así que no me gusta usarlo porque muchas cosas del proceso se vuelven manuales y simplemente no tengo tiempo ni espacio para hacerlo de esa manera; quiero que esos parámetros funcionen en MCEBuddy… excepto el -c:a copy, porque eso solo copia las pistas de audio, ya que FFmpeg Batch no las recodifica como sí lo hace MCEBuddy.

El siguiente perfil es el que uso actualmente y es el que me proporcionaste, SystemIdleProcess, hace meses, excepto que he puesto ffmpeg primero porque no me gusta Handbrake ya que consume demasiados recursos del sistema:

[HEVC MKV AnyStream NVidia]
Description=HEVC in MKV hardset to use NVidia.
order=ffmpeg,handbrake
DisableEncoderReordering=true
ffmpeg-general=-threads 0
ffmpeg-video=-ss 0 -vf yadif=0:-1:1,hqdn3d -vcodec hevc_nvenc -preset hq -crf 26 -vsync 2 -map 0:v -sn
ffmpeg-audio=-acodec ac3 -map 0:a
ffmpeg-audioac3=-acodec copy -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
ffmpeg-UsingHardwareEncoding=true
ffmpeg-DisableSoftwareEncoderFallback=true

El mayor problema con este perfil es que todo lo anterior a «hevc_nvenc» son configuraciones de software, por lo que se ejecutan en software, lo cual es ineficiente porque podrían hacerse en la GPU. El otro problema es que el valor -crf 26 es nuevamente una configuración de software, por lo que es totalmente ignorada por la GPU; solo puedo suponer que, con este perfil, la GPU nVidia está usando los ajustes predeterminados.

Incluso intenté cambiar el -crf 26 al valor correcto -cq 26 para configuraciones de hardware, pero no hubo diferencia en los resultados de la codificación. Incluso bajé más y más el valor -cq sin ver cambios, así que no tengo idea de cómo MCEBuddy está pasando los parámetros a la GPU porque nada parece hacer diferencia.

Intenté usar mis parámetros de FFmpeg Batch arriba en el perfil de MCEBuddy simplemente quitando los parámetros de audio y usándolos como los únicos parámetros en la línea ffmpeg-video; MCEBuddy codificó el archivo, pero el resultado fue un video negro con sonido… así que no tengo idea de cómo pasar los parámetros a la GPU.

No sé qué hacer en este punto. Prefiero MCEBuddy sobre cualquier otro software que he usado para codificar, pero los ajustes HEVC predeterminados para aceleración por hardware son inaceptables para cualquier película que tenga escenas oscuras y tengo muchas películas de terror. Así que no he codificado nada desde hace meses, excepto películas que sé que estarán bien con los ajustes actuales o que uso para experimentar, pero tengo que conservar todos mis archivos TS hasta que pueda encontrar una manera de hacer que mis ajustes funcionen en MCEBuddy y ya me estoy quedando sin espacio y estoy cansado de comprar discos duros nuevos, así que puede que tenga que dejar de usar MCEBuddy porque no hay documentación sobre cómo cambiar realmente los ajustes en la aceleración por hardware.

Si abres los registros de conversión, se mostrará la línea de comandos exacta que se pasa a ffmpeg. Si estás usando una versión o compilación especial de ffmpeg, siempre puedes reemplazar la versión que viene con MCEBuddy en el directorio de instalación.

Si estás creando una versión altamente personalizada de los parámetros de video y audio de ffmpeg y no quieres que MCEBuddy los modifique (MCEBuddy los ajusta según la configuración que hayas establecido en la página Tarea de conversión, como los controles deslizantes de calidad, Optimizar video, Selección de pista de audio, etc.), puedes indicarle a MCEBuddy que mantenga los parámetros de tu perfil tal cual con estas dos directivas de ffmpeg (de forma similar también para otros codificadores):

Prácticamente puedes hacer cualquier cosa con MCEBuddy y recomiendo encarecidamente que eches un vistazo a esta página para ajustar tu configuración: MCEBuddy - Advanced Settings, Commands and Tweaking

Gracias, goose. Le echaré un vistazo y probaré a ver qué puedo hacer. Simplemente no sé dónde poner mis comandos, ya que editar los perfiles parece no tener ningún efecto; creo que lo estoy haciendo mal… así que probablemente vuelva. Gracias de nuevo; realmente no quiero dejar de usar MCEBuddy, ya que hace todo lo que necesito, pero he llegado a un punto en el que debo personalizarlo para que cubra mis necesidades.

En el registro de conversión busca el texto “Launching process”. Aparecerá muchas veces en el registro, pero busca el que está realizando la tarea de conversión real. Debajo tendrá los argumentos que se están pasando. Si esto no coincide con tu perfil, entonces no se están aplicando correctamente.

Todavía estoy experimentando con ffmpeg para convertir escenas oscuras a hevc. Creo que ahora tengo un perfil aceptable, pero el tamaño no se reduce lo suficiente como para que valga la pena todavía. Pero usando hardware NVidia estaba obteniendo unos 160 fps. Publicaré cuando tenga un mejor perfil e investigue más los argumentos. ffmpeg es una bestia de aplicación.

MCEBuddy no funciona con mi configuración. Incluso lo actualicé a la versión de ffmpeg que uso en FFmpeg Batch AV Converter y los resultados son los mismos. Obtengo audio y subtítulos, pero no video. La siguiente es la línea en el perfil que pasa los argumentos a ffmpeg que estoy usando… sin éxito en MCEBuddy, pero funciona bien en FFmpeg Batch; bueno, todo lo que va después de hevc_nvenc es lo que uso en Batch, excepto que añado copy subs y copy audio.

ffmpeg-video=-ss 0 -vf yadif=0:-1:1,hqdn3d -vcodec hevc_nvenc -preset hq -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26

Prueba esto: abre el Menú Inicio e inicia el motor de línea de comandos de MCEBuddy y luego prueba tu perfil (no olvides agregar lo que @Goose sugirió arriba a tu perfil para que preserve tus configuraciones). Algunos controladores no admiten la codificación por hardware a través del proceso del sistema (servicio), prefieren un proceso de usuario, que es lo que hace el motor de línea de comandos: ejecutar el motor en el espacio de usuario en lugar del servicio (espacio del sistema).

RBoy… no consigo averiguar cómo hacerlo y si tengo que ejecutar una línea de comandos cada vez que quiera codificar algo, es hora de dejar MCEBuddy en el retrovisor. Si MCEBuddy puede ejecutar mi perfil desde la línea de comandos, no hay razón para que no pueda hacerlo desde la GUI. Estoy usando argumentos en mi perfil que están todos soportados por ffmpeg directamente desde su lista de los disponibles para nvenc.

Nadie parece querer responder mi pregunta. ¿Cómo pasa MCEBuddy los argumentos a la GPU? El archivo de configuración del perfil obviamente no lo hace, ya que ninguno de los perfiles predeterminados contiene comandos específicos de hardware… todos son SOFTWARE… y no son compatibles con la codificación por GPU. Así que cuando eliges Aceleración por Hardware, solo puedo asumir que obtienes los VALORES PREDETERMINADOS de ffmpeg o handbrake… lo cual es inútil si te importa la calidad. No quiero usar controles deslizantes arbitrarios para elegir la calidad… quiero MIS AJUSTES porque realmente funcionan.

SystemIdleProcess me dio el siguiente perfil (solo muestro la línea de video de ffmpeg)

ffmpeg-video=-ss 0 -vf yadif=0:-1:1,hqdn3d -vcodec hevc_nvenc -preset hq -crf 26 -vsync 2 -map 0:v -sn

El valor -crf 26 es solo para software; si cambio solo esa línea al comando correcto -cq 26, el perfil realmente hace un cambio, excepto que la calidad no está donde la necesito. Pero si ejecuto el siguiente perfil en FFmpeg Batch

-c:v hevc_nvenc -c:a copy -preset hq -vf yadif=0:-1:1 -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26

Obtengo exactamente la calidad que necesito, pero no obtengo ninguna de las otras cosas que me gustan de MCEBuddy. Pero si pongo este perfil en el archivo profile.config

ffmpeg-video=-c:v hevc_nvenc -preset hq -vf yadif=0:-1:1 -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26

Que es la forma correcta de pasar argumentos a ffmpeg para nVidia, el resultado es que solo obtengo audio y ningún video EN ABSOLUTO.

Así que @Goose, no importa cuántas veces me des una respuesta predefinida para que lea algo, la información que necesito no está ahí o no la entiendo. Sigues diciéndome que MCEBuddy puede hacer todo lo que quiero, pero no me dices simplemente cómo hacer que funcionen los ajustes que he incluido varias veces. Eso es todo lo que quiero. Quiero seguir usando MCEBuddy por muchas razones. Me ha encantado usarlo y por eso lo compré, pero no he podido usarlo durante más de 3 meses porque no puedo obtener una simple respuesta de dos minutos de nadie aquí con el conocimiento que me falta. Tengo más de 12 TB y creciendo de archivos TS acumulados que no puedo procesar.

POR FAVOR… necesito cinco minutos de tu tiempo para una respuesta que realmente funcione.

@Ronstang Tengo una cola grande procesando en este momento, pero cuando tenga oportunidad voy a intentar ayudarte a que esto funcione. ¿Puedes proporcionar el último registro de conversión que no te funcionó? También, ¿puedes decirme qué GPU tienes y qué versión del controlador estás usando? Haré todo lo posible por ayudarte a resolverlo.

La buena noticia es que puedo reproducir el problema. La mala noticia es que aún no sé por qué está ocurriendo.

Prueba lo siguiente:

ffmpeg-video=-c:v hevc_nvenc -preset hq -vf yadif=0:-1:1 -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26 -map 0:v -sn

Fue el parámetro map el que no le gustó; al no tenerlo para el video cuando se mapeaba el audio, solo se incluía el audio en la salida.

Esto es lo que probé:

[HEVC MKV ffmpeg NVidia]
Description=HEVC en MKV usando ffmpeg con hardware NVidia.
order=ffmpeg
DisableEncoderReordering=true
ffmpeg-general=-threads 0 -v verbose
ffmpeg-video=-c:v hevc_nvenc -preset hq -vf yadif=0:-1:1 -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26 -map 0:v -sn
ffmpeg-audio=-c:a ac3 -map 0:a
ffmpeg-audioac3=-c:a copy -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
ffmpeg-UsingHardwareEncoding=true
ffmpeg-DisableSoftwareEncoderFallback=true

Cometí un error SystemIdleProcess…el filtro de desentrelazado debería ser lo primero después del argumento de configuración de hardware, por lo que debería decir

ffmpeg-video=-c:v hevc_nvenc -vf yadif=0:-1:1 -preset hq -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26

yadif debería ir primero porque es un decodificador y todo lo demás son argumentos del codificador

Estoy usando una Asus GTX 1650 Super con el controlador 456.71

Prueba este perfil entonces:

[HEVC MKV ffmpeg NVidia]
Description=HEVC en MKV usando ffmpeg hardware NVidia.
order=ffmpeg
DisableEncoderReordering=true
ffmpeg-general=-threads 0 -v verbose
ffmpeg-video=-c:v hevc_nvenc -vf yadif=0:-1:1 -preset hq -rc constqp -rc-lookahead 60 -spatial_aq 1 -temporal_aq 1 -nonref_p 1 -cq 26 -map 0:v -sn
ffmpeg-audio=-c:a ac3 -map 0:a
ffmpeg-audioac3=-c:a copy -map 0:a
ffmpeg-ext=.mkv
ffmpeg-audiodelay=skip
ffmpeg-UsingHardwareEncoding=true
ffmpeg-DisableSoftwareEncoderFallback=true

¿Dónde pongo el comando

ffmpeg-VideoOptimized=True

Al final está bien. No lo incluí porque quería que se recortara. Probé ambas formas y preferí dejarlo fuera.