FFmpeg es ampliamente conocido como una herramienta "gratuita". Pero en el momento en que intentas usarlo comercialmente, las cosas se complican significativamente.
"¿Qué es LGPL?" "¿Necesito pagar licencias de patentes por H.264?" "¿Puedo integrarlo en un producto SaaS?" — las respuestas a estas preguntas están dispersas e inconsistentes en internet.
Este artículo desglosa el panorama completo de las licencias de FFmpeg para que puedas tomar decisiones informadas para uso comercial. Incluye instrucciones de compilación paso a paso para binarios redistribuibles en Windows, macOS y Linux.
FFmpeg es "gratuito" pero no "sin restricciones"
FFmpeg es software de código abierto con código fuente disponible públicamente. "Gratuito" en el sentido de costo — sí. "Libre de usar como quieras" — esa es una pregunta diferente.
FFmpeg es una colección de bibliotecas, cada una con su propia licencia.
| Biblioteca | Propósito | Licencia por defecto |
|---|---|---|
| libavcodec | Codificación y decodificación | LGPL 2.1 o posterior |
| libavformat | E/S de contenedores | LGPL 2.1 o posterior |
| libavfilter | Procesamiento de filtros | LGPL 2.1 o posterior |
| libswscale | Escalado | LGPL 2.1 o posterior |
| libswresample | Remuestreo de audio | LGPL 2.1 o posterior |
| libpostproc | Post-procesamiento | GPL 2 o posterior |
La frase "licencia por defecto" es clave. Dependiendo de las opciones de compilación, la licencia puede cambiar de LGPL a GPL. Este es el núcleo de la complejidad de las licencias de FFmpeg.
Por separado de la licencia, los problemas de patentes también existen. Usar H.264 o H.265 puede requerir licenciamiento de patentes de organizaciones como Via Licensing Alliance (Via LA) — completamente independiente de la licencia de código abierto de FFmpeg.
LGPL vs GPL: ¿Cuál es la diferencia?
LGPL y GPL son ambas licencias de software libre, pero sus implicaciones para uso comercial difieren significativamente.
LGPL (Lesser GPL):
LGPL se llama "copyleft débil". Cuando enlazas las bibliotecas LGPL de FFmpeg en tu aplicación usando enlace dinámico, no estás obligado a publicar el código fuente de tu aplicación. Sin embargo, debes cumplir estas condiciones:
- Proporcionar una forma para que los usuarios reemplacen la porción de la biblioteca FFmpeg
- Mostrar el texto completo de la licencia de FFmpeg y la atribución
- Publicar el código fuente de cualquier modificación que hayas hecho a FFmpeg
El enlace estático también es posible bajo LGPL, pero debes proporcionar los archivos objeto o el código fuente necesarios para que el usuario pueda re-enlazar contra una versión modificada de FFmpeg (LGPL 2.1, Sección 6). El enlace dinámico es más simple en la práctica.
GPL (General Public License):
GPL es "copyleft fuerte". Incorporar código licenciado bajo GPL en tu aplicación hace que toda la aplicación sea GPL. Esto significa que debes publicar el código fuente de tu aplicación bajo la GPL.
Para software comercial propietario, esto es a menudo una restricción fatal — la mayoría de los modelos de negocio dependen de mantener el código fuente privado.
Lista completa de opciones que activan GPL
Las siguientes opciones de configuración habilitan código bajo GPL o licencias más restrictivas.
Opciones que habilitan GPL
| Opción | Qué incluye | Notas |
|---|---|---|
--enable-gpl | x264, x265, xvid, etc. | Este flag por sí solo declara GPL |
--enable-libx264 | Codificador H.264 (x264) | GPL 2 o posterior |
--enable-libx265 | Codificador H.265 (x265) | GPL 2 o posterior |
--enable-libxvid | Codificador MPEG-4 | GPL 2 o posterior |
--enable-frei0r | Plugins de filtros de video | GPL 2 o posterior |
--enable-librubberband | Cambio de tono/tempo | GPL 2 o posterior |
--enable-libvidstab | Estabilización de video | GPL 2 o posterior |
Opciones de licencia no libre (--enable-nonfree)
| Opción | Qué incluye | Notas |
|---|---|---|
--enable-libfdk-aac | Codificador FDK-AAC | Restricciones de redistribución |
--enable-openssl | Soporte HTTPS | Apache/SSLeay, comercialmente OK |
Una compilación con --enable-nonfree no puede redistribuirse en absoluto. Usarla en tu propio servidor está bien, pero distribuir el binario a otros no lo está.
Cómo verificar la licencia de una compilación
ffmpeg -version
Busca la línea License: en la salida.
# Ejemplo de compilación LGPL
License: LGPL version 2.1 or later
# Ejemplo de compilación GPL
License: GPL version 2 or later
La trampa de las patentes: H.264 y H.265
Completamente separado de la licencia de código abierto de FFmpeg, las patentes de códecs son su propio problema.
Estado de patentes de H.264 (AVC):
Via Licensing Alliance (Via LA) — formada en 2023 por la fusión de MPEG LA y Via Licensing — gestiona el pool de patentes. Usar H.264 en productos puede requerir tarifas de licencia dependiendo del volumen y caso de uso. La mayoría de las patentes principales de H.264 en EE.UU. están programadas para expirar alrededor de 2027 (por ejemplo, US 7826532 expira el 29 de noviembre de 2027), pero algunas patentes otorgadas recientemente en 2016 pueden permanecer activas hasta 2030 o más tarde. La fecha exacta en que H.264 quedará completamente libre de patentes en EE.UU. aún no está definida.
OpenH264 (una solución a las patentes): La implementación OpenH264 de Cisco es un codificador/decodificador H.264 donde Cisco paga las regalías de Via LA (anteriormente MPEG LA) en nombre de todos los usuarios. Se puede habilitar con --enable-libopenh264 y es compatible con compilaciones LGPL. Si necesitas H.264 en un producto comercial pero quieres evitar las tarifas de patentes, esta es una opción viable.
Estado de patentes de H.265 (HEVC):
Más complejo que H.264. Existen múltiples pools de patentes (Access Advance, Via Licensing, Velos Media), cada uno potencialmente requiriendo licencias separadas. Las patentes se extienden bien más allá de 2030. El uso comercial requiere precaución particular.
Casos del mundo real
- VideoLAN (VLC): Enfrentó litigios por patentes en Francia de titulares de patentes H.264. Se resolvió, pero es un ejemplo bien conocido del riesgo real
- Servicios de streaming: Múltiples servicios importantes fueron contactados por HEVC Advance para tarifas de licenciamiento H.265
- Violaciones de GPL: Múltiples proveedores han integrado compilaciones GPL de FFmpeg en software propietario sin revelar el código fuente, y fueron señalados por la comunidad
Lecciones clave: Siempre incluye la atribución de licencia. Nunca integres una compilación GPL en software de código cerrado. Trata las patentes de códecs como un tema separado de la licencia de FFmpeg.
Códecs seguros
| Códec | Licencia | Caso de uso | Riesgo de patentes |
|---|---|---|---|
| AV1 (libaom / libdav1d) | Estilo BSD | Video (próxima generación) | Declaración libre de regalías |
| VP8 / VP9 (libvpx) | BSD | Video (web) | Promesa de patentes de Google |
| Opus (libopus) | BSD | Audio | Libre de regalías |
| Vorbis (libvorbis) | BSD | Audio (legacy) | Libre de regalías |
| OpenH264 | BSD | Video (compatible con H.264) | Cisco paga las regalías |
| H.264 (x264) | GPL | Video | Patentado (mayoría expira ~2027, algunas ~2030) |
| H.265 (x265) | GPL | Video | Patentado (hasta ~2030+) |
Compilación de FFmpeg redistribuible
El principio guía: mantente dentro de LGPL. Simplemente no pases --enable-gpl ni --enable-nonfree — GPL está deshabilitado por defecto.
Opciones de configuración
Aquí hay un ejemplo de configuración compatible con LGPL con solo códecs libres de patentes. GPL está deshabilitado por defecto — simplemente no pases --enable-gpl y tu compilación se mantiene en LGPL (no existe un flag --disable-gpl).
./configure \
--prefix=/usr/local \
--disable-nonfree \
--enable-shared \
--disable-static \
--enable-libvorbis \
--enable-libopus \
--enable-libvpx \
--enable-libdav1d \
--enable-libaom \
--enable-libwebp \
--disable-libx264 \
--disable-libx265 \
--disable-libmp3lame \
--disable-libfdk-aac
| Opción | Efecto |
|---|---|
--disable-nonfree | Excluir código propietario no redistribuible |
--enable-shared | Compilar como bibliotecas compartidas (camino más simple para cumplir con LGPL) |
--disable-static | No compilar archivos estáticos |
--disable-libx264 etc. | Excluir códecs con patentes |
--enable-libvpx etc. | Habilitar códecs libres de patentes |
Configuración del entorno de compilación
En Windows, usa el entorno MSYS2 UCRT64. UCRT64 es el entorno MSYS2 recomendado, que usa el Universal C Runtime moderno de Microsoft.
1. Instala MSYS2
Descarga el instalador desde msys2.org e instala con la configuración por defecto (ruta recomendada: C:\msys64).
2. Actualiza los paquetes
Abre MSYS2 UCRT64 y ejecuta:
pacman -Syu
Cierra y vuelve a abrir, luego termina de actualizar:
pacman -Su
3. Instala herramientas de compilación y dependencias
pacman -S \
mingw-w64-ucrt-x86_64-toolchain \
base-devel git make nasm pkg-config \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-libvpx \
mingw-w64-ucrt-x86_64-opus \
mingw-w64-ucrt-x86_64-libvorbis \
mingw-w64-ucrt-x86_64-dav1d \
mingw-w64-ucrt-x86_64-aom \
mingw-w64-ucrt-x86_64-libwebp
4. Configura las variables de entorno
export PATH=/ucrt64/bin:$PATH
echo 'export PATH=/ucrt64/bin:$PATH' >> ~/.bashrc
5. Clona y compila
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout n8.0.1
./configure \
--prefix=/usr/local \
--disable-nonfree \
--enable-shared --disable-static \
--enable-libvpx --enable-libopus --enable-libvorbis \
--enable-libdav1d --enable-libaom --enable-libwebp
make -j$(nproc)
make install
No se necesita sudo en Windows. La compilación produce archivos DLL. Al redistribuir, empaqueta las DLL necesarias junto con ffmpeg.exe. Verifica las DLL faltantes con ldd ffmpeg.exe.
Verificación de la compilación
ffmpeg -version
Confirma que la línea License: dice LGPL version 2.1 or later. Verifica que --enable-gpl NO esté en la línea configuration:, y que libx264, libfdk_aac y similares NO estén listados.
Lista de verificación para redistribución
Antes de distribuir tu compilación:
ffmpeg -versionmuestraLicense: LGPL version 2.1 or later--enable-gplNO está en la líneaconfiguration:- No hay códecs con patentes habilitados (x264, x265, mp3lame, fdk-aac)
COPYING.LGPLv2.1está incluido en tu distribución- La documentación indica que tu producto usa FFmpeg bajo LGPL
- FFmpeg se distribuye como bibliotecas compartidas (DLL / .so / .dylib), o si se enlaza estáticamente, proporcionas los archivos objeto para re-enlazar
Empaquetado y CI/CD
Métodos prácticos para distribuir y mantener tu compilación de FFmpeg.
tar.gz (el más simple)
./configure --prefix=$(pwd)/bundle \
--disable-nonfree \
--enable-shared --disable-static \
--enable-libvpx --enable-libopus
make -j$(nproc)
make install
cp COPYING.LGPLv2.1 bundle/
tar czf ffmpeg-lgpl-linux-x64.tar.gz bundle/
Docker para compilaciones reproducibles
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
build-essential nasm pkg-config git \
libvpx-dev libopus-dev libvorbis-dev \
libdav1d-dev libaom-dev libwebp-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
RUN git clone https://git.ffmpeg.org/ffmpeg.git && \
cd ffmpeg && git checkout n8.0.1 && \
./configure \
--prefix=/usr/local \
--disable-nonfree \
--enable-shared --disable-static \
--enable-libvpx --enable-libopus \
--enable-libdav1d --enable-libaom && \
make -j$(nproc) && \
make install && ldconfig
CMD ["ffmpeg", "-version"]
GitHub Actions
name: Build FFmpeg (LGPL)
on:
push:
branches: [main]
schedule:
- cron: '0 0 1 * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y nasm build-essential pkg-config git \
libvpx-dev libopus-dev libvorbis-dev \
libdav1d-dev libaom-dev libwebp-dev
- name: Build FFmpeg
run: |
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg && git checkout n8.0.1
./configure --prefix=$(pwd)/bundle \
--disable-nonfree \
--enable-shared --disable-static \
--enable-libvpx --enable-libopus \
--enable-libdav1d --enable-libaom
make -j$(nproc)
make install
cp COPYING.LGPLv2.1 bundle/
- uses: actions/upload-artifact@v4
with:
name: ffmpeg-lgpl-build
path: ffmpeg/bundle/
Automatizar tu compilación con GitHub Actions o Docker asegura que puedas reconstruir rápidamente cuando se publiquen parches de seguridad de FFmpeg.
Preguntas frecuentes
¿Puedo usar FFmpeg en un producto SaaS?
Si ejecutas una compilación LGPL de FFmpeg en tu servidor y lo ofreces como servicio, no estás obligado a publicar el código fuente de tu aplicación. El concepto de "enlace" de LGPL se refiere a la distribución de software — operar un servicio SaaS no es distribuir la biblioteca.
Aún necesitas mostrar la atribución LGPL de FFmpeg (por ejemplo, en una página de Acerca de o Licencias) y documentar la versión y los componentes que usas.
¿Qué pasa si solo ejecuto FFmpeg en el servidor?
Si ejecutas FFmpeg en tu servidor sin distribuir el binario, usar una compilación GPL generalmente no activa la obligación de revelar el código fuente — la "laguna ASP". La excepción es el código licenciado bajo AGPL, que cierra esta laguna.
¿Quién posee el copyright de los archivos de salida?
Tú. FFmpeg es una herramienta. El copyright de la salida pertenece a quien creó el contenido.
¿Es realmente seguro AV1 + Opus + WebM?
AV1 está declarado como libre de regalías por la Alliance for Open Media, respaldada por Google, Mozilla, Amazon, Netflix y otros. Sisvel ha formado un pool de patentes de AV1, pero los miembros de AOM no lo reconocen, y a partir de 2026, ningún usuario de software ha sido perseguido. Es la combinación más segura disponible hoy.
Conclusión
Puntos clave para el uso comercial seguro de FFmpeg:
Licencias:
- No pases
--enable-gplni--enable-nonfree(GPL está desactivado por defecto) - Las compilaciones LGPL pueden integrarse en SaaS y aplicaciones comerciales sin revelar el código fuente
- Siempre incluye la atribución de licencia
- Verifica con
ffmpeg -version
Selección de códecs:
- AV1 + Opus + WebM es la opción más segura (libre de patentes)
- Si necesitas H.264, considera OpenH264 (Cisco paga las regalías)
- Para H.264/H.265, investiga la situación de patentes por separado
- Consulta la comparación de AV1 vs H.265 vs H.264 para más detalles
Compilación y distribución:
./configure --disable-nonfree --enable-sharedes la base para todas las plataformas (sin--enable-gpl)- Distribuye como bibliotecas compartidas (DLL / .so / .dylib), o proporciona archivos objeto para re-enlazar si se enlaza estáticamente
- Siempre incluye
COPYING.LGPLv2.1 - Automatiza con Docker / GitHub Actions para un mantenimiento más fácil
Ante la duda, consulta a un abogado de propiedad intelectual. FFmpeg es una herramienta poderosa, pero tratarlo como "libre para usar como quieras" es el error de mayor riesgo que puedes cometer.