Site icon jomiroca

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»

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.

Exit mobile version