viernes, 22 de abril de 2016

CREACIÓN DE WEBMS (VP8 y VP9)

Para la creación de WebMs es necesario contar con ffmpeg, en Windows el ejecutable (ffmpeg.exe) se encuntra en la página oficial de la persona que lo distribuye (https://ffmpeg.zeranoe.com/builds), mientras que en la última actualización de Ubuntu está de vuelta sin necesidad de descargarlo. De lo contrario, se pueden agregar fácilmente los repositorios de Debian Multimedia a /etc/apt/sources.list (http://deb-multimedia.org), y luego necesitamos aplicar update y upgrade.

En Windows para poder trabajar con ffmpeg, necesitamos ponerlo en una carpeta que sea de fácil acceso, como C:/Users/usuario/w; ya que trabajaremos más adelante desde la ventana de comandos (cmd.exe). Podemos abrir dicha ventana con Tecla de Windows + R, o escribir "cmd.exe" en la búsqueda de programas en el menú inicio. Cuando abrimos el programa, este se abre en la carpeta del usuario, así que sólo necesitamos navegar a la carpeta que creamos antes con "cd" (change directory, cambiar de carpeta en inglés). No es necesario crear una carpeta especial, es sólo por comodidad, se puede usar cualquiera.

Para ir a C://Users/usuario/w:
cd w
Para ir a una carpeta distinta, ejemplo Videos>ffmpeg>webms
cd Videos/ffmpeg/webms

En Linux, simplemente se necesita escribir ffmpeg más los parámetros necesarios. Si se quiere trabajar con avconv muchas de los parámetros sirven, mientras que otros no, además de que ya no está siendo desarrollada activamente.


Ya listo para trabajar, en ambas plataformas es casi 100% lo mismo.




Versión tl;dr, aplicar los siguientes parámetros para la primera pasada, reemplazando 1.mkv por tu archivo de origen, -b:v 1000k por la tasa de bits o calidad deseada (aproximadamente 3000k para algo de buena calidad en 720p, o igualar la calidad de origen), -threads 3 puede ser reemplazada por los núcleos virtuales de tu CPU (un Intel i3 comúnmente tiene 2 núcleos físicos y 4 virtuales, pero varia):

ffmpeg -i 1.mkv -c:v libvpx -quality best -b:v 1000k -bufsize 1000k -auto-alt-ref 1 -lag-in-frames 25 -threads 3 -an -pass 1 -f webm null

Ignoramos la advertencia y le decimos que si, luego aplicamos la segunda pasada:

ffmpeg -i 1.mkv -c:v libvpx -quality best -b:v 1000k -bufsize 1000k -auto-alt-ref 1 -lag-in-frames 25 -threads 3 -an -pass 2 -f webm nombre_de_archivo.webm


Vemos hasta arriba la advertencia de la primera pasada (en inglés y de color distinto) para luego ya aplicar la segunda pasada con el nombre del archivo.


Más información


Los parametros anteriores son para no pensarse mucho y sólo los aplicamos, pero si necesitas más control, puedes probar cambiando lo siguiente:

  • Para buscar y recortar un fragmento en el video

Usamos -ss 00:00:00.000 -t 00:00:00.000, lo ponemos después del nombre de nuestro archivo de origen. La primera opción nos da el tiempo inicial (nótese que contiene décimas de segundo 000, no confundir con segundos 00), mientras que el segundo nos da la duración. También se puede usar -to 00:00:00.000, el cual se usa en caso de tener el tiempo final deseado. Ejemplo: 
-ss 00:00:30.123 -t 00:00:10.000
Creará un video de 10 segundos de duración, a partir de los 30 segundos con 123 milésimas de segundo.
-ss 00:00:30.123 -to 00:00:35.543
Creará un video de los 30.123 segundos hasta 35.543 segundos.

  • Para un tamaño óptimo en 4chan (máximo 3 MB)

Se puede reemplazar la variable de -b:v por -b:v 25165824/X*0.975 -maxrate 25165824/X*0.975, cambiando X por la duración del clip a convertir.

  • Para cambiar las dimensiones del video

Con -vf scale=1280:-1 podemos redimensionar el video a el tamaño deseado, el -1 es para mantener la relación de aspecto original, pero puede usarse de forma libre.

  • Para agregar audio

Necesitamos reemplazar el parámetro -an por -c:a libvorbis -b:a 128k, en donde libvorbis es la opción para habilitar el codec de audio Vorbis, que es el recomendado, ya que posee más características que MP3 (libmp3lame). Las otras opciones comunes son AAC (libfdk_aac) y Opus (libopus). La otra opción común es sólo copiar el audio, para eso ocupamos -acodec copy. La calidad de -b:a es a reserva nuestra, 128k en Vorbis es un buen número, pero se puede ocupar lo que gustemos.

  • Agregar metadata (título del video y/notas)

Simplemente agregamos -metadata title="lo que queramos van entre comillas"



Un ejemplo con todas las opciones anteriores sería:
ffmpeg -i video.mp4 -ss 00:01:30.454 -to 00:01:35.344 -c:v libvpx -quality best -b:v 2000k -bufsize 1000k -auto-alt-ref 1 -lag-in-frames 25 -c:a libvorbis -b:a 128k -threads 3 -metadata title="webm de prueba" -pass 1 -f webm null
Luego:
ffmpeg -i video.mp4 -ss 00:01:30.454 -to 00:01:35.344 -c:v libvpx -quality best -b:v 1000k -bufsize 1000k -auto-alt-ref 1 -lag-in-frames 25 -threads 3 -c:a libvorbis -b:a 128k -pass 2 -f webm mivideo.webm
Nótese que no se usó la opción de tamaño óptimo de 3 MB, ya que no conociamos la duración del video de antemano.


  • Para un menor tiempo de codificación, a riesgo de menor calidad

Muchas veces sólo queremos convertir un clip de youtube que de origen no es de buena calidad, así que no necesitamos obtener la máxima calidad posible que nos brindan los parámetros originales, así que podemos cambiar -quality best por -quality good -cpu-used 1. También podemos reducir -lag-in-frames de 25 a -lag-in-frames 16. También se podría ir directamente a la conversión del archivo sin necesidad de darle 2 pasadas, simplemente eliminamos -pass y le ponemos nombre a nuestro archivo.


Para crear un webm en VP9

Lo anterior fue para crear webms en VP8, pero si se quiere usar el último codec de webm, se necesitan cambiar varias cosas:

tl;dr, aplicar estos parámetros, cambiando lo -b:v por la calidad deseada y 1.mkv por nuestro archivo:
ffmpeg -i 1.mkv -c:v libvpx-vp9 -b:v 1000K -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -threads 3 -an -pass 1 -speed 4 -f webm null
Ignoramos la advertencia y le damos si, luego:
ffmpeg -i 1.mkv -c:v libvpx-vp9 -b:v 1000K -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -threads 3 -an -pass 2 -speed 2 -f webm archivo_nuevo.webm
Muchos aún no saben del parámetro de -speed y al tratar de convertir un clip de video a VP9 les toma un tiempo demasiado largo, pero al aplicar -speed 4 vemos cómo la conversión es muy rápida. Ya luego en la segunda pasada se puede aplicar del 1 al 3, siendo 1 la mejor calidad pero a riesgo de mayor tiempo, 2 es lo recomendado.

Herramientas

Para saber la información de nuestro video, podemos usar mediainfo tanto en Windows como en Linux (https://mediaarea.net/en/MediaInfo), es muy útil para saber la duración exacta del video, los codecs de audio y video, la tasa de datos, etc.

Para editar el video se puede usar Avidemux (http://fixounet.free.fr/avidemux/ aunque la dirección cambia a veces) en ambas plataformas, nos permite editar el clip deseado para convertirlo después con ffmpeg. La última versión ya puede modificar Webms pero no se pueden exportar a vp8/vp9, lo cual haría que no sea necesario trabajar con ffmpeg, esperemos que sea pronto.