x264 cli
En esta pequeña guía vamos a mostrar como codificar un video con
x264.exe usando líneas de comandos.
Aplicaciones como MeGUI pueden usar
x264.exe, pero ya veremos que trabajar en línea de comandos no es tan complicado. Sirve tanto para usuarios noveles como para expertos, dadas las últimas modificaciones en el códec que cuentan con
presets que incluyen las configuraciones más usadas y simplifican mucho la tarea.
¿Por qué usar x264 cli y no x264VFW? Por una razón muy sencilla:
la única versión oficial del códec es x264 cli.
X264VFW no tiene soporte.
Podemos descargar el X264.exe desde aquí
http://x264.nl/Bajad la versión de 32bits. Aunque nuestro equipo esté preparado para la versión de 64bits no la recomiendo por lo siguiente: vamos a necesitar
avisynth 64bits. De las docenas de aplicaciones y filtros que hay en avisynth solo un pequeño porcentaje funcionan en 64bits. Y si no las podemos usar estamos atados de manos, así que recomiendo usar avisynth y x264 de 32bits.
Algunas opciones del códec x264 que hemos de conocer:
Presets: ordenados de menos eficiencia (más rapidez de codificación) a más eficiencia (menos rapidez) tenemos
Ultrafast - Very fast ? Fast ? Medium ? Slow ? Slower ? Placebo Recomendamos
Slow. Si nuestro PC está muy limitado pues Medium.
Tune (afinar la compresión): opciones para el tipo de video del que partimos (animación, real,). Destacamos
Film ? Animation ?Grain Respectivamente para imágenes reales, para dibujos animados (cartoon: fondos planos, sin texturas, tipo
Los Simpson) y para conservar el grano del video (como por ejemplo películas filmadas en 16mm. Ojo que esta opción aumenta mucho el bitrate).
Level: para establecer las frames que se tomarán de referencia. Puede ser
3.1, 4.1, 5.1, ? (para un video con resolución 1280x720 correspondería a 5, 9 y 16 ref-frames respectivamente). Recomendamos el
level 4.1 para una mayor compatibilidad con reproductores tipo mediatank y demás.
Nótese que el indicar el Level a 4.1 no siempre asegura que los vídeos codificados se reproducirán correctamente, ya que los reproductores tienen limitaciones en cuanto al máximo de flujo de datos que puede gestionar el procesador del aparato. Las especificaciones para los Blu-ray limitan la tasa de datos de video a 40mbit y el buffer de 30mbit. Para ajustar esto incluiremos en la línea de comandos estas instrucciones
--vbv-bufsize 30000 --vbv-maxrate 40000A diferencia del XviD,
el x264 funciona perfectamente a una pasada, y no vale la pena realizar dos a no ser que queramos fijar un bitrate o un tamaño final concreto. Al hacerlo en una pasada vamos a buscar una calidad constante, por lo que no tendremos control sobre lo mencionado.
También decir que los valores de los quants para cada frame (Q) van desde 1 (más calidad más tamaño) a 51 (menos calidad menos tamaño).
Los valores que Q ofrecen gran calidad estarían entre 19 y 23. En cuanto a las resoluciones podemos tranquilamente especificar valores de resolución
mod4 cuando creemos el script de avisynth.
Para esta guía suponemos que:
- El x264.exe está en la ubicación C:\
- Hemos creado un script de avisynth para cargar el video y realizar otras operaciones como crop, resize , denoising, etc (ver manual avisynth) C:\script.avs
- El video resultante va a ser C:\video.mkv
CODIFICACIÓN EN UNA PASADAPodemos usar para una single-pass
CQP (
Constant Quantization Parameter) o
CRF (
Constant Rate Factor).
La mejor manera de hacerlo es usando CRF.Usando CQP por ejemplo a Q=20, todos los frames se codificaran a Q=20, independientemente de cómo sean. Habrá valores fijos para las I, P y B-frames.
El
Rate Factor es una medida de calidad, y puede variar los valores de Q según cómo sean nuestras frames ya que tiene en cuenta el movimiento. Asignará valores medios no fijos para las I/P/B. En las escenas con mucho movimiento aumenta la compresión y por tanto el valor de Q (menos calidad), y en las escenas con poco movimiento disminuye la compresión y baja el valor de Q (más calidad). ¡¿Pero no era al revés?! Lo explicamos.
En escenas con mucho movimiento asigna un Q mayor ya que el ojo humano no puede fijarse en todos los detalles, y si hay alguna imperfección no nos daremos cuenta. En escenas con poco movimiento sí nos podemos dar cuenta si hay alguna imperfección. Así, si el CRF lo asignamos en 20, para las escenas con movimiento subirá p.ej a Q=22 y para las sin movimiento a Q=18.
¡Ojo!, esto no quiere decir que el bitrate asignado a las escenas con mucho movimiento será menor que a las de poco. Estamos hablando de calidad constante, luego como es lógico, una escena movida tendrá un bitrate mayor aunque esté ligeramente más comprimida que una que no. No aparecerán artefactos ni macrobloques en este tipo de escenas si nos movemos en los valores de CRF recomendados, que serán entre
19 y 23.
Un análisis objetivo (por ejemplo PSNR) nos diría que un montaje a CRF=20 tiene menos calidad que uno a CQP=20. Pero como nuestra apreciación es subjetiva, usando CRF apreciaremos más calidad. Por ello hay que coger con pinzas los análisis PSNR.
Línea de comandos para codificación a una pasada indicando el CRF.Vamos a
Menu de inicio>Ejecutar>cmd y le damos a enter. Se abre la consola y escribimos
"c:\x264.exe" --preset
slow --tune
film --crf
19 --level
4.1 --vbv-bufsize 30000 --vbv-maxrate 40000
--output "c:\video.mkv" "c:\ script.avs"
Vemos en color las opciones que podemos variar.
CODIFICACIÓN EN DOS PASADASUsaremos las dos pasadas cuando tengamos que establecer un determinado bitrate por cuestiones de tener que controlar el tamaño final del video.
Primer pasada"c:\x264.exe" --preset
slow --tune
film --pass 1 --bitrate
2500 --stats "c:\video.stats" --level
4.1 --vbv-bufsize 30000 --vbv-maxrate 40000 --output NUL "c:\ script.avs"
Segunda pasada"c:\x264.exe" --preset
slow --tune
film --pass 2 --bitrate
2500 --stats "c:\video.stats" --level
4.1 --vbv-bufsize 30000 --vbv-maxrate 40000 --output "c:\video.mkv" "c:\script.avs"
Vemos en color las opciones que podemos variar.
TEST DE COMPRESIBILIDAD. COMO SABER SI EL BITRATE QUE LE INDICO ES EL ADECUADO.Si se da el caso de que quiero montar un video y que me quepa digamos en ½ DVD, según sea la resolución y lo que ocupe el audio habré de indicarle el bitrate. Para ello se usa una
calculadora de bitrate. Aquí hay una
http://forum.doom9.org/showthread.php?t=122562¿Cómo saber si me quedo corto o me paso? Podemos hacer un test de compresibilidad sobre una parte del video. Será rápido y nos adelantará resultados finales.
En el script de avisynth añadimos al final del mismo la función
SelectRangeEvery(500, 25) , para que comprima un 5% del video.
Descripción de la función: SelectRangeEvery(clip, int "every", int "length", int "offset", bool "audio"). En el ejemplo cada 500 frames cogerá 25 (en un video a 25FPS equivale a un segundo por cada 20). Los valores los podemos variar a gusto.
La línea de comandos:"c:\x264.exe" --preset
slow --tune
film --pass 1 --bitrate
xxxx --stats "c:\video.stats" --level
4.1 --vbv-bufsize 30000 --vbv-maxrate 40000 --output NUL "c:\ script.avs" --slow-firstpass
Vemos en color las opciones que podemos variar. El valor del bitrate
xxxx será el que nos dé la calculadora. Nótese que se añade
--slow antes de
first pass ya que por defecto las primeras pasadas se hacen rápido, y a nosotros nos interesa que se haga despacio y bien.
Al terminar la codificación nos arrojará la info del ratefactor resultante.
x264 [info]: final ratefactor: 20.53Como hemos dicho que el ratefactor será el parámetro de calidad, si nos da unos valores dentro de los recomendados es que lo hemos acertado. Si no ha sido así, hemos de replantearnos el cambiar el tamaño final buscado y por tanto el bitrate, o variar la resolución, etc
Indicar que si la fuente es mala y tiene mucho ruido, el uso de un denoiser en avisynth puede ahorrarnos algo de bitrate.
CONSIDERACIONES FINALESLas fuentes en HD suelen ser bastante uniformes y no tener mucho ruido y artefactos, así que con un poco de práctica podemos dar con los valores de CRF que más nos convengan y a partir de ahí usarlos. No ocurre lo mismo con los DVDs, que los hay que dan pena.