Subir un archivo
  1. base64hub
  2. Herramientas de archivos
  3. Base64 a MP4

Base64 a MP4

Pega un MP4 codificado en Base64 para reproducirlo en esta página y guardarlo como archivo .mp4. Si el vídeo es en realidad un MOV, un M4A o una descarga cortada, la herramienta te lo dice.

Gratis sin registro, sin límites Local no se sube nada Detecta MP4, MOV, M4A y 3GP por su marca Actualizado 27 oct 2026
Entrada –Salida –Tamaño –

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo decodificar Base64 a MP4

  1. 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.
  2. El reproductor carga el vídeo. Duración y Dimensiones aparecen cuando el navegador ha leído el índice, por ejemplo 0:02.0 y 96 × 64 px para el ejemplo.
  3. Mira la zona de notas: queda vacía para un MP4 de verdad y, si no lo es, nombra el formato.
  4. 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 ftypSe detecta comoNota en esta página
isom, mp41, mp42, avc1, iso6 y la mayoría de las demásMP4Ninguna
qtMOV (QuickTime)«Esto parece MOV, no MP4.» con Descargar como .mov
M4AM4A«Esto parece M4A, no MP4.»: solo audio
3gp4, 3gp5 y otras marcas 3g3GP, vídeo de móviles antiguos«Esto parece 3GP, no MP4.»
heic, mif1, avifHEIC, 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.