Como decodificar Base64 para MP4
- Cole o Base64 em Base64 ou data URI. Um prefixo
data:video/mp4;base64,pode ficar. Para strings longas, use Abrir arquivo .txt; acima de 4 MB, o conteúdo é decodificado sem ser exibido na área de texto. - O player carrega o clipe. Duração e Dimensões aparecem quando o navegador lê o índice, por exemplo
0:02.0e96 × 64 pxno exemplo. - Olhe a área de avisos: ela fica vazia para um MP4 de verdade e informa o formato nos outros casos.
- Clique em Baixar arquivo.
A decodificação e a reprodução ficam dentro do seu navegador; a página não pode fazer requisições de rede, exceto as do contador de visitas da Cloudflare.
MP4, MOV, M4A: uma estrutura, vários formatos
Arquivos MP4 são feitos de caixas (boxes), e a primeira, ftyp, guarda uma marca que diz qual variante do formato o arquivo segue. A ferramenta lê essa marca:
Marca no ftyp | Detectado como | Aviso nesta página |
|---|---|---|
isom, mp41, mp42, avc1, iso6 e a maioria das outras | MP4 | Nenhum |
qt | MOV (QuickTime) | “Isto parece ser MOV, não MP4.” com Baixar como .mov |
M4A | M4A | “Isto parece ser M4A, não MP4.”: só áudio |
3gp4, 3gp5 e outras marcas 3g | 3GP, vídeo de celulares antigos | “Isto parece ser 3GP, não MP4.” |
heic, mif1, avif | HEIC, AVIF | “Isto parece ser HEIC, não MP4.”: imagens estáticas na mesma estrutura de caixas |
Um clipe cuja marca diz MP4 ainda pode conter só som. Ele toca, e Dimensões mostra só áudio. Um arquivo WebM enviado como “MP4” aparece como “Isto parece ser WebM, não MP4.”
Onde fica o índice, e por que isso importa em arquivos quebrados
Todo MP4 tem uma caixa moov, o índice que diz ao player onde está cada quadro. Muitos encoders, o ffmpeg entre eles, gravam esse índice no final do arquivo por padrão, depois dos dados de mídia em mdat. Com -movflags +faststart, o ffmpeg o move para o início, para que o streaming comece antes de o arquivo inteiro chegar.
Nesta página o arquivo inteiro fica na memória, então a posição não importa para um clipe completo. Ela importa quando o Base64 foi truncado por um limite de tamanho em um log, numa coluna de banco de dados ou numa fila de mensagens:
- Índice no final: o corte remove o índice e nada toca. A ferramenta ainda diz MP4, porque os primeiros bytes estão intactos, e o player avisa que não consegue reproduzir, com Duração n/d.
- Índice no início: o navegador lê o índice, mostra a duração completa e toca até os dados acabarem.
Então, quando um clipe longo falha e um curto funciona, compare o tamanho decodificado com o original antes de culpar o codec.
Inspecionar as caixas em Python
A estrutura das caixas é simples o bastante para percorrer sem biblioteca: quatro bytes de tamanho, quatro bytes de tipo e depois o conteúdo. Isto lista as caixas de nível superior e as 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 um clipe H.264 gerado pelo ffmpeg, o script imprime ftyp 0 32 com a marca principal isom, depois free, mdat e, por último, moov. Um moov antes de mdat indica faststart; caixas moof indicam um MP4 fragmentado, como os gerados para streaming e como o exemplo desta página. Se moov não estiver na lista, o arquivo está incompleto.
Para o suporte a codecs nos navegadores, veja Base64 para vídeo. Para codificar um clipe, use MP4 para Base64; Base64 em Python trata da decodificação de entradas grandes.
Perguntas frequentes
Como converter Base64 em arquivo MP4?
Cole a string acima, confira o clipe no player e clique em Baixar arquivo. O vídeo é salvo como decoded.mp4, byte a byte como foi codificado.
Por que meu MP4 aparece como impossível de reproduzir, mesmo sendo MP4?
Ou o codec que está dentro é um que o seu navegador não tem, na maioria das vezes HEVC, ou o arquivo está incompleto e falta o índice. O ffprobe no arquivo baixado diferencia os dois casos: ele informa o codec ou avisa que o átomo moov não foi encontrado.
Devo salvar um MOV como .mp4?
Use Baixar como .mov, a extensão que corresponde ao conteúdo. MOV e MP4 compartilham a maior parte da estrutura, então renomear muitas vezes funciona na prática, mas alguns players conferem a marca e recusam quando ela não bate.