⏱️ Lectura: 16 min

Grabá cinco segundos de video en 1080p a 60 cuadros por segundo sin comprimir nada y el archivo pesa casi 2 GB. El mismo clip codificado con el códec H.264 pesa 175 KB, 1500 veces menos que una sola captura en PNG de esos mismos píxeles.

📑 En este artículo
  1. TL;DR
  2. ¿Qué es el códec H.264?
  3. Por qué importa un estándar de video de 2003
  4. Cómo funciona por dentro: predicción, frecuencia y entropía
    1. Predicción entre cuadros: solo codificar lo que cambió
    2. El dominio de frecuencia: la transformada discreta de coseno
    3. Cuantización: decidir qué detalle se descarta
    4. Codificación entrópica: CABAC y CAVLC
  5. Ejemplos prácticos y cómo empezar
  6. Casos de uso reales de H.264
  7. Errores comunes y buenas prácticas con H.264
  8. Comparativa: H.264 frente a otros códecs de video
  9. Profundizando: macrobloques, perfiles y el filtro de desbloqueo
  10. Preguntas frecuentes
    1. ¿Qué significa AVC en H.264?
    2. ¿H.264 tiene costo de licencia?
    3. ¿Qué diferencia a H.264 de H.265/HEVC?
    4. ¿Por qué YouTube usa VP9 o AV1 en vez de H.264?
    5. ¿Qué es un perfil Baseline en H.264?
  11. Referencias
    1. 📚 Artículos relacionados

Esa diferencia no es casualidad: es el resultado de encadenar tres técnicas de compresión que atacan tipos distintos de redundancia en la imagen, y entender cómo se combinan explica por qué Netflix, los Blu-ray, tu celular y hasta una cámara de seguridad todavía dependen de un estándar firmado en 2003.

TL;DR

  • El códec H.264 comprime un video de 300 cuadros a 175 KB: 1500 veces menos que una sola captura PNG de esos píxeles.
  • La predicción entre cuadros evita repetir píxeles que no cambiaron de un frame al siguiente.
  • Dividir cada bloque en frecuencias con la DCT permite descartar el detalle que el ojo humano no percibe.
  • Cuantización y CABAC comprimen lo que queda del bloque sin inventar ni repetir información.
  • FFmpeg codifica y mide el tamaño real de un video H.264 con un solo comando en Windows, macOS o Linux.

¿Qué es el códec H.264?

H.264 es un códec de compresión de video con pérdida, estandarizado en 2003 por ITU-T y MPEG como MPEG-4 Parte 10 (AVC). Reduce el tamaño de un video eliminando detalle imperceptible y redundancia entre cuadros, y es el formato detrás de la mayoría del streaming y las cámaras de seguridad actuales.

La idea central se explica con una analogía: pensá en armar un auto para carreras de arrancones. Para ganar velocidad le sacás todo lo que no aporta a correr, los asientos traseros, el subwoofer, el aire acondicionado. Te quedás solo con lo que importa, y el auto pesa una fracción de lo original.

Eso es compresión con pérdida (lossy): descartar información que no hace falta para que el resultado final siga siendo útil. Un formato sin pérdida como PNG, en cambio, guarda cada bit original y permite reconstruir la imagen exacta, pero paga con un archivo mucho más pesado. H.264 elige la ruta contraria: bit por bit decide qué tirar.

Un macrobloque de H.264 mide 16×16 píxeles y puede partirse hasta en bloques de 4×4. Foto de Trnava University en Unsplash

Por qué importa un estándar de video de 2003

Sin compresión, el video es imposible de manejar. Una señal de 1080p a 60 Hz sin comprimir ocupa cerca de 370 MB por segundo (1920 x 1080 píxeles x 60 cuadros x 3 bytes de color). Un disco Blu-ray de 50 GB alcanzaría para menos de dos minutos de metraje crudo, y ni los discos de estado sólido actuales sostienen ese ritmo de escritura sin tropezar.

Por eso el códec H.264 sigue siendo, más de veinte años después de su publicación, el formato que corre en streaming de internet, discos Blu-ray, cámaras de teléfono, cámaras de seguridad y drones. Casi ninguna industria de video lo dejó atrás del todo, y hasta los estándares más nuevos lo usan como punto de comparación obligado.

Cómo funciona por dentro: predicción, frecuencia y entropía

El códec H.264 no usa un solo truco para bajar de peso. Combina tres capas independientes, cada una exprimiendo un tipo distinto de redundancia: la que existe entre un cuadro y el siguiente, la que existe dentro de un mismo cuadro, y la que sobra después de las dos anteriores en forma de patrones estadísticos.

flowchart LR
A["Cuadro original"] --> B["Prediccion (I/P/B)"]
B --> C["Residuo"]
C --> D["DCT por bloque"]
D --> E["Cuantizacion"]
E --> F["CABAC o CAVLC"]
F --> G["Bitstream H.264"]

Predicción entre cuadros: solo codificar lo que cambió

La mayoría de los cuadros de un video se parecen mucho al anterior. Si una cámara fija graba una oficina vacía, el escritorio y la pared ocupan los mismos píxeles cuadro tras cuadro. En vez de guardar esa imagen de nuevo, H.264 guarda apenas la diferencia respecto al cuadro de referencia, una técnica llamada compensación de movimiento.

Para esto, el estándar define tres tipos de cuadro. Los cuadros I (intra) se codifican completos, sin mirar a otros cuadros, y sirven como punto de referencia. Los cuadros P (predictivos) solo guardan qué cambió respecto a un cuadro anterior. Los cuadros B (bidireccionales) predicen usando un cuadro anterior y uno posterior al mismo tiempo, lo que exige que el decodificador reciba los cuadros fuera de orden.

Un grupo de cuadros que arranca en un I y encadena P y B hasta el siguiente I se llama GOP (group of pictures). Cuanto más largo el GOP, más barato sale el video en promedio, pero también más caro sale saltar a la mitad, porque el reproductor tiene que ir hasta el último cuadro I y reconstruir todo el camino hasta el punto pedido.

flowchart LR
I1["Cuadro I1"] --> P1["Cuadro P1"]
I1 --> B1["Cuadro B1"]
P1 --> B1
P1 --> I2["Cuadro I2 (nuevo GOP)"]

El dominio de frecuencia: la transformada discreta de coseno

Después de la predicción queda un residuo: la parte de la imagen que no se pudo adivinar. Ese residuo todavía tiene redundancia, pero de un tipo distinto, oculta en cómo varía el brillo dentro de un bloque de píxeles. Para exponerla, H.264 divide el cuadro en bloques (de 4×4 a 16×16 píxeles) y aplica a cada uno una transformada discreta de coseno (DCT), parecida a la que usa JPEG.

La DCT no cambia la información, la reorganiza. En vez de describir el bloque píxel por píxel, lo describe como una combinación de patrones de frecuencia: cuánto hay de variación lenta (zonas planas de color) y cuánto hay de variación rápida (bordes y textura fina). El ojo humano es mucho más sensible a la variación lenta, y ahí está la clave del siguiente paso.

Cuantización: decidir qué detalle se descarta

Una vez que el bloque está expresado en frecuencias, la cuantización redondea los valores de alta frecuencia hacia cero, y muchos terminan siendo exactamente cero. Son las rejillas de un speaker, el ruido fino de una textura, detalles que casi nadie nota si desaparecen pero que en una imagen sin comprimir ocupan tanto espacio como el resto del bloque.

💡 Tip: al codificar con FFmpeg, el parámetro CRF controla justamente esta agresividad de cuantización: valores bajos (18-20) conservan casi todo el detalle, valores altos (28 o más) sacrifican más frecuencia a cambio de un archivo liviano.

Cuanto más agresiva la cuantización, más ceros aparecen y más liviano queda el archivo, pero también más visible se vuelve la pérdida, con bloques borrosos, bordes con halo y textura que se derrite. Encontrar el punto justo entre peso y calidad es, en la práctica, el trabajo central de cualquier persona que configura un pipeline de video.

Codificación entrópica: CABAC y CAVLC

Lo último que hace el códec es tomar esa secuencia de números (muchos ceros, algunos valores pequeños) y comprimirla sin perder nada más, usando codificación entrópica. El estándar define dos métodos: CAVLC, más simple y rápido, y CABAC (codificación aritmética binaria adaptable al contexto), que comprime mejor pero exige más cómputo para decodificar.

CABAC es el motor que de verdad explica buena parte de la ganancia final: en vez de asignarle a cada símbolo un número fijo de bits, ajusta la probabilidad de cada símbolo según el contexto de los símbolos anteriores. Es la misma idea detrás de describir diez tiros de moneda como «10 tiros, todos cara» en lugar de escribir cada resultado uno por uno.

Ejemplos prácticos y cómo empezar

Todo lo anterior se puede ver en acción con una sola herramienta: FFmpeg, el conversor de video de línea de comandos que usan desde YouTube hasta proyectos personales. Antes de los comandos, instalalo según tu sistema. En Debian o Ubuntu:

sudo apt update && sudo apt install -y ffmpeg

En macOS con Homebrew es brew install ffmpeg, y en Windows con winget es winget install ffmpeg. Con eso instalado, probá primero el caso más simple: convertir un video existente a H.264 controlando la cuantización con CRF.

ffmpeg -i entrada.mov -c:v libx264 -crf 23 -preset medium salida.mp4

Este comando toma entrada.mov (cualquier video que tengas a mano) y lo recodifica con libx264, la implementación de software de H.264 que trae FFmpeg. -crf 23 es el valor por defecto, un balance razonable entre peso y calidad, y -preset medium controla cuánto tiempo de cómputo invertir buscando mejores predicciones. Al terminar, FFmpeg imprime un resumen como este:

frame=  300 fps= 45 q=-1.0 Lsize=     612kB time=00:00:05.00 bitrate= 1003.0kbits/s
video:598kB audio:10kB subtitle:0kB muxing overhead: 0.588603%

El dato que importa es Lsize, el tamaño final del archivo codificado. Para ver qué tipo de cuadro (I, P o B) le tocó a cada uno, FFmpeg trae ffprobe:

ffprobe -v error -select_streams v:0 -show_entries frame=pict_type -of csv salida.mp4 | head

La salida es una lista de letras, una por cuadro, en el mismo orden en que quedaron en el archivo:

I
P
P
B
P
P
B
P

Ese patrón, un I seguido de una mezcla de P y B, es la prueba directa de todo lo explicado arriba: el primer cuadro se codifica entero, y el resto se describe como diferencia respecto a sus vecinos.

Casos de uso reales de H.264

El streaming de video bajo demanda es el caso más visible, pero lejos del único. Los discos Blu-ray estandarizaron H.264 (junto a VC-1) como codec principal desde su lanzamiento. Las videollamadas también dependen de variantes de bajo retardo del mismo estándar, con GOPs cortos para minimizar la demora entre que algo pasa frente a la cámara y aparece en la pantalla del otro lado.

Las cámaras de seguridad son otro caso de uso enorme y poco discutido: graban 24 horas por día, con escenas casi estáticas (ideales para la predicción entre cuadros) y necesitan guardar semanas de metraje en discos que no son infinitos. Los drones enfrentan el problema inverso, transmitir video en vivo por un enlace de radio con ancho de banda limitado, y usan perfiles optimizados para baja latencia antes que para máxima calidad.

Los perfiles Baseline, Main y High de H.264 habilitan distintas combinaciones de B-frames y CABAC. Foto de CDC en Unsplash

Errores comunes y buenas prácticas con H.264

El error más común es elegir un CRF a ciegas. Un CRF demasiado bajo (por debajo de 18) rara vez se nota a simple vista pero duplica o triplica el peso del archivo sin necesidad; uno demasiado alto (arriba de 30) introduce bloques visibles en escenas con movimiento. Lo razonable es probar con tu propio contenido: 18 a 23 para archivo de referencia, 23 a 28 para distribución general.

Otro error frecuente es ignorar el intervalo entre cuadros I (keyframe interval). Un GOP muy largo ahorra espacio pero hace que buscar un punto específico del video tarde más, porque el reproductor tiene que reconstruir todo el camino desde el último cuadro I. Para video que se va a reproducir con control de avance, un GOP de 2 a 4 segundos suele ser el punto justo.

El tercer error es no fijarse en el perfil. H.264 define perfiles Baseline, Main y High, con distinto soporte de funciones avanzadas como B-frames y CABAC. Un video codificado en perfil High no siempre reproduce en hardware viejo o económico, ciertos navegadores embebidos o decodificadores de bajo costo solo soportan Baseline. Si el destino es un dispositivo desconocido, declarar explícitamente el perfil evita sorpresas.

⚠️ Ojo: los B-frames mejoran la compresión pero agregan latencia, porque el codificador necesita ver cuadros futuros antes de terminar uno presente. Para videollamadas o streaming en vivo de baja latencia, muchos encoders desactivan B-frames por completo.

Comparativa: H.264 frente a otros códecs de video

Códec Cuándo usarlo Ventaja Limitación
H.264 / AVC Compatibilidad máxima, hardware antiguo Soporte universal, decodificación barata en casi cualquier dispositivo Menos eficiente que los códecs más nuevos en bits por calidad
H.265 / HEVC 4K/HDR donde el hardware ya lo soporta Mejor calidad al mismo peso que H.264 Licenciamiento de patentes más complejo, adopción web limitada
VP9 YouTube y web cuando se evita pagar regalías Libre de regalías, buen soporte en navegadores Codificación más lenta que H.264
AV1 Streaming nuevo en dispositivos recientes Libre de regalías, mejor compresión que H.264 y HEVC Decodificación por software todavía pesa más CPU en hardware viejo

La razón por la que el códec H.264 sigue dominando no es que sea el más eficiente, es que ya está en todas partes, en cada navegador, cada smart TV y cada chip de cámara con un decodificador de hardware desde hace más de una década. HEVC y AV1 comprimen mejor, pero todavía están llenando ese mismo terreno dispositivo por dispositivo.

Profundizando: macrobloques, perfiles y el filtro de desbloqueo

La unidad básica de trabajo de H.264 es el macrobloque, un cuadrado de 16×16 píxeles. El estándar no obliga a tratarlo como un bloque único: cada macrobloque puede partirse en particiones de 16×8, 8×16 u 8×8, y cada partición de 8×8 puede partirse a su vez en sub-particiones de hasta 4×4. Cuanto más pequeña la partición, más preciso el movimiento que puede describir, a costa de más bits para describir la partición misma.

flowchart TD
A["Macrobloque 16x16"] --> B["Particion 16x8 u 8x16"]
A --> C["Particion 8x8"]
C --> D["Sub-particion 8x4, 4x8 o 4x4"]

Esa granularidad le permite al codificador tratar distinto una pared lisa (un solo bloque de 16×16 alcanza) y el borde de una persona moviéndose, donde conviene bajar a 4×4 para no perder definición. La decisión de qué partición usar en cada macrobloque es, en la práctica, uno de los costos de cómputo más altos del proceso de codificación.

Después de decodificar un cuadro, H.264 aplica todavía un filtro de desbloqueo (deblocking filter) para suavizar los bordes entre macrobloques, que de otro modo quedarían visibles como una cuadrícula. Es un paso obligatorio del estándar, y es parte de por qué el video comprimido se ve más suave de lo que la pura matemática del bloque por bloque sugeriría.

Los perfiles (Baseline, Main, High y sus variantes) determinan qué combinación de estas herramientas está disponible. Baseline, pensado para videollamadas y hardware limitado, no incluye B-frames ni CABAC. High, el más usado en streaming y Blu-ray, suma ambos y es el que de verdad se acerca al límite de compresión que el estándar permite.

📖 Resumen en Telegram: Ver resumen

Tu próximo paso: tomá cualquier video que tengas en el teléfono, corré ffmpeg -i tuvideo.mp4 -c:v libx264 -crf 28 salida.mp4 y compará el peso del archivo final contra el original.

📬 Recibí lo nuevo en tu email

Te avisamos de artículos grandes (1-2 por mes).

Preguntas frecuentes

¿Qué significa AVC en H.264?

AVC es la sigla de Advanced Video Coding, el nombre técnico con el que ITU-T y MPEG estandarizaron H.264 en 2003 bajo la norma MPEG-4 Parte 10. Los dos nombres, H.264 y AVC, se refieren exactamente al mismo estándar.

¿H.264 tiene costo de licencia?

Sí, para ciertos usos comerciales. El pool de patentes administrado por MPEG LA cobra regalías a fabricantes de hardware y a algunos distribuidores de contenido por volumen, aunque la mayoría de los desarrolladores que solo codifican y reproducen video con librerías como FFmpeg no pagan nada directamente.

¿Qué diferencia a H.264 de H.265/HEVC?

HEVC es el sucesor directo de H.264, publicado en 2013, y usa bloques más grandes y más modos de predicción para comprimir mejor al mismo nivel de calidad. A cambio, decodificarlo exige más cómputo, y su esquema de licencias está más fragmentado entre varios pools de patentes distintos.

¿Por qué YouTube usa VP9 o AV1 en vez de H.264?

Google impulsó VP9 y después AV1 en parte para evitar pagar regalías de HEVC a gran escala. Ambos son libres de regalías y compiten en eficiencia con los estándares con licencia, aunque conviven con H.264 en vez de reemplazarlo del todo.

¿Qué es un perfil Baseline en H.264?

Es el subconjunto más simple de funciones del estándar: no incluye B-frames ni CABAC, lo que lo hace más fácil de decodificar en hardware limitado, a costa de peor compresión que los perfiles Main o High.

Referencias

  • sidbala.com: artículo técnico original que inspiró este desglose de H.264.
  • ITU-T: página oficial de la recomendación H.264/AVC.
  • Wikipedia: historia y detalles técnicos de Advanced Video Coding.
  • FFmpeg: documentación oficial de la herramienta usada en los ejemplos de este artículo.
  • FFmpeg Wiki: guía oficial de codificación H.264 con libx264.

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Imagen destacada: Foto de Egor Komarov en Unsplash

¿Te sirvió? ¿Te dio otro error? Contalo abajo: las preguntas se responden y le sirven al siguiente que llegue.

Dejar un comentario

Andrés Morales

Desarrollador e investigador en inteligencia artificial. Escribe sobre modelos de lenguaje, frameworks, herramientas para devs y lanzamientos open source. Cubre papers de ML, ecosistema de startups tech y tendencias de programación.

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Podés incluir código entre <code>…</code> o, para varias líneas, <pre><code>…</code></pre>.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.