Formato WebM: Guía Técnica Completa
WebM es un formato de contenedor multimedia abierto y libre de regalías desarrollado por Google y publicado en 2010 como parte del Proyecto WebM. Es un subconjunto restringido del contenedor Matroska (MKV), soportando solo códecs abiertos específicos: VP8, VP9 o AV1 para vídeo, y Vorbis u Opus para audio. WebM fue diseñado específicamente para la entrega de vídeo web — es el formato nativo para el elemento HTML5 <video> con códecs abiertos en Chrome, Firefox y Edge.
WebM vs MKV: La Relación
| Característica | WebM | MKV (Matroska) |
|---|---|---|
| Formato contenedor | MKV restringido | Matroska EBML completo |
| Códecs de vídeo permitidos | Solo VP8, VP9, AV1 | Cualquier códec (H.264, H.265, AV1, etc.) |
| Códecs de audio permitidos | Solo Vorbis, Opus | Cualquier códec (AAC, MP3, FLAC, etc.) |
| Formatos de subtítulos | Solo WebVTT | ASS, SSA, SRT, PGS, etc. |
| Capítulos | No | Sí |
| Adjuntos | No | Sí (fuentes, carátulas) |
| Caso de uso | Streaming web | Archivado multimedia general |
| Extensión | .webm |
.mkv |
Un archivo WebM es un archivo MKV válido (los reproductores Matroska pueden abrir WebM), pero no todos los archivos MKV son WebM válidos.
Elementos Clave EBML
WebM hereda la codificación EBML de Matroska:
Segment: Contenedor raíz para todo el contenido real
SeekHead: Índice de elementos de nivel superior con desplazamientos de bytes, permitiendo acceso aleatorio O(1)
Tracks: Un TrackEntry por pista de medios:
CodecID:V_VP8,V_VP9,V_AV1,A_VORBIS,A_OPUS- Elemento
Video:PixelWidth,PixelHeight,DisplayWidth,DisplayHeight,FrameRate - Elemento
Audio:SamplingFrequency,Channels
Cues: Índice de fotogramas clave requerido para acceso aleatorio eficiente
Cluster: Grupo de bloques con marca de tiempo. Generalmente comienza en un fotograma clave y cubre un rango de tiempo fijo (1–4 segundos).
Comandos de Codificación
# VP9 en WebM (2 pasadas, alta calidad)
ffmpeg -i entrada.mp4 -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an -f null /dev/null
ffmpeg -i entrada.mp4 -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 -c:a libopus -b:a 128k salida.webm
# VP9 de una sola pasada (más rápido)
ffmpeg -i entrada.mp4 -c:v libvpx-vp9 -crf 33 -b:v 0 -c:a libopus -b:a 128k salida.webm
# AV1 en WebM (libaom-av1, lento pero mejor calidad)
ffmpeg -i entrada.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -c:a libopus -b:a 128k salida.webm
# AV1 con SVT-AV1 (codificador más rápido)
ffmpeg -i entrada.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a libopus -b:a 128k salida.webm
# WebM con canal alfa (vídeo transparente)
ffmpeg -i entrada_rgb.mp4 -i mascara_alfa.mp4 -filter_complex "[0:v][1:v]alphamerge" \
-c:v libvpx-vp9 -b:v 0 -crf 30 salida.webm
# Convertir WebM a MP4 H.264 para máxima compatibilidad
ffmpeg -i entrada.webm -c:v libx264 -crf 22 -c:a aac -b:a 192k salida.mp4
# Conversión masiva MP4 a WebM VP9
for f in *.mp4; do
ffmpeg -i "$f" -c:v libvpx-vp9 -crf 33 -b:v 0 -c:a libopus -b:a 128k "${f%.mp4}.webm"
done
Soporte en Navegadores
| Navegador | VP8 | VP9 | AV1 |
|---|---|---|---|
| Chrome | ✓ | ✓ | ✓ (Chrome 70+) |
| Firefox | ✓ | ✓ | ✓ (Firefox 67+) |
| Edge (Chromium) | ✓ | ✓ | ✓ |
| Safari | ✗ | ✗ | ✓ (Safari 17+) |
| iOS Safari | ✗ | ✗ | Parcial (iOS 17+) |
La falta de soporte de VP8/VP9 en Safari ha sido históricamente la principal debilidad de WebM. El soporte de AV1 en Safari 17 (2023) cambia el panorama para AV1-en-WebM pero VP8/VP9 siguen sin soporte en todas las versiones de Safari.
Casos de Uso
- Vídeo HTML5 sin regalías: WebM VP9 o AV1 para contenido
<video>en sitios web - Streaming de YouTube: Segmentos DASH VP9 y AV1 para Chrome/Firefox/Edge
- Vídeo WebRTC: VP8 es obligatorio en WebRTC; VP9 y AV1 son soportados en implementaciones modernas
- Animación web transparente: Canal alfa VP9 como alternativa a GIFs animados o APNG
- Discord, Telegram: Stickers animados en formato WebM VP8/VP9
Conversiones relacionadas
Conversiones de vídeo que encajan con esta guía: