- ENTRADA 024 -
Recodificar videos. 1 parte: HandBrake
Tenga usted cuidado con el Sr. Popov, no le llaman triciclo por nada
Cuando descargo algún video de internet suelen tener una calidad excesiva, lo que hace que su tamaño también lo sea, siendo de varios Gigas.
Nunca he sido sibarita con el tamaño de las películas, y mi TV tampoco soporta grandes formatos, así que suelo recodificar todo lo que me descargo. Normalmente dejo películas de 1.5 Gb en 400-600 Mb sin pérdida de calidad. Como ves, la reducción de espacio es grande.
Para ello utilizo el codec MPEG4 AVC, conocido como h264. Sé que su hermano menor, el codec HEVC, conocido como h265, aporta mayor compresión para la misma calidad, pero mi TV no lo soporta. Otros formatos más recientes como VP9 o AV1 aun comprimen más y mejor, pero con ellos ya ni cuento para mi TV.
Los tamaños rondan los 720HD, es decir 1280x720, o 1024x576, más que suficiente para TV normales, a 25 fps.
Para el audio elijo el codec mp3 con tasa de bits variable a 128 o 96. Me gustan más otros, pero hay cacharros que si no es MP3 no soportan audio, así que lo elijo por compatibilidad.
Como empaquetador uso Matroska (mkv).
Las aplicaciones que uso son dos: Handbrake y avidemux.
Handbrake
Me gusta porque es todoterreno y tiene mogollón de opciones. Además puedes crearte perfiles con tus configuraciones, y para mi, lo mejor de todo, es que se pueden exportar a archivos json para usarlos en scripts como verás luego.
Cuando le das a "Abrir fuente" y cargas el video, podrás elegir el "Preset" que quieras. Vienen muchos ya preconfigurados para web, dispositivos, uso general, o puedes crear el tuyo y guardarlo con el nombre que quieras, incluso ponerlo como opción predeterminada del programa.
Debajo de los presets están las opciones: Resumen, Dimensiones, Filtros, Video, Audio, Subtítulos, Capítulos y Etiquetas.
En estos apartados pondrás toda la configuración que puse antes.
Si ahora le das al botón de inciar, empezará la recodificación. Puedes ir a hacerte la cena, o a limpiar un poco la casa, porque tarda unos buenos minutos dependiendo de la calidad de la fuente, las configuraciones elegidas y también de la potencia del equipo que uses (entre 20 minutos y media hora en mi caso).
En la pestaña del menú "Preajustes" tienes para guardar el nuevo preset, usarlo como predeterminado y exportarlo. Esta última opción es importante, porque genera un archivo de configuración en formato json.
¿Para que quieres un archivo json?, pues porque Handbrake tiene la opción de funcionar por CLI (comandos por consola), por lo que nos viene genial para aplicar un preset guardado y meterlos en scripts. La orden sería así:
HandBrakeCLI --preset-import-file mipreset.json -i original.avi -o final.mkv
Eligiendo bitrate
En las opciones de Video, HandBrake viene predeterminada la "Calidad constante", así que nunca sabrás el tamaño resultante.
Si quieres dejar el archivo en un tamaño específico, deberás elegir "Tasa de bits" y teclear el bitrate.
¿Y cual es esa tasa?, pues hay que calcularla. Me hice un script que lo calcula en función de unas preguntas. Básicamente es multiplicar el tamaño que quieres obtener por un factor de corrección y dividir por el tiempo del video en segundos. La fórmula es así:
Bitrate= Mb del video * 8388,608 / Tiempo en segundos - bitrate de audio -15 (factor de corrección):
#!/bin/bash #mb * 8388.608 / seg - audio -15 #800 * 8388.608 / 6760 -40 -15 clear echo "CALCULAR LOS SEGUNDOS" echo echo read -p "Introduce las horas del video: " hor read -p "Introduce los minutos del video: " min read -p "Introduce los segundos del video: " seg HORA=$(( $hor*3600 )) MIN=$(( $min*60 )) CONV=$(( $HORA + $MIN + $seg )) echo echo "Segundos del video: " $CONV echo echo "CALCULAR EL BITRATE" read -p "Introduce los Megas del video resultante: " MB read -p "Introduce bitrate del audio: " AUD SUMAUDIO=$(( $AUD+15 )) MEGAS=$(( $MB*8389/($CONV)-$SUMAUDIO )) echo echo "El bitrate para el video es:" $MEGAS
O también puedes usar una calculadora de bitrate que hay muchas por la red.
Usando scripts
Cuando tienes un solo archivo, no tienes mucho problema, pero cuando tienes muchos y quieres recodificarlos todos, ir uno a uno es tedioso.
Mediante el preset guardado puedes hacer un script que recodifique todo lo que pille. Igualmente, con un solo archivo también es más fácil lanzar el script que abrir Handbrake, cargar el archivo y aplicar las configuraciones.
El script es muy sencillo. Buscas los archivos por extensión, cambias espacios por guiones bajos, aplica el json y luego borra el archivo original (opcional).
NOTA: Es buena idea que revises el siguiente script antes de usarlo para que no sucedan cosas que no quieras. Modifícalo a tu gusto.
#!/bin/bash # Conversor de archivos AVI a MKV # Por Moribundo Insurgente clear echo CONVERSOR DE AVI A MKV echo echo # Cambiar espacios por guion bajo for FILE in *.avi ; do NEW=`echo $FILE | sed 's/ /_/g'`; mv "$FILE" $NEW; done # Convertir mediante HandBrakeCLI for file in *.avi; do HandBrakeCLI --preset-import-file Handbrake_h264.json -i $file -o "$file.mkv"; done; rm *.avi # Eliminar la extensión duplicada .avi.mkv echo echo echo Eliminando extension duplicada... for FILE in *.avi.mkv ; do NEWFILE=`echo "$FILE" | sed 's/.avi.mkv$/.mkv/'` ; mv "$FILE" $NEWFILE ; done
Si, vale, es un script mierder, pero no se hacerlo mejor, y es funcional, ya sabes, KISS.
Al principio recomiendo hacer pruebas para ir afinando las configuraciones. Una vez hayas dado con lo que quieres, guarda el preset como oro en paño y úsalo sin piedad.
Próxima entrada:
Tags #handbrake #h264 #h265 #codec
/blog/