Page cover

FFMPEG y yt-dlp

Toda la práctica la realizaremos en un servidor Ubuntu 22.0. A continuación veremos dos herramientas que nos permitirán trabajar con archivos multimedia, son Ffmpeg y yt-dlp. Primero vamos a configurar el directorio de trabajo del servidor Ubuntu:

mkdir /home/tu_usuario/Media

Herramienta Ffmpeg

FFmpeg es una potente herramienta de línea de comandos y biblioteca de software diseñada para grabar, convertir y transmitir audio y video en una amplia variedad de formatos. Es conocido por su versatilidad y capacidad para manejar casi cualquier tarea relacionada con multimedia, desde la captura de pantalla hasta la transcodificación en tiempo real y la edición de video.

Más info aquí.

La instalación de ffmpeg es tan sencilla como:

sudo apt install ffmpeg

FFmpeg sostiene muchos de los sistemas actuales de streaming no solo por su protocolo de video en streaming, valga la redundancia sino también por todas sus capacidades de edición y control de formatos. De ahí que se bromee con:

Meme sobre Ffmpeg

Herramienta yt-dlp

YT-DLP es un proyecto de software gratuito y de código abierto creado a partir de youtube-dlc, el popular descargador de YouTube, pero incluye características y mejoras adicionales. Esta herramienta se utiliza principalmente para descargar videos de YouTube, Vimeo y otros sitios web similares.

Más información aquí.

sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp

Al terminar deberás otorgar permisos de acceso:

sudo chmod +x /usr/local/bin/yt-dlp

Por último, si escribes yt-dlp --help verás toda la información sobre el comando o verlo aquí.

Funciones y comandos

1. Descargar un video de youtube con yt-dlp

Una vez instalada y funcionando, para hacer su función principal de descarga de video de YouTube.

Primero podemos asegurarnos del formato de descarga y el nombre:

yt-dlp -F --get-filename https://youtu.be/Bz0q0w5Jq9c?si=PWAKCOGzga_pRD8x

Esto mostrará lo siguiente:

La lista de todos los formatos en los que descargar, incluidos formatos de solo audio o video y distintas resoluciones. En la captura no se ve, pero la ultima línea mostrará el nombre del video.

En videos más antiguos puedes ver la diferencia:

Video de hace 15 años, formatos de archivo diferentes.

Ahora si, vamos a descargar el video, para ello, especifica la url del video a descargar, tenemos varias opciones:

Descargar y fusionar el mejor formato de solo video y el mejor formato de solo audio, o descargar el mejor formato combinado si el formato de solo video no está disponible:

yt-dlp -f "bv+ba/b" URL

Descargar el mejor formato de solo video y el mejor formato de solo audio por separado. Para este caso, se debe configurar la salida ya que, por defecto, el mejor video y el mejor audio tendrán el mismo nombre de archivo:

yt-dlp -f "bv,ba" -o "%(title)s.f%(format_id)s.%(ext)s" URL

Descargar el mejor video (que también tenga audio), pero que no sea más grande de 50 MB, o el peor video (que también tenga audio) si no hay ningún video de menos de 50 MB:

yt-dlp -f "b[filesize<50M] / w" URL

Descargar el mejor video mp4 disponible o el mejor video si mp4 no está disponible.

yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b" URL

Tienes más ejemplos disponibles en la propia documentación.

2. Ver información del video descargado

Mediante el software FFprobe instalado con el paquete FFmpeg podemos revisar la información de un archivo multimedia.

ffmpeg -i colplay.mp4

- ¿Qué indica el parámetro -i? - Busca que es: bitrade, Stream #0:0, Stream #0:1

3. Reconvertir el video .mp4 en .mkv

ffmpeg -i video_original.mp4 -vcodec libx264 video_264.mkv
ffmpeg -i video_original.mp4 -vcodec libx265 video_265.mkv

donde: h264 - codec de video que usa la librería libx264 h265 - codec de video que usa la librería libx265

¿Qué diferencias encuentras?

4. Modificar los canales de audio.

¿Qué diferencias vemos?

ffmpeg -i video.mp4 -vcodec copy -acodec mp3 h264_mp3.mkv
ffmpeg -i video.mp4 -vcodec copy -acodec aac h264_aac.mkv
ffmpeg -i video.mp4 -vcodec copy -acodec libvorbis h264_vorbis.mkv 

Nota: la opción "copy" en el codec de video obliga a ffmpeg a no hacer conversión de formatos de video, sino que utiliza el que ya tiene lo que ahorra tiempo.

ffmpeg detecta la calidad (bitrate) del video y audio del archivo original y asigna el equivalente al archivo de destino, pero esto depende del archivo y puede ser que ffmpeg reduzca demasiado la calidad viendose mal el archivo resultante o por el contrario, mantenga una calidad demasiado alta y ocupe demasiado el archivo final.

5. Personalizar la calidad de video o audio

para lo cual utilizaremos el parámetro: -b:v para el bitrate de video y -b:a para el bitrate de audio.

Por ejemplo, ejecuta:

ffmpeg -i coldplay.avi -b:v 2500k -b:a 192k coldplay.mp4

¿Cómo se muestra?

6. Extraer el audio de un video

para pasarlo a un archivo MP3. Ejecuta:

ffmpeg -i coldplay.mp4 -vn coldplay_audio.mp3

ffmpeg detecta que el archivo de destino es un archivo de audio y hará la conversión automáticamente sin necesidad de indicar parámetros como -vn. Pero si es necesario si queremos hacerlo en un formato como mkv sin canal de video.

donde: -vn Elimina el canal de video. -an Elimina el canal de audio.

7. Recortar fragmentos

Veamos como recortar un fragmento de tiempo de un video más largo. Digamos, obtener el fragmento de video desde los 35seg hasta los 65seg (30seg de duración).

Existe un parámetro con el que podemos realizar estas operaciones:

ffmpeg -i coldplay.mp4 -ss 35 -t 30 coldplay_frag.mp4
ffmpeg -i coldplay.mp4 -ss 00:35 -to 01:05 coldplay_frag.mp4

8. Juntar videos y audio

Fusionar fragmentos de video nos puede ayudar a crear composiciones simples para videos de presentación o de anuncio.

Antes de empezar, debemos tener en cuenta que los archivos de video que unamos deben tener las mismas características de formato (resolución, velocidad de fotogramas, códec, etc.) para que la concatenación funcione correctamente.

Para juntar dos fragmentos de video con FFmpeg usaremos el filtro concat que nos permite concatenar varios archivos de video en uno solo. Vamos a ver como:

Primero, crearemos un archivo de texto que contenga la lista de los archivos de video a unir. Creamos un archivo llamado files.txt dentro de la misma carpeta donde están almacenados los videos

sudo nano files.txt

y agregamos los nombres de los archivos de video en él:

file 'video1.mp4'
file 'video2.mp4'

Donde video1.mp4 y video2.mp4 son los nombres de los archivos de video que deseas unir.

Ahora usaremos el filtro de concat de FFmpeg para concatenar los archivos de video. El comando será similar al siguiente:

ffmpeg -f concat -i files.txt -c copy resultado_concatenado.mp4

Explicación de los parámetros:

  • -f concat: Especifica el formato de entrada como concat, indicando que estás utilizando el filtro concat.

  • -i files.txt: Especifica el archivo de lista de concatenación como entrada.

  • -c copy: Indica a FFmpeg que copie los flujos de audio y video sin volver a codificarlos, lo que preserva la calidad sin pérdidas.

  • resultado_concatenado.mp4: Nombre del archivo de salida donde se guardará el video concatenado.

9. Descargar el thumbnail del video

Vamos a trabajar con uno de los videos anteriores:

En Youtube se puede apreciar la miniatura o "thumbnail" de preview del video.

Para descargar solo la miniatura escribiremos:

yt-dlp --skip-download --write-thumbnail --convert-thumbnails jpg https://youtu.be/Bz0q0w5Jq9c?si=yot8Mp-B0_PmjuWv

Este comando le indica a yt-dlp que no descargue el video (--skip-download), pero que escriba la miniatura (--write-thumbnail) del video y que lo descargue en jpg (--convert-thumbnails .jpg).

La miniatura se guardará en el mismo directorio desde donde hemos ejecutado el comando:

Podemos revisar el archivo en la carpeta, para visualizarlo deberás transferirlo a un SO con interfaz gráfica, puedes usar el mismo Tabby para ello. La imagen corresponde a una prueba hecha con formato .webp
¿Hay alguna forma de visualizar esa imagen en mi servidor?

También puedes revisar la imagen con la herramienta jp2a que te convierte imágenes a ASCII art. Ten en cuenta que esta herramienta solo admite formatos como JPEG (.jpg, .jpeg), PNG (.png), BMP (.bmp), y GIF (.gif). Para instalarlos simplemente:

sudo apt-get install jp2a

Una vez instalado, puedes convertir una imagen a arte ASCII usando el comando jp2a seguido de la ruta de la imagen. Por ejemplo, para convertir una imagen llamada fallout.jpg:

jp2a imagen.jpg

Esto mostrará lo siguiente:

Como ves, el resultado es algo burdo pero da el pego!

Referencias:

Última actualización