FFMPEG + YT-DLP
¿Qué es FFMPEG?
Es una herramienta por línea de comandos que permite convertir audio o video de un formato a otro. Es capaz de capturar y codificar en tiempo real desde DirectShow, una tarjeta de televisión u otro dispositivo compatible.
Se trata de una colección de software libre que puede grabar, convertir o transcodificar y hacer streaming de audio y vídeo. Puede codificar, decodificar, transcodificar, multiplexar, demultiplexar, transmitir, filtrar y reproducir casi cualquier cosa en términos de audio y video. Es compatible con formatos antiguos y modernos.
Está desarrollado en GNU/Linux, pero puede ser compilado en la mayoría de los sistemas operativos, incluyendo Windows. La mayoría de los desarrolladores de FFmpeg lo son también del proyecto MPlayer y está hospedado en el servidor del proyecto MPlayer. Incluye la biblioteca de códecs libavcodec.
Es utilizado en proyectos libres y propietarios, como ffmpeg2theora, VLC, MPlayer, HandBrake, Blender, Google Chrome, MystiQ, Videomorph, etc.
Instalar
Para instalar la herramienta:
sudo apt update && sudo apt upgrade
sudo apt-get install ffmpeg
Algunos comandos básicos
Para pedir ayuda y ver las opciones que nos brinda.
ffmpeg -hPara ver información de un video
YT-DLP
YT-DLP es un fork de youtube-dl, que permite la descarga de contenido multimedia desde diversas fuentes en línea de un modo sencillo y eficiente.
Para instalar esta herramienta que funciona también por línea de comandos, debemos descargar la aplicación desde github y lo ubicaremos en /usr/local/bin/ haciéndolo accesible desde cualquier directorio del sistema.
Para hacer que yt-dlp sea ejecutable, tenemos que darle permisos de ejecución:
Si queremos ayuda:
Si queremos ver los formatos disponibles para el vídeo podemos usar la opción «-F»
Para descargar uno de los formatos posibles:
Si quieres descargar el video con la mejor resolución:
Otros comandos:
yt-dlp URL # Descarga el vídeo de la URL
yt-dlp -F URL # Muestra todos los formatos disponibles para la URL especificada.
yt-dlp -f “bestvideo+bestaudio” # Descarga el audio y el video de mejor calidad y los fusiona.
yt-dlp -o “%(titulo)s.%(ext)s” # Para descargar el vídeo con un nombre y extensión específicos.
yt-dlp -F ‘BV*[height=1080]+BA’ URL # Para descargar archivo con una calidad específica.
Se queremos convertir un video .mp4 en .mkv pero con las opciones siguentes:
donde: h264 - codec de video que usa la librería libx264 h265 - codec de video que usa la librería libx265
Para 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:
Aportaciones de estudiantes
A continuación os dejo algunas aportaciones realizadas por los estudiantes del grupo de ASIX2º del curso 2024/2025.
Subtítulos y playlist entre otros - Asmae El Haouari y Marcos Blasco
Selección de calidad específica:
Descarga de subtítulos:
Descarga de playlists completas:
Si FFmpeg nos baja demasiado la calidad o hace que el archivo pese mucho, podemos controlar esto con el bitrate:
donde:
-b:v 2500k → Fija el bitrate de video en 2500 kbps (mejor calidad, pero más peso)
-b:a 192k → Fija el bitrate de audio en 192 kbps (buena calidad sin ocupar demasiado).
Nota: Si el bitrate es muy bajo, el video se verá pixelado. Si es muy alto, ocupará demasiado espacio.
Si queremos extraer una imagen por segundo, usamos:
Opciones clave:
Para extraer una imagen por segundo utilizamos: fps=1
Si queremos 2 imágenes por segundo, usamos fps=2
Para numerar las imágenes en formato 0001, 0002, etc. %04d
Si necesitamos un fotograma en un tiempo específico, lo hacemos así:
Explicación rápida: ● -ss 00:01:30 → Saca el fotograma en el minuto 1:30. ● -vframes 1 → Solo extrae una imagen.
Si queremos una imagen cada 60 segundos, usamos:
Nota: Esto es útil para obtener capturas periódicas sin saturar de imágenes.
Para extraer imágenes entre el minuto 2 y el 5, sacando 1 imagen por segundo, hacemos:
Nota: Útil si solo nos interesa una parte del video.
Si en lugar de PNG queremos JPG, solo cambiamos la extensión:
Nota: También podemos usar formatos como BMP, TIFF, etc.
Links
RTMP
Adobe RTMP Specification: https://www.adobe.com/devnet/rtmp.html
Wowza RTMP vs HLS: https://www.wowza.com/blog/hls-vs-rtmp
HLS ○ Apple HLS Docs: https://developer.apple.com/streaming/ ○ Cloudflare HLS Guide: https://www.cloudflare.com/learning/video/what-is-http-live-streaming/3.
RTSP ○ RTSP RFC: https://tools.ietf.org/html/rfc2326
SRT ○ SRT Alliance: https://www.srtalliance.org/ FFmpeg
FFmpeg Wiki: https://trac.ffmpeg.org/wiki
yt-dlp
GitHub Repository: https://github.com/yt-dlp/yt-dlp
Installation Guide: https://github.com/yt-dlp/yt-dlp/wiki/Installation
Codecs Comparativos
Xiph.org (VP9/Opus): https://xiph.org/
AOMedia (AV1): https://aomedia.org/
Los básicos imprescindibles - Marc Gea, Miquel Burguera, David Valverde
Conversión básica de formatos
Extraer audio de un video
Extraer video sin audio
Recortar un fragmento de video
Cambiar resolución (ej: a 720p)
Cambiar bitrate (calidad)
Unir múltiples videos (usando lista.txt)
Mezclar audio y video
Además tenemos:
Grabar pantalla en Linux (X11) ffmpeg -f x11grab -i :0.0 -f alsa -i default grabacion.mp4
Capturar webcam (v4l2) ffmpeg -f v4l2 -i /dev/video0 webcam.mp4
Convertir video a GIF ffmpeg -i video.mp4 -vf "fps=10,scale=640:-1" animacion.gif
Aplicar filtros (ej: rotar, espejo, desenfoque) ffmpeg -i video.mp4 -vf "hflip,vflip,boxblur=5" video_editado.mp4
Añadir logo o imagen superpuesta ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=10:10" video_con_logo.mp4
Streaming a RTMP (Twitch/YouTube) ffmpeg -i entrada.mp4 -c:v libx264 -preset fast -f flv rtmp://live.twitch.tv/app/STREAM_KEY
Comando completo (recortar, escalar y comprimir) ffmpeg -i entrada.mov -ss 00:01:30 -to 00:02:30 -vf "scale=1280:720" -c:v libx264 -crf 23 -c:a aac -b:a 128k salida.mp4
Seguridad y metadatos - Gerard Soteras, Xavier Conde, Timofey Kalugin
Sentencia enfocada a la ciberseguridad, con el atributo –xff podemos
hacer creer que estamos descargando el video desde otro país.
Con –embed-metadata podemos descargarnos todos los metadatos del video:
Un comando bastante interesante que permite crear una versión del video únicamente con el contenido visual, sin sonido. Esto puede ser útil durante el montaje si se desea usar el video como fondo, mientras el contenido principal es una narración, como en los videos de historias de vida, un formato que fue bastante popular en YouTube hace algunos años.
Marca de agua y subtítulos - Adrià Trillo, Beatriz Suárez
Vamos a descargar un vídeo sobre el que vamos a trabajar toda la primera parte. Para ello, hemos listado los formatos disponibles para el vídeo de la canción de River Flows in you:
sudo yt-dlp -F https://www.youtube.com/watch?v=7maJOI3QMu0&ab_channel=YirumaVEVO
Ahora, vamos a descargar el vídeo en el formato que queramos. En nuestro caso, como es una canción, voy a descargar sólo el audio en webm. ya que es una opción con 155k bitrate, opus codec, que, entre todas las opciones disponibles parece ser la mejor opción en términos de calidad de audio, ya que tiene el bitrate más alto y un codec eficiente como opus, que es conocido por su buena calidad a tasas de bits moderadas.

Ahora, vamos a descargar el vídeo en el formato que queramos. En nuestro caso, como es una canción, voy a descargar sólo el audio en webm. ya que es una opción con 155k bitrate, opus codec, que, entre todas las opciones disponibles parece ser la mejor opción en términos de calidad de audio, ya que tiene el bitrate más alto y un codec eficiente como opus, que es conocido por su buena calidad a tasas de bits moderadas.
yt-dlp -f 251 https://www.youtube.com/watch?v=7maJOI3QMu0&pp=ygURcml2ZXIgZmxvdyB pbiB5b3U%3D

Para poder trabajar con el resto de los comandos, vamos a descargar el vídeo completo, tomaremos la opción 231. Esta opción tiene una resolución de 640x480, que es bastante buena para ver detalles, y la tasa de bits es relativamente alta, lo que implica buena calidad. El tamaño es más grande, pero si la calidad es lo que más te importa, esta opción es la mejor.

Por otra parte, yt-dlp nos ofrece la opción de descargarnos el mismo vídeo, pero con una mejor resolución, esto se puede hacer mediante el comando:
yt-dlp -f bv*+ba https://www.youtube.com/watch?v=7maJOI3QMu0&pp=ygURcml2ZXIgZmxvdyB pbiB5b3U%3D

También, tenemos la opción de convertir formatos de vídeo en otro que queramos. Como ejemplo. convertiremos el vídeo que nos hemos descargado antes que está en el formato .mp4 al .mkv .

Descargar subtítulos
Para descargar los subtítulos, primero tenemos que mirar si estos están disponibles. Para ello, los listamos de la siguiente forma:
yt-dlp --list-subs https://www.youtube.com/watch?v=_KztNIg4cvE

Una vez sabemos todos los subtítulos que nos podemos descargar, descargamos el vídeo junto a los subtítulos:
yt-dlp --write-sub --sub-lang es-EkcP5AbUQBc --convert-subs srt -f bestvideo+bestaudio https://www.youtube.com/watch?v=_KztNIg4cvE

donde:
•--write-subs: Indica que se descarguen los subtítulos. •--sub-lang es: Especifica que se descarguen subtítulos en español. •--convert-subs srt: Convierte los subtítulos a formato .srt. •-f bestvideo+bestaudio: Descarga la mejor calidad de video y audio. Si listamos los archivos, veremos que tenemos el vídeo en -webm y otro archivo con la extensión .srt . En este archivo se guardan los subtítulos.

Ahora, al reproducirlo tendremos que agregar los subtitulos descargados al vídeo y ya lo tendremos.

Añadir marca de agua con FFMPEG
Para añadir una marca de agua con ffmpeg, tenemos que seguir la siguiente sintaxis:
ffmpeg -i video.mp4 -i marca_de_agua.png -filter_complex "overlay=W-w-10:H-h- 10" -codec:a copy video_con_marca.mp4
Necesitamos una imagen en .png para poner de fondo y tendremos que indicarle la posición. -filter_complex "overlay=W-w-10:H-h-10" → Aplica un filtro para superponer la imagen sobre el video:
overlay=W-w-10:H-h-10 → Ubica la marca de agua en la esquina inferior derecha con un margen de 10 píxeles. oW-w-10 → La posición X: coloca la imagen 10 píxeles antes del borde derecho.
oH-h-10 → La posición Y: coloca la imagen 10 píxeles antes del borde inferior.
-codec:a copy → Copia el audio sin re-codificarlo (mantiene la calidad original).
Comandos para posicionar bien la marca de agua: •Superior izquierda: overlay=10:10 •Superior derecha: overlay=W-w-10:10 •Inferior izquierda: overlay=10:H-h-10 •Inferior derecha: overlay=W-w-10:H-h-10
Y si queremos redimensionar marca de agua:
ffmpeg -i video.mp4 -i marca_de_agua.png -filter_complex "[1][0]scale=iw*0.1:- 1[wm];[0][wm]overlay=W-w-10:H-h-10" -codec:a copy video_con_marca_redimensionada.mp4

Otras aportaciones
Un documento sobre el protocolo RTMP, Docker y OBS:
Links
https://www.rapidseedbox.com/es/blog/yt-dlp-complete-guide
https://github.com/yt-dlp/yt-dlp-wiki/blob/master/Installation.md
Last updated