Table des matières
Convertir une vidéo 3gp/amr en mpeg4/aac
Cas d'utilisation
J'ai reçu une vidéo via MMS au format 3gp. Je souhaite la visionner sur mon ordi.
La vidéo contient un flux audio au format amr.
Contenu du fichier
$ ffprobe mon-fichier.3gp
…
Metadata:
major_brand : 3gp5
minor_version : 256
compatible_brands: isom3gp53gp4
creation_time : 2025-12-09T10:40:25.000000Z
Duration: 00:00:42.05, start: 0.000000, bitrate: 73 kb/s
Stream #0:0[0x1](und): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, fltp, 12 kb/s (default)
Metadata:
creation_time : 2025-12-09T10:40:25.000000Z
handler_name : Core Media Audio
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Video: h263 (s263 / 0x33363273), yuv420p, 176x144 [SAR 12:11 DAR 4:3], 59 kb/s, 10 fps, 10 tbr, 600 tbn (default)
Lecture
Dans mon cas, la lecture sur ordi du fichier 3gp restitue bien la vidéo mais le son est massacré, le rendant inaudible.
Je décide convertir le fichier vers un format que mon ordi lit correctement.
Conversion
Je n'ai pas trouvé le moyen de tout faire en une seule commande Je procède en 3 étapes :
- extraction de la piste vidéo seule
- extraction de la piste audio seule
- assemblage des deux pistes
Prérequis
ffmpeg doit être installé et doté d'un codec amr. Sur Debian 12, les paquetages de codecs suivants sont installés :
- libavcodec-extra1),
- libopencore-amrnb0,
- libopencore-amrwb0.
Conversion
Extraction vidéo :
ffmpeg -i mon-fichier.3gp -an -vcodec copy mon-fichier-video.3gp
Extraction audio :
ffmpeg -i mon-fichier.3gp -map 0:a -acodec copy mon-fichier-audio.amr
Combinaison audio et vidéo :
ffmpeg -i mon-fichier-video.3gp -i mon-fichier-audio.amr mon-fichier.mp4
Rotation sans réencodage (si besoin) :
ffmpeg -i mon-fichier.mp4 -map_metadata 0 -metadata:s:v rotate="90" -codec copy mon-fichier-mod.mp4
Script
Un script de conversion (sans rotation) permet de simplifier l'opération.
3gp2mp4.sh mon-fichier.3gp
- 3gp2mp4.sh
#!/bin/bash # Convertit un fichier 3gp/amr en mpeg4/aac # Fonctionne en chemin absolu ou relatif et depuis un script # Utilisation : 3gp2mp4 (<chemin-vers-mon-fichier.3gp> | <mon-fichier.3gp>) repertoire="$(dirname "$1")" radical="$(basename "$1")" root=${radical%.*} ext=${radical#"$root"} ffmpeg -i $1 -an -vcodec copy "$repertoire/${root}-video${ext}" ffmpeg -i $1 -map 0:a -acodec copy "$repertoire/${root}-video.amr" ffmpeg -i "$repertoire/${root}-video${ext}" -i "$repertoire/${root}-video.amr" "$repertoire/${root}.mp4" rm "$repertoire/${root}-video${ext}" "$repertoire/${root}-video.amr"
Résultat
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf59.27.100
Duration: 00:00:42.10, start: 0.000000, bitrate: 80 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 176x144 [SAR 12:11 DAR 4:3], 40 kb/s, 10 fps, 10 tbr, 10240 tbn (default)
Metadata:
handler_name : Core Media Video
vendor_id : [0][0][0][0]
encoder : Lavc59.37.100 libx264
Side data:
displaymatrix: rotation of 90.00 degrees
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 38 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Ce qui n'a pas fonctionné
La commande typique pour convertir le fichier en mpeg4 / mp3 encapsulé dans un conteneur avi est la suivante :
ffmpeg -i mon-fichier.3gp -vcodec mpeg4 -acodec mp3 movie.avi
La vidéo convertie est exploitable mais le son est toujours inutilisable (il produit d'autres bruits qu'en la lecture au format natif).
Diverses tentatives d'extraction-conversion du son seul donnent également des résultats inexploitables.
ffmpeg -i mon-fichier.3gp -ar 22050 mon-fichier.mp3 ffmpeg -i mon-fichier.3gp -ar 8000 mon-fichier.mp3 ffmpeg -i mon-fichier.3gp -ar 44100 mon-fichier.wav
