Llevo una semana dedicando mi pc de casa a convertir h264 a h265. Últimamente me he encontrado con el problema de que el NAS que tengo en casa para películas, documentales y series empieza a quedarse corto de espacio. Mi NAS es un QNAP TS-853Pro con 8 discos de 4TB.

Para poder darle un poco más de autonomía existen estas 4 opciones:

Borrar contenido

Ya lo he hecho para aquello que me parecía más prescindible. Puedes borrar algo, pero al final si quieres mantener tu biblioteca de contenido acabas teniendo pocas cosas borrables.

Ampliar con una caja de expansión de discos de QNAP

Es una opción que consideraré más adelante. El coste es bastante elevado, ya que es una caja tonta sin capacidad de procesado alguno. Es como un chasis externo USB3 para pinchar 8 discos, y su precio me parece elevado.

Comprar un NAS adicional

En caso de último recurso, consideraría esta opción ya que la CPU de mi NAS tiene ya 4 años y podría ser interesante reemplazar la unidad actual con una con mejor capacidad de transcodificación.

Reencodear la biblioteca de contenidos HD

Esta es la opción por la que he optado en este punto. Es un proceso largo, muy largo en tiempo, pero puede darte un balón de oxígeno importante en cuanto a liberar espacio.

Convertir h264 a h265. ¿Cuanto espacio se ahorra?

El ahorro de espacio, en mi experiencia, varía sensiblemente en función del tipo de contenido que vayas a convertir. De media podemos ahorrar entre un 40% y un 75% manteniendo calidades muy buenas a partir de fuentes ya comprimidas con h264.

Ejemplos:

Primera temporada de la serie South Park, convirtiendo de 1080p h264 a 720p h265, manteniendo las dos pistas de audio:

868M Sep 13 17:03 'South Park - 01x01.mkv'
222M Nov  2 16:16 'South Park - 01x01.mkv'
854M Sep 13 16:57 'South Park - 01x02.mkv'
198M Nov  2 16:22 'South Park - 01x02.mkv'
834M Sep 13 17:05 'South Park - 01x03.mkv'
213M Nov  2 16:31 'South Park - 01x03.mkv'
894M Sep 13 17:19 'South Park - 01x04.mkv'
226M Nov  2 16:09 'South Park - 01x04.mkv'
856M Sep 13 16:57 'South Park - 01x05.mkv'
202M Nov  2 16:19 'South Park - 01x05.mkv'
849M Sep 13 16:59 'South Park - 01x06.mkv'
209M Nov  2 16:25 'South Park - 01x06.mkv'
821M Sep 13 17:20 'South Park - 01x07.mkv'
226M Nov  2 16:47 'South Park - 01x07.mkv'
883M Sep 13 17:20 'South Park - 01x08.mkv'
216M Nov  2 16:12 'South Park - 01x08.mkv'
835M Sep 13 17:03 'South Park - 01x09.mkv'
230M Nov  2 16:28 'South Park - 01x09.mkv'
831M Sep 13 17:13 'South Park - 01x10.mkv'
220M Nov  2 16:37 'South Park - 01x10.mkv'
833M Sep 13 17:07 'South Park - 01x11.mkv'
217M Nov  2 16:34 'South Park - 01x11.mkv'
831M Sep 13 17:19 'South Park - 01x12.mkv'
250M Nov  2 16:40 'South Park - 01x12.mkv'
827M Sep 13 17:20 'South Park - 01x13.mkv'
246M Nov  2 16:44 'South Park - 01x13.mkv'

Unas cuantas películas que tenía en .h264

convertir h264 a HEVC

Esta es la salida de un programita que he hecho en python para poder controlar de forma más pormenorizada los audios y streams que quiero conservar. Además, no pierdo el identificador de idioma de las pistas de audio.

¿Cuanto se tarda en convertir h264 en h265?

Pues no os voy a engañar, es un proceso bastante largo. Actualmente tengo esta CPU, con 6 cores y con mis ajustes, que favorecen mejorar la velocidad encodeando h265 obtengo unas velocidades de entre 40 y 110 fps cuando no bajo la resolución. Sí, es un número muy variable, dependiendo del contenido, pero es lo que hay. Por lo que he visto la velocidad aumenta encodeando películas de animación y es menor con películas de mucha acción. Mi tiempo estimado de conversión para más de una docena de TB es de unos dos meses.

Este encodeado requiere de potencia bruta de CPU. A día de hoy no soy consciente de que una GPU vaya a ayudar gran cosa en una simple conversión de formato h264 a h265, así que es una tarea de puro músculo CPU.

¿Se pierde calidad al convertir h264 a h265?

Si, por supuesto. Cualquier compresión de vídeo que no sea lossless (sin pérdidas), va a suponer una pérdida de calidad con respecto al original. En mi caso estoy en la peor situación, ya que parto de contenido previamente comprimido con h264. Mi fuente ya ha perdido calidad con respecto al original cuando se comprimió a h264 y vuelve a perderla al pasarlo a h265. La buena noticia es que salvo que seas muy tiquismiquis, la pérdida de calidad entre h264 y h265 es muy pequeña.

Muestra de calidad en formato original 1080p h264

Muestra de calidad en formato convertido 720p h265

convertir h264 a h265

Al resto de contenido, cine que no es de animación y las peliculas de Pixar, suelo respetarle la resolución 1080p. El proceso óptimo sería reencodear todo desde la fuente original sin comprimir, pero no tengo acceso a esos vídeos.

Parámetros de FFMPEG para convertir h264 a h265

Después de mucho probar, estos son los parámetros que uso para la conversión de h264 a h265 usando FFMPEG.

ffmpeg -hide_banner -i NOMBREORIGINAL.mkv -max_muxing_queue_size 4000 -x265-params crf=23:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 -c:v libx265 -preset ultrafast -map 0:a -map 0 -map -v -map V -c:a ac3 -ar 48000 -ab 448k -c:s copy NOMBREDESTINO-h265.mkv

A continuación explico los parámetros que he utilizado. Algunos los he elegido con criterio y los más avanzados los he obtenido de foros y estoy contento con el resultado que dan.

-hide_banner

Nos oculta los parámetros de compilación de ffmpeg, que es un montón de líneas que no me interesa leer miles de veces con cada archivo que se convierte de h264 a h265.

-preset ultrafast

El preset ultrafast puede llevar un poco a engaño. A primera vista podemos pensar que un encodeo ultrafast va a resultar en peor calidad. Al contrario, ese parámetro ya lo definimos en el CRF. Ultrafast simplemente se “esfuerza” menos en obtener mayores ratios de compresión. En el mundo real, acelera la compresión dando como resultado archivos de salida algo mayores.

-max_muxing_queue_size 4000

He tenido que añadir este parámetro para que no fallara en algunas conversiones. Es un buffer en el que se almacena la salida de la conversión del vídeo. No afecta al rendimiento del encoding.

-map 0:a

Con esto le digo a FFMPEG que quiero todas las pistas de audio que había en el archivo original. Las pistas de audio no siempre están en el mismo orden y no puedo detenerme a evaluar cual es la pista buena en cada caso.

-map 0

Con esta opción le digo a FFMPEG que quiero todas las pistas de vídeo del original

-map -v

Con esta opción le digo que quiero ignorar pistas que lleven contenido extraño. Por ejemplo en algunos casos me he encontrado portadas de películas en formato MJPEG que hacían que el encodeo fallara.

-map V

Con esto incluimos todas las pistas que no corresponden a portadas de películas

-c:a ac3 -ar 48000 -ab 448k

Con esa opción le pedimos a FFMPEG que queremos que convierta las pistas de audio a AC3 con un bitrate de 448kbps y una frecuencia de muestreo de 48Khz

Parámetros avanzados de x265
-x265-params

Son parámetros avanzados que se pasan al codec libx265 a la hora de encodear el archivo resultante. No me las voy a dar de entendido, salvando el CRF que veremos a continuación, las he sacado de un foro y me ha gustado el resultado que ofrecían.

El parámetro CRF especifica la calidad que esperamos del vídeo resultante. Es un valor que oscila entre 0 y 51. Cuanto más bajo sea el valor, más calidad estaremos pidiendo al vídeo resultante, a costa de aumentar el tamaño del archivo de salida. Por defecto en x265 CRF es 28. En mi experiencia, CRF28 no me daba la calidad esperada y veía mucha pixelación en alguna película, así que he aumentado la calidad a CRF23.

Otras opciones que he usado para convertir h264 a h265

A la hora de convertir series de animación, he decidido prescindir de la calidad 1080p para bajar a 720p y ganar en velocidad y espacio recuperado.

Para convertir el vídeo de 1080p a 720p con FFMPEG añadimos este parámetro después del -i donde indicamos el archivo de fuente:

-vf scale=-1:720

En el caso concreto de South Park la velocidad de conversión se incrementa un 50%, desde los 102FPS hasta los 158FPS. Los tamaños se ven reducidos de la siguiente forma:

868M Sep 13 17:03 'South Park - 01x01.mkv' << Original 1080p 2 pistas de audio h264


323M Nov 2 15:44 'South Park - 01x01.mkv' << Convertido 1080p 2 pistas de audio h265

222M Nov 2 2018 'South Park - 01x01.mkv' << Convertido 720p 2 pistas de audio h265

Viendo números completos, la serie South Park (21 temporadas) ocupaba originalmente 179GB en calidad 1080p h264  y tras convertirla a 720p h265 ocupa 46GB.

El resultado con películas es muy muy variable. Tengo películas de 10GB que han acabado en 2GB y otras de 13GB que el resultante en HEVC ha sido igual o un pelín mayor. Por lo general se ahorra más de la mitad de espacio.

Yo me he hecho un programa con python que analiza primero las pistas y subtítulos presentes en el original y solo se queda con los audios y subtítulos en Español e Inglés, en ese orden. Además, con el método que expongo anteriormente de copiar todas las pistas, perdemos la identificación del idioma del audio. Es decir, con el método que expongo aquí, el reproductor verá una serie de pistas de audio de idioma no definido.

¿Vale la pena convertir h264 a h265?

En mi caso y al menos de momento, rotundamente sí. Convertir toda mi colección de películas y series (unos 15TB) me va a llevar unos dos meses en total, pero voy a recuperar un 50% del espacio aproximadamente.

Al final fue un mes y una semana. Me ahorré 6TB de espacio.

¿Y el coste de tener el ordenador encendido convirtiendo h264 a h265?

Las opciones de ampliación del NAS y compra de uno nuevo se pondrían en más de 1500 euros mínimo y es un coste muy superior a los 25 euros de luz que va a gastar el ordenador haciendo la conversión, un mes y una semana  encendido 24/7.