x264 es una librería libre de codificación de vídeo en H.264/MPEG-4 AVC (Advanced Video Codec), un códec de vídeo altamente compatible y de los más usados. Supone una gran mejora en calidad de vídeo y compresión frente a sus predecesores.
Las recomendaciones realizadas son en parte relativas, ya que depende bastante del vídeo base. Lo mejor es experimentar y hacer pruebas para buscar la configuración ideal para cada vídeo (o serie).
Establece la profundidad de bits del vídeo de entrada. Podemos averiguarlo fácilmente con MediaInfo o cualquier otro programa.
--input-depth 16La profundidad de bits de salida. En principio usaremos 10 bits. ¿Por qué? El uso de 10 bits supone una mejora en la compresión, pues evita que se tenga que guardar la información del dithering o tramado, una técnica para crear la ilusión de profundidad de color mediante la aproximación de los colores no disponibles por difusión dentro de la gama de colores disponibles, y de esta forma busca evitar artefactos, o artifacts, en el vídeo, como puede ser el banding, o bandeado (lo cual explicaré en VapourSynth).
¿Pero qué mejora tienen los 10 bits entonces? Pues, mientras que 8 bits contiene una gama de color de 256 colores por canal, en 10 bits tenemos 1024, y de esa manera, además de suponer una leve mejora en la imagen, puede ayudar en la compresión del vídeo. Aquí una explicación más a fondo.
El perfil que usaremos para la codificación será "high", el cual cuenta con las siguientes extensiones:
Perfil | Formato |
---|---|
high | YUV420P8 |
high10 | YUV420P10 |
high422 | YUV422P10 |
high444 | YUV444P10 |
Usaremos principalmente high10, ya que estaremos usando 10 bits. Por otro lado, también tenemos high444, que si bien puede ser conveniente en algunos casos, las mejoras no son casi apreciables (salvo, como ya he dicho, en algunos casos).
--profile high10Establece la velocidad. Cuanto más rápido sea, menor será la calidad.
Priorizaremos la calidad y, por tanto, nos quedaremos con algo entre slow y veryslow.
--preset veryslowOptimización según el contenido.
Nos interesan film, animation o grain, dependiendo del contenido.
--tune animationEl CRF (Constant Rate Factor) es un modo de codificación de una pasada que intenta mantener una calidad constante por fotogramas. Es decir, tendrá en cuenta la calidad del vídeo, no el tamaño o el bitrate objetivo del archivo. Cuanto menor sea el valor, mayor será la calidad, siendo 0 lossless (sin pérdidas).
Controla la propagación de información entre bloques futuros y pasados en vectores de movimiento. Reducirá la calidad en la parte compleja de una escena, mientras que un fondo estático conservará una calidad alta. Al trabajar con animaciones con poco grano, será normal su uso. Igualmente, es recomendable comprobarlo por cuenta propia. Para deshabilitarlo:
--no-mbtreeEl tamaño de análisis de macrobloques. Un valor mayor producirá un resultado de mayor calidad, pero reducirá la velocidad. Se recomienda el uso de all.
--partitions allEstablece cuántos fotogramas pueden buscar adelante MB-tree (macroblock tree). Es recomendable usar valores lo más altos posibles, ya que cuantos más fotogramas futuros tenga MB-tree de referencia, será más eficiente, dando un mejor resultado. Por otro lado, valores más altos consumen una gran cantidad de memoria y el tiempo de codificación será mayor. El valor máximo es 250 (o keyint).
--rc-lookahead 125Lo que hace este parámetro es mejorar la calidad del vídeo suavizando los bordes nítidos que pueden formarse entre macrobloques. Con valores negativos, más de estos bordes se considerarán detalles, y al usar valores positivos serán menos. Consta de dos parámetros, alpha:beta, ambos actuando como umbrales aplicando una compensación a la cuantización (QP).
Establece el número máximo de B-frames a usar. Los B-frames resultan una mayor ayuda en la compresión. Para consultar más acerca de los distintos tipos de fotogramas: Tipos de frames (compresión de vídeo).
--bframes 16El algoritmo para la decisión en la colocación de B-frames.
Para contenido con más grano, valores más bajos ayudarán, mientras que con vídeos más planos, un ratio mayor resultará en un mejor resultado. Se recomienda guardar una diferencia de 0.10 entre ambos valores, aunque como generalmente usaremos MB-tree, el pbratio no tendrá ningún efecto.
--ipratio 1.40 --pbratio 1.30Cuenta con dos valores:
El número de fotogramas previos que puede emplear uno de tipo P como referencia. Las animaciones se ven altamente beneficiadas por el uso de valores mayores, mientras que el cine real no tanto y no se recomienda subir de 5.
El valor máximo es 16.
Distribuye bits a bloques planos.
La sensibilidad para la detección de cambios de escena en los que insertar fotogramas de tipo I.
--scenecut 40Deshabilita fast-pskip, que provoca una ligera pérdida de calidad.
--no-fast-pskipAyuda en la compresión de fotogramas de tipo P. Cuenta con tres modos:
Para comprimir un vídeo, crearemos un archivo .bat y tendremos algo parecido a lo siguiente:
set name=Ejemplo
set num=01
set tag=Ejemplo
@ECHO OFF
setLocal EnableDelayedExpansion
echo "%name%" - Encode
echo.
set out=G:\Encode\.vscode\Scripts\Encoded\%name%\[%tag%] %name% - %num% [RAW].mkv
set params=--input-depth 16 --output-depth 10 --profile high10 --preset veryslow --tune animation --crf 13 --deblock 0:0 --keyint 250 --min-keyint 23 --bframes 16 --scenecut 40 --chroma-qp-offset 0 --rc-lookahead 150 --merange 32 --subme 10 --psy-rd 0.90.0.00 --no-fast-pskip --ref 16 --me umh --direct auto --qpmin 0:0:0 --qpmax 32:32:32 --aq-strength 0.95 --aq-sensitivity 10 --qcomp 0.75 --aq-mode 3 --partitions all --trellis 2 --weightp 2 --threads 12 --lookahead-threads 3
"G:\Encode\.vscode\Scripts\bin\x264_x64.exe" %params% -o "%out%" "[video_de_entrada]"
pause
set name: el nombre de la serie o lo que corresponda.
set num: el número de episodio o de lo que sea.
set tag: una etiqueta que dar al nombre del archivo.
set out: el archivo de salida.
set params: los parámetros.
Al final, llamo a x264 mediante la ruta en la que se encuentra e introduzco primero los parámetros, luego marco la salida con -o y la variable de la ruta de salida (entre comillas, por si hay espacios) y por último la ruta al vídeo de entrada.