Convertir archivos de vídeo de forma masiva vía ssh en Linux

Para ver vídeo, reproducir música, ver imágenes, utilizo Kodi. Pero al contrario de lo que te puedas imaginar no lo tengo corriendo en la Raspberry Pi, sino que está en un pequeño dispositivo gobernado por Android, un NEO U1. Sin embargo, todos los archivos multimedia se encuentran en un NAS. Hace poco, se liberó una nueva versión de Kodi, en concreto la versión 17.4. El problema me ha surgido con que he dejado de ver correctamente los vídeos que venía codificados con H.264/MPEG-4. Veía los vídeos a saltos. Lo cual es realmente incómodo, como te puedes hacer una idea. Esto no es la primera vez que me sucede, que al cambiar de una versión de Kodi a otra dejo de ver bien los archivos multimedia. Así que me he decidido a dar una solución, y esta pasa por convertir archivos de vídeo de forma masiva a MPEG-2.

El tema, es que la conversión la quería hacer directamente en el NAS, que por supuesto corre Linux, para no tener que estar con mi ordenador en marcha. A continuación te indico los pasos que he seguido para conseguirlo.

Convertir archivos de vídeo de forma masiva vía ssh en Linux. Portada.

Convertir archivos de vídeo de forma masiva

Antes de nada, indicar que no lo quiero dar tanta importancia al script utilizado para convertir archivos de vídeo, como al proceso. Se trata de un primer paso, al que le quiero añadir nuevas características, algunas de las cuales adelantaré al final del artículo.

Acceso mediante SSH

Evidentemente para acceder al NAS donde están todos los archivos multimedia, el procedimiento que utilizo de forma habitual es acceder mediante SSH. Puedes leer mas haciendo clic en el siguiente enlace sobre el acceso mediante SSH sin contraseña.

Un script para convertir archivos de vídeo

El script que estoy utilizando es el siguiente,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/env bash

# trap the Control-C signal and break out of the loop
trap break INT

for i in *.mkv; do
        filename=$(basename "$i")
        extension="${filename##*.}"
        filename="${filename%.*}"
        echo "========================="
        echo "Converting: \"$i\""
        ffmpeg -y -i "$i" -b:v 5M -c:v mpeg2video -b:a 128k -c:a libmp3lame "$filename.avi"
        echo "Removing: \"$i\""
        rm "$i"
        echo ""
done

Lo que hace es simplemente convertir cualquier archivo con extensión .mkv a .avi utilizando para ello el códec mpeg2 para vídeo, y mp3 para audio. Además he tenido en cuenta las siguientes consideraciones,

  • La opción -b:v 5M establece el bitrate del vídeo, es decir, la tasa de flujo de datos a 5Mbps, que con las pruebas que he hecho, he visto que los resultados son mas que aceptables.
  • La opción -b:a 128k establece el bitrate del audio a 128kbps. Que para mi es mas que suficiente, pero que aquellos que tengan un oído mas sensible, pueden ponerlo a 1256kbps que es por defecto lo que venía en los CD.
  • El parámetro -c:v mpeg2video define el codec de vídeo que emplearemos, que en mi caso será MPEG2.
  • El parámetro -c:a libmp3lame define el codec de audio que utilizaremos. Como he comentado anteriormente, en mi caso pasaré el audio a MP3.

Por último, indicar que la primera línea trap break INT permite que nuestro script responda a una seña de Ctrl+C.

Creamos el script y le damos permisos

Este script tiene que estar en el escritorio donde vamos a convertir archivos de vídeo. Y por supuesto debemos darle permisos de ejecución. Podemos crear el script y darle permisos de ejecución, ejecutando la siguiente orden,

cat > convert.sh <<EOF
#!/usr/bin/env bash

# trap the Control-C signal and break out of the loop
trap break INT

for i in *.mkv; do
        filename=$(basename "$i")
        extension="${filename##*.}"
        filename="${filename%.*}"
        echo "========================="
        echo "Converting: \"$i\""
        ffmpeg -y -i "$i" -b:v 5M -c:v mpeg2video -b:a 128k -c:a libmp3lame "$filename.avi"
        echo "Removing: \"$i\""
        rm "$i"
        echo ""
done
EOF

chmod +x convert.sh

Lanzando el script

El script lo has creado en el directorio donde están todos los archivos multimedia que queremos convertir. Y por supuesto estamos allí porque hemos entrado vía ssh. Ahora vamos a lanzar el script, pero de forma que cuando salgamos de la conexión este se quede en funcionamiento. Para ello ejecutaremos la siguiente orden,

nohup convert.sh &
exit

Deteniendo el script

Puede suceder que por lo que fuera quieras detener el script, en este caso, debes entrar de nuevo al NAS (o donde tu tengas los archivos) y ejecutes la siguiente orden para determinar cual es el PID,

ps -ef | grep bash

Al hacerlo, en mi caso arroja lo siguiente,

Convertir archivos de vídeo de forma masiva vía ssh en Linux

Para detenerlo ejecutaremos lo siguiente,

kill -9 5097

Además tienes que matar la conversión actual. Para ello, tienes que hacer lo mismo, pero para ffmpeg. Para ello, ejecuta la orden,

ps -ef | grep bash

Y procede de la misma manera que en el caso anterior.

Conclusiones

Como puedes ver se trata de algo relativamente sencillo, pero sobre todo, una solución completamente desatendida. Quiero decir que en ningún momento te tienes que preocupar de nada. Simplemente lanzas el script y dejas que el haga su marcha poco a poco.

El problema es que los parámetros que he definido, sobre todo en lo referente al bitrate de vídeo dependerán de la resolución. Suponiendo que el número de fotogramas por segundo es el mismo en todos los casos, no es lo mismo que la imagen esté a 1920×1080 que 640×480, en cuyo caso podríamos reducir sensiblemente el bitrate de vídeo consiguiendo un resultado similar. Por esta razón es conveniente en el script determinar estos parámetros y calcular el bitrate de acuerdo a la resolución de la imagen de vídeo.

Bueno…, lo cierto es que estaría bien que existiera algún medio para saber si cuantos se han convertido, o que el proceso de conversión está funcionando bien, o cual se acaba de convertir, o algo así. Además sería interesante que esto te llegara al móvil, o que te llegara a Telegram. Esta última es probablemente la mejor solución…

Si te ha gustado el artículo, apúntate y te mantendré actualizado sobre el que es el mejor sistema operativo. Te mostraré como mejorar tu entorno de trabajo y conseguir ser mucho mas productivo

Publicado en la categoría... Ubuntu, una distribución Linux, un entorno de trabajo
  • Tengo yo por ahí un script a medio hacer que coge un vídeo de tu ordenador, lo envía por SSH a un host, lo convierte en remoto y luego se lo trae. Está un poco abandonado, y tiene alguna que otra guarrada, pero bueno 🙂

Artículos relacionados