Inspector de contenedor Ogg
Un archivo Ogg no es un códec, es un contenedor: una sucesión plana de páginas, cada una con un fragmento de algún flujo lógico. Este inspector recorre todas las páginas y muestra lo que la cabecera de 27 bytes contiene de verdad: el patrón de captura OggS, la versión, las marcas de tipo que señalan el inicio de un flujo, su fin o un paquete continuado desde la página anterior, la posición de gránulo de 64 bits, el número de serie del flujo al que pertenece la página, el número de secuencia y el CRC32. Después recalcula esa suma de comprobación sobre la página con el campo del CRC puesto a cero, usando el polinomio no reflejado 0x04C11DB7 que especifica Ogg en lugar del CRC-32 reflejado de zlib, y muestra el valor almacenado junto al calculado. La tabla de segmentos es la parte que nadie más enseña. Hasta 255 valores de lacing dicen cómo se reparte la página en paquetes, y un valor de exactamente 255 no termina un paquete: indica que continúa en el segmento siguiente y, si es el último valor de la página, en la página siguiente. Así viaja una cabecera de comentarios con carátula incrustada, repartida en decenas de páginas cuya posición de gránulo es -1 porque en ninguna termina un paquete. Luego las páginas se agrupan por número de serie en flujos lógicos y se decodifica la cabecera de identificación de cada uno: Vorbis, Opus, FLAC en Ogg, Theora y Speex, con los comentarios leídos como el multimapa que son, claves repetidas incluidas. Y responde a dos preguntas que ningún reproductor te responde: si los flujos van intercalados (multiplexados, vídeo con su audio) o uno detrás de otro (encadenados, lo que produce concatenar dos archivos Ogg), y si cada flujo tiene página de inicio y de fin, porque una descarga truncada se queda sin la de fin, se reproduce igual y declara una duración falsa.
Cómo usar
- Suelta un archivo .ogg, .oga, .ogv, .opus o .spx en la caja. Se lee entero, porque la duración vive en la posición de gránulo de la última página.
- Empieza por las fichas del contenedor: cuántos flujos lógicos hay, si están multiplexados o encadenados y si todos los CRC de página cuadran.
- Abre el bloque de cada flujo para ver los detalles del códec — canales y frecuencia en Vorbis, pre-skip y mapeo de canales en Opus, profundidad de bits y muestras totales en FLAC en Ogg — junto al fabricante y a todos los campos de comentario en el orden del archivo.
- Repasa las marcas en la tabla de páginas: BOS en la primera página de un flujo, EOS en la última y cont en cualquier página que empiece a mitad de un paquete.
- Mira los avisos. Una página de fin ausente, un CRC que no cuadra o un salto en los números de secuencia señalan cada uno una avería concreta del archivo.
Preguntas frecuentes
- ¿Por qué mi flujo Opus muestra 16 kHz en una fila y 48 kHz en otra?
- Porque son cosas distintas. La frecuencia de entrada de la cabecera OpusHead es documentación: registra qué se le dio al codificador para que un decodificador pueda volver a remuestrear si quiere. Opus tiene una sola frecuencia interna, 48 kHz, y es también la que cuentan sus posiciones de gránulo, así que un archivo de un segundo grabado a 16 kHz termina en un gránulo de unos 48 312 y no de 16 000. Leer la frecuencia de entrada como si fuera la de reproducción es el error clásico con Opus y desvía cualquier duración que calcules por la razón entre ambas.
- ¿Qué es una posición de gránulo y por qué algunas páginas muestran -1?
- La posición de gránulo es el reloj propio del códec, escrito al final de cada página: en Vorbis y FLAC es el número de la última muestra decodificable desde esa página, en Opus lo mismo en muestras de 48 kHz incluyendo el pre-skip, y en Theora es un par empaquetado de fotograma clave y desplazamiento. Una página muestra -1 (los 64 bits a uno) cuando en ella no termina ningún paquete, lo que ocurre siempre que un paquete es lo bastante grande como para abarcar varias páginas. No es una avería: es el único valor honesto, porque la página acaba en mitad de algo.
- La herramienta dice que mi archivo está encadenado. ¿Qué significa?
- Un archivo encadenado son dos o más flujos Ogg completos puestos uno detrás de otro, cada uno con su número de serie, sus cabeceras y sus páginas de inicio y de fin. Es justo lo que sale de `cat a.ogg b.ogg`, y la especificación lo permite. Lo que la especificación no consigue es que los reproductores se pongan de acuerdo: unos reproducen toda la cadena, otros paran al final del primer eslabón, otros la reproducen entera pero anuncian la duración del primero. Si querías un archivo continuo, recodifica en lugar de concatenar.
- Una página falla la comprobación de CRC. ¿Está roto el archivo?
- Algo cambió después de escribir la página, sí, pero no necesariamente el audio. El CRC de Ogg cubre la página entera, cabecera incluida, así que un editor de etiquetas que parchea un byte sin recalcular la suma deja exactamente esta huella, igual que un bit volteado por un disco defectuoso o una descarga cortada y reanudada. Ojo: no es el CRC-32 de zlib. Ogg usa el polinomio 0x04C11DB7 sin reflexión de entrada ni de salida y sin inversión final, calculado con el campo de la suma a cero, y por eso las herramientas que tiran de la rutina habitual dan todas las páginas por malas.
- ¿Por qué un paquete ocupa treinta páginas?
- Porque una página admite como mucho 255 segmentos de como mucho 255 bytes, de modo que el techo son 65 025 bytes, y una cabecera de comentarios con carátula incrustada lo supera sin esfuerzo. La tabla de segmentos codifica el desbordamiento terminando la página en un valor de lacing de 255, que significa «no acabado»; la página siguiente activa la marca de continuación y retoma donde se quedó la anterior. Por eso tampoco puedes cortar un Ogg en cualquier frontera de página y esperar que las dos mitades funcionen.
- La duración de aquí no coincide con la de mi reproductor. ¿Cuál es la buena?
- Mira primero la marca de fin de flujo. Esta página calcula la duración a partir de la posición de gránulo de la última página que encuentra, restando el pre-skip en Opus; si ese flujo no tiene página de fin, el archivo está truncado y ninguna cifra vale mucho, y puede que tu reproductor esté extrapolando desde la tasa de bits. En un archivo encadenado aquí se suman las duraciones, mientras que muchos reproductores solo anuncian la del primer eslabón. Y en Opus, olvidar el pre-skip alarga cada archivo unos 6,5 milisegundos.
Herramientas relacionadas
Inspector de metadatos FLAC
Abre un .flac en tu navegador: STREAMINFO, cada bloque de metadatos con su posición, comentarios Vorbis repetidos, carátulas y el ratio de compresión real.
Inspector de archivos gzip (.gz)
Lee la cabecera de un .gz campo por campo, recorre todos sus miembros y verifica el tráiler recalculando el CRC32 y el tamaño real en tu navegador.
Inspector de bases de datos SQLite
Abre un archivo .sqlite o .db en tu navegador y lee su estructura: tamaño de página, codificación, modo de diario y las filas reales de cada tabla.
Visor de archivos mbox
Divide un archivo .mbox en tu navegador: límites de mensaje, cabeceras decodificadas, estructura MIME, hilos y Message-ID duplicados. No se sube nada.
Inspector de archivos MP4 e ISO base media
Abre un MP4, M4A, M4V o MOV en tu navegador: marcas, comprobación de inicio rápido, árbol de cajas, códec y duración de cada pista y etiquetas de iTunes.
Inspector de binarios Mach-O
Abre un binario de macOS o iOS en el navegador: arquitecturas de un archivo universal, segmentos y secciones, dylibs, rpaths, UUID y firma.