Cómo decodificar Base64 a MP4
- Pega el Base64 en Base64 o data URI. Un prefijo
data:video/mp4;base64,puede quedarse. Para cadenas largas, usa Abrir archivo .txt; todo lo que pase de 4 MB se decodifica sin mostrarse en el área de texto. - El reproductor carga el vídeo. Duración y Dimensiones aparecen cuando el navegador ha leído el índice, por ejemplo
0:02.0y96 × 64 pxpara el ejemplo. - Mira la zona de notas: queda vacía para un MP4 de verdad y, si no lo es, nombra el formato.
- Pulsa Descargar archivo.
La decodificación y la reproducción se quedan dentro de tu navegador; la página no puede hacer peticiones de red, salvo las del contador de visitas de Cloudflare.
MP4, MOV, M4A: una estructura, varios formatos
Los archivos MP4 se construyen a partir de cajas (boxes), y la primera, ftyp, contiene una marca que dice qué variante del formato sigue el archivo. La herramienta lee esa marca:
Marca en ftyp | Se detecta como | Nota en esta página |
|---|---|---|
isom, mp41, mp42, avc1, iso6 y la mayoría de las demás | MP4 | Ninguna |
qt | MOV (QuickTime) | «Esto parece MOV, no MP4.» con Descargar como .mov |
M4A | M4A | «Esto parece M4A, no MP4.»: solo audio |
3gp4, 3gp5 y otras marcas 3g | 3GP, vídeo de móviles antiguos | «Esto parece 3GP, no MP4.» |
heic, mif1, avif | HEIC, AVIF | «Esto parece HEIC, no MP4.»: imágenes fijas en la misma estructura de cajas |
Un vídeo cuya marca dice MP4 puede contener solo sonido. Se reproduce, y Dimensiones muestra solo audio. Un archivo WebM enviado como «MP4» se identifica con «Esto parece WebM, no MP4.»
Dónde está el índice y por qué importa en archivos rotos
Todo MP4 tiene una caja moov, el índice que le dice al reproductor dónde está cada fotograma. Muchos codificadores, ffmpeg entre ellos, la escriben por defecto al final del archivo, después de los datos multimedia de mdat. Con -movflags +faststart, ffmpeg la mueve al principio para que el streaming pueda empezar antes de que llegue el archivo entero.
En esta página el archivo entero está en memoria, así que con un vídeo completo la posición no importa. Importa cuando el Base64 se truncó por un límite de tamaño en un log, una columna de base de datos o una cola de mensajes:
- Índice al final: el corte elimina el índice y no se reproduce nada. La herramienta sigue diciendo MP4, porque los primeros bytes están intactos, y el reproductor indica que no puede reproducirlo, con Duración n/d.
- Índice al principio: el navegador lee el índice, muestra la duración completa y reproduce hasta que se acaban los datos.
Así que, cuando un vídeo largo falla y uno corto funciona, compara el tamaño decodificado con el original antes de culpar al códec.
Inspeccionar las cajas con Python
La estructura de cajas es lo bastante sencilla como para recorrerla sin bibliotecas: cuatro bytes de tamaño, cuatro de tipo y después el contenido. Esto lista las cajas de primer nivel y las marcas:
import base64, struct
def mp4_boxes(data):
pos = 0
while pos + 8 <= len(data):
size, kind = struct.unpack(">I4s", data[pos:pos + 8])
if size == 1:
size = struct.unpack(">Q", data[pos + 8:pos + 16])[0]
elif size == 0:
size = len(data) - pos
yield kind.decode("latin-1"), pos, size
if size < 8:
break
pos += size
with open("clip.b64") as f:
data = base64.b64decode(f.read())
for kind, pos, size in mp4_boxes(data):
print(kind, pos, size)
if kind == "ftyp":
body = data[pos + 8:pos + size]
brands = [body[i:i + 4].decode("latin-1") for i in range(8, len(body), 4)]
print(" major:", body[:4].decode("latin-1"), "compatible:", brands)
Para un vídeo H.264 hecho con ffmpeg imprime ftyp 0 32 con la marca principal isom, y después free, mdat y moov al final. Un moov antes de mdat indica faststart; las cajas moof indican un MP4 fragmentado, como los que se generan para streaming y como el ejemplo de esta página. Si falta moov en la lista, el archivo está incompleto.
Para la compatibilidad de códecs entre navegadores, consulta Base64 a vídeo. Para codificar un vídeo, usa MP4 a Base64; Base64 en Python explica cómo decodificar entradas grandes.
Preguntas frecuentes
¿Cómo convierto Base64 a un archivo MP4?
Pega la cadena arriba, comprueba el vídeo en el reproductor y pulsa Descargar archivo. El vídeo se guarda como decoded.mp4, byte a byte tal como se codificó.
¿Por qué mi MP4 dice que no se puede reproducir aunque es un MP4?
O el códec que lleva dentro no está en tu navegador, casi siempre HEVC, o el archivo está incompleto y le falta el índice. ffprobe sobre el archivo descargado distingue los dos casos: nombra el códec o indica que no se encontró el átomo moov.
¿Debo guardar un MOV como .mp4?
Usa Descargar como .mov, la extensión que corresponde al contenido. MOV y MP4 comparten casi toda su estructura, así que renombrar suele funcionar en la práctica, pero algunos reproductores comprueban la marca y rechazan la discrepancia.