32blogby StudioMitsu

Guía completa de licencias de FFmpeg para uso comercial

Todo lo que necesitas saber sobre las licencias de FFmpeg para uso comercial. LGPL vs GPL, riesgos de patentes de códecs y guía completa de compilación para binarios redistribuibles.

14 min read
FFmpegLGPLlicensecommercialbuild
Contenido

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.

BibliotecaPropósitoLicencia por defecto
libavcodecCodificación y decodificaciónLGPL 2.1 o posterior
libavformatE/S de contenedoresLGPL 2.1 o posterior
libavfilterProcesamiento de filtrosLGPL 2.1 o posterior
libswscaleEscaladoLGPL 2.1 o posterior
libswresampleRemuestreo de audioLGPL 2.1 o posterior
libpostprocPost-procesamientoGPL 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ónQué incluyeNotas
--enable-gplx264, x265, xvid, etc.Este flag por sí solo declara GPL
--enable-libx264Codificador H.264 (x264)GPL 2 o posterior
--enable-libx265Codificador H.265 (x265)GPL 2 o posterior
--enable-libxvidCodificador MPEG-4GPL 2 o posterior
--enable-frei0rPlugins de filtros de videoGPL 2 o posterior
--enable-librubberbandCambio de tono/tempoGPL 2 o posterior
--enable-libvidstabEstabilización de videoGPL 2 o posterior

Opciones de licencia no libre (--enable-nonfree)

OpciónQué incluyeNotas
--enable-libfdk-aacCodificador FDK-AACRestricciones de redistribución
--enable-opensslSoporte HTTPSApache/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

bash
ffmpeg -version

Busca la línea License: en la salida.

text
# 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ódecLicenciaCaso de usoRiesgo de patentes
AV1 (libaom / libdav1d)Estilo BSDVideo (próxima generación)Declaración libre de regalías
VP8 / VP9 (libvpx)BSDVideo (web)Promesa de patentes de Google
Opus (libopus)BSDAudioLibre de regalías
Vorbis (libvorbis)BSDAudio (legacy)Libre de regalías
OpenH264BSDVideo (compatible con H.264)Cisco paga las regalías
H.264 (x264)GPLVideoPatentado (mayoría expira ~2027, algunas ~2030)
H.265 (x265)GPLVideoPatentado (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).

bash
./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ónEfecto
--disable-nonfreeExcluir código propietario no redistribuible
--enable-sharedCompilar como bibliotecas compartidas (camino más simple para cumplir con LGPL)
--disable-staticNo 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:

bash
pacman -Syu

Cierra y vuelve a abrir, luego termina de actualizar:

bash
pacman -Su

3. Instala herramientas de compilación y dependencias

bash
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

bash
export PATH=/ucrt64/bin:$PATH
echo 'export PATH=/ucrt64/bin:$PATH' >> ~/.bashrc

5. Clona y compila

bash
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

bash
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 -version muestra License: LGPL version 2.1 or later
  • --enable-gpl NO está en la línea configuration:
  • No hay códecs con patentes habilitados (x264, x265, mp3lame, fdk-aac)
  • COPYING.LGPLv2.1 está 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)

bash
./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

dockerfile
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

yaml
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.

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-gpl ni --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-shared es 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.