Transcodificar videos por hardware utilizando ffmpeg y opencl

Mucha gente ha ido acumulando archivos de video antiguos en un formato antiguo. Para esto quizás te interese transformarlas a un formato más actual compatible con el chromecast de tal forma que estén almacenadas en otro formato con el que no haga falta transcodificarlo de nuevo.

Si eres un peliculero con chromecast de habrás dado cuenta de que el chromecast no es compatible con el contenedor «avi» ni con el codec «divx» o «xvid» de hecho los codecs compatibles con el chromecast son «h264», «h265» y «vp8» (el formato de vídeo de google).

Esta es otra razón más para transcodificar toda nuestra biblioteca de vídeos de un plumazo y sin tener que estar pendiente. Para he realizado un script para linux que agiliza la tarea.

Instalar opencl

Antes de comentar. decir que nos vamos a centrar en procesadores gráficos intel compatibles con «opencl»

intalando opencl

sudo apt install libvdpau-va-gl1
sudo apt install ocl-icd-libopencl1 
sudo apt install opencl-headers
sudo apt install clinfo

la implementación libre de opencl para intel se llama beignet

sudo apt install beignet

Ejercutar ffmpeg para transcodificar los videos

Para transcodificar los videos he realizado el siguiente script cuya función es sleccionar todos los videos acabados en «.avi» y los transforma a «.mkv». Bajo mi experiencia el contenedor mkv se comporta mejor en streaming de video para el envío de contenidos tanto en LAN como a través de Internet.

vi transcodificar.sh

Copiamos y pegamos el siguiente script en su interior.

#!/bin/bash
cd [carpeta donde se encuentre los archivos avi]
ext=".mkv" 
fmt=".avi" 
for a in *$fmt; do 
 echo 'convirtiendo '${a//$fmt/$ext}; 
 ffmpeg -hwaccel auto -i "$a" -vcodec h264 -x264opts opencl -x264-params lossless -acodec copy "${a//$fmt/$ext}" 
done

Le damos permisos de ejecución y lo ejecutamos

chmod +x transcodificar.sh
./transcodificar.sh

Explicación

El bucle «for» busca todos los archivos con la extensión «avi» en la carpeta en la que esté situado y reliza las acciones comprendidas entre las palabras «for» y «done»

  • ffmpeg es el nombre del programa
  • -hwaccel indica que se va a intentar utilizar la tarjeta gráfica para la transcodificación
  • auto -i «a» indica que va a intentar descubrir el archivo de entrada de video por si mismo
  • -vcodec h264 -x264opts opencl indica que se va a transcodificar utilizando x264 al codec h264
  • -x264-params lossless indica que se va a realizar una transcodificación lenta, y sin perdida de calidad
  • -acodec copy inidica que va a copiar la pista de sonido. no la modifica
  • «${a//$fmt/$ext}» indica el nombre del fichero de salida.

Si necesitas más información en inglés, aquí está la wiki de ffmpeg para que puedas personalizar los comandos.
https://trac.ffmpeg.org/wiki/Encode/H.264

Si sigue dando problemas

Con el siguiente script se soluciona:
Instalamos otro programa que hace que busque la librería opencl

sudo apt install ocl-icd-opencl-dev

Un saludo.

sudo apt-get install i965-va-driver
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install libvdpau-va-gl1
cd /usr/lib/x86_64-linux-gnu/vdpau/
sudo ln -s libvdpau_va_gl.so.1 libvdpau_i965.so.1

sudo apt-get install libvdpau1 vdpau-va-driver

Fuente: https://gist.github.com/wellington1993/fe7d60e2684259f1b56f51891675f43a

Nadie es perfecto

Si tienes alguna sugerencia o quieres aportar algo no dudes en utilizar los comentarios.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.