Comment décoder du Base64 en MP4
- Collez le Base64 dans Base64 ou data URI. Un préfixe
data:video/mp4;base64,peut rester. Pour les chaînes longues, utilisez Ouvrir un fichier .txt ; au-delà de 4 Mo, la chaîne est décodée sans être affichée dans la zone de texte. - Le lecteur charge la vidéo. Durée et Dimensions apparaissent quand le navigateur a lu l’index, par exemple
0:02.0et96 × 64 pxpour l’exemple. - Regardez la zone des notes : elle reste vide pour un vrai MP4 et nomme le format dans le cas contraire.
- Appuyez sur Télécharger le fichier.
Le décodage et la lecture restent dans votre navigateur ; la page n’a le droit d’effectuer aucune requête réseau hormis le comptage des pages vues de Cloudflare.
MP4, MOV, M4A : une structure, plusieurs formats
Les fichiers MP4 sont construits à partir de boîtes, et la première boîte, ftyp, contient une marque qui indique quelle variante du format suit le fichier. L’outil lit cette marque :
Marque dans ftyp | Détecté comme | Note sur cette page |
|---|---|---|
isom, mp41, mp42, avc1, iso6 et la plupart des autres | MP4 | Aucune |
qt | MOV (QuickTime) | « Cela ressemble à MOV, pas à un fichier MP4. » avec Télécharger en .mov |
M4A | M4A | « Cela ressemble à M4A, pas à un fichier MP4. » : audio uniquement |
3gp4, 3gp5 et les autres marques 3g | 3GP, ancienne vidéo de téléphone | « Cela ressemble à 3GP, pas à un fichier MP4. » |
heic, mif1, avif | HEIC, AVIF | « Cela ressemble à HEIC, pas à un fichier MP4. » : des images fixes dans la même structure de boîtes |
Une vidéo dont la marque indique MP4 peut quand même ne contenir que du son. Elle se lit, et Dimensions affiche audio uniquement. Un fichier WebM envoyé comme « MP4 » est signalé par « Cela ressemble à WebM, pas à un fichier MP4. »
Où se trouve l’index, et pourquoi c’est important pour les fichiers cassés
Chaque MP4 a une boîte moov, l’index qui indique au lecteur où se trouve chaque image. Beaucoup d’encodeurs, dont ffmpeg, l’écrivent par défaut à la fin du fichier, après les données multimédias de mdat. Avec -movflags +faststart, ffmpeg le déplace au début pour que la lecture en streaming puisse commencer avant l’arrivée du fichier complet.
Sur cette page, le fichier entier est en mémoire : la position n’a donc pas d’importance pour une vidéo complète. Elle en a quand le Base64 a été tronqué, par une limite de taille dans un log, une colonne de base de données ou une file de messages :
- Index à la fin : la coupure supprime l’index, et rien ne se lit. L’outil indique quand même MP4, car les premiers octets sont intacts, et le lecteur signale qu’il ne peut pas lire le fichier, avec Durée à n/d.
- Index au début : le navigateur lit l’index, affiche la durée complète et lit jusqu’à ce que les données s’épuisent.
Quand une longue vidéo échoue alors qu’une courte fonctionne, comparez donc la taille décodée avec celle de l’original avant d’accuser le codec.
Inspecter les boîtes en Python
La structure des boîtes est assez simple pour être parcourue sans bibliothèque : quatre octets de taille, quatre octets de type, puis le contenu. Ce code liste les boîtes de premier niveau et les marques :
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)
Pour une vidéo H.264 produite par ffmpeg, il affiche ftyp 0 32 avec la marque principale isom, puis free, mdat et moov en dernier. Un moov avant mdat signifie faststart ; des boîtes moof signalent un MP4 fragmenté, tel qu’on en produit pour le streaming et comme l’exemple de cette page. Si moov est absent de la liste, le fichier est incomplet.
Pour la prise en charge des codecs selon les navigateurs, voir Base64 en vidéo. Pour encoder une vidéo, utilisez MP4 en Base64 ; Base64 en Python traite le décodage des entrées volumineuses.
FAQ
Comment convertir du Base64 en fichier MP4 ?
Collez la chaîne ci-dessus, vérifiez la vidéo dans le lecteur et appuyez sur Télécharger le fichier. La vidéo est enregistrée sous le nom decoded.mp4, octet pour octet telle qu’elle a été encodée.
Pourquoi mon MP4 indique-t-il qu'il ne peut pas être lu alors que c'est bien un MP4 ?
Soit il contient un codec que votre navigateur ne gère pas, le plus souvent HEVC, soit le fichier est incomplet et son index manque. ffprobe sur le fichier téléchargé distingue les deux cas : il nomme le codec, ou signale que l’atome moov est introuvable.
Faut-il enregistrer un MOV en .mp4 ?
Utilisez Télécharger en .mov, l’extension qui correspond au contenu. MOV et MP4 partagent l’essentiel de leur structure, si bien que renommer fonctionne souvent en pratique, mais certains lecteurs vérifient la marque et refusent une incohérence.