Aller au contenu principal
Guides Techniques• 7 min de lecture

Vidéos WhatsApp API : envoi, compression et bonnes pratiques

Guide complet pour envoyer des vidéos via l'API WhatsApp Business Cloud. Formats supportés, compression vidéo, optimisation pour l'Afrique et exemples de code.

La vidéo est le format de contenu à la croissance la plus rapide en Afrique. Des tutoriels produits aux démonstrations de services en passant par les témoignages clients, la vidéo via WhatsApp crée une connexion émotionnelle que le texte ne peut pas égaler. Mais envoyer une vidéo via WhatsApp API sans l'optimiser, c'est prendre le risque que votre client attende 3 minutes avant de pouvoir la regarder sur sa connexion 3G. Ce guide vous explique comment envoyer des vidéos de qualité tout en respectant les contraintes techniques de l'API et les réalités infrastructurelles du marché africain.

Spécifications techniques des vidéos WhatsApp

L'API WhatsApp Cloud supporte les formats vidéo suivants :

Format MIME Type Taille max
MP4 video/mp4 16 MB
3GPP video/3gpp 16 MB

Codecs recommandés :

  • Vidéo : H.264 (AVC) — le plus universel et le mieux supporté sur mobile
  • Audio : AAC — excellent rapport qualité/compression

Résolutions et bitrates recommandés :

  • Haute qualité (Wi-Fi) : 720p (1280x720), 1500-2500 kbps vidéo
  • Qualité standard (3G/4G) : 480p (854x480), 800-1200 kbps vidéo
  • Qualité faible bande passante : 360p (640x360), 400-600 kbps vidéo

Durée : WhatsApp ne limite pas formellement la durée des vidéos via API, mais la limite de taille de 16 MB la contraindra naturellement. À 1000 kbps, 16 MB correspond à environ 2 minutes de vidéo. Pour des contenus plus longs, hébergez sur YouTube/Vimeo et partagez le lien.

Envoyer une vidéo par URL

async function sendVideoByUrl(to, videoUrl, caption = '') {
    const payload = {
        messaging_product: 'whatsapp',
        to: to,
        type: 'video',
        video: {
            link: videoUrl,
            caption: caption  // Max 1024 caractères
        }
    };
    
    const response = await axios.post(API_URL, payload, { headers: HEADERS });
    return response.data;
}

// Exemple : envoyer un tutoriel produit
await sendVideoByUrl(
    '221771234567',
    'https://cdn.votre-marque.com/tutoriels/comment-utiliser-produit.mp4',
    'Découvrez comment utiliser notre produit en 60 secondes ! Des questions ? Répondez à ce message.'
);

Upload et envoi de vidéo

Pour les vidéos générées dynamiquement ou stockées localement :

async function uploadAndSendVideo(to, videoPath, caption = '') {
    const mediaUrl = `https://graph.facebook.com/v18.0/${process.env.PHONE_NUMBER_ID}/media`;
    
    const form = new FormData();
    form.append('messaging_product', 'whatsapp');
    form.append('type', 'video/mp4');
    form.append('file', fs.createReadStream(videoPath));
    
    // Upload
    const uploadResponse = await axios.post(mediaUrl, form, {
        headers: { ...HEADERS, ...form.getHeaders() },
        maxContentLength: Infinity,
        maxBodyLength: Infinity
    });
    
    const mediaId = uploadResponse.data.id;
    
    // Envoi
    const payload = {
        messaging_product: 'whatsapp',
        to: to,
        type: 'video',
        video: {
            id: mediaId,
            caption: caption
        }
    };
    
    const response = await axios.post(API_URL, payload, { headers: HEADERS });
    return { mediaId, messageId: response.data.messages[0].id };
}

Compression automatique des vidéos avec FFmpeg

FFmpeg est l'outil de référence pour compresser et optimiser les vidéos avant l'envoi. Voici un pipeline de compression adapté aux contraintes africaines :

const ffmpeg = require('fluent-ffmpeg'); // npm install fluent-ffmpeg
const path = require('path');
const os = require('os');

async function compressVideoForWhatsApp(inputPath, targetSizeMB = 10) {
    const outputPath = path.join(os.tmpdir(), `wa_video_${Date.now()}.mp4`);
    
    return new Promise((resolve, reject) => {
        // Analyser d'abord la durée de la vidéo
        ffmpeg.ffprobe(inputPath, (err, metadata) => {
            if (err) return reject(err);
            
            const duration = metadata.format.duration; // secondes
            const targetSizeBytes = targetSizeMB * 1024 * 1024;
            
            // Calculer le bitrate cible pour atteindre la taille souhaitée
            // (taille en bits) / (durée en secondes) = bitrate
            const audioBitrate = 96000; // 96 kbps audio
            const videoBitrate = Math.floor(
                (targetSizeBytes * 8 - audioBitrate * duration) / duration
            );
            
            const safeVideoBitrate = Math.max(300000, Math.min(videoBitrate, 2000000));
            
            console.log(`Durée: ${Math.round(duration)}s, Bitrate vidéo cible: ${Math.round(safeVideoBitrate/1000)} kbps`);
            
            ffmpeg(inputPath)
                .videoCodec('libx264')
                .audioCodec('aac')
                .videoBitrate(Math.round(safeVideoBitrate / 1000) + 'k')
                .audioBitrate('96k')
                .outputOptions([
                    '-preset fast',
                    '-movflags +faststart',  // Optimise pour streaming/preview rapide
                    '-vf scale=\'min(854,iw)\':\'min(480,ih)\':force_original_aspect_ratio=decrease'
                ])
                .on('progress', (progress) => {
                    process.stdout.write(`Compression: ${Math.round(progress.percent || 0)}%\r`);
                })
                .on('end', () => {
                    const stats = fs.statSync(outputPath);
                    const finalSizeMB = (stats.size / 1024 / 1024).toFixed(2);
                    console.log(`\nCompression terminée : ${finalSizeMB} MB`);
                    resolve(outputPath);
                })
                .on('error', reject)
                .save(outputPath);
        });
    });
}

// Pipeline complet : compresser et envoyer
async function processAndSendVideo(to, originalVideoPath, caption) {
    const fileSizeMB = fs.statSync(originalVideoPath).size / 1024 / 1024;
    
    let videoToSend = originalVideoPath;
    let tempFile = null;
    
    // Compresser seulement si nécessaire
    if (fileSizeMB > 12) {
        console.log(`Vidéo de ${fileSizeMB.toFixed(1)} MB, compression nécessaire...`);
        tempFile = await compressVideoForWhatsApp(originalVideoPath, 10);
        videoToSend = tempFile;
    }
    
    const result = await uploadAndSendVideo(to, videoToSend, caption);
    
    // Nettoyer
    if (tempFile) fs.unlinkSync(tempFile);
    
    return result;
}

Stratégie vidéo pour les entreprises africaines

Quelques conseils pratiques pour maximiser l'impact de vos vidéos WhatsApp en Afrique :

Durée optimale : les vidéos de 15 à 60 secondes obtiennent les meilleurs taux de visionnage complet sur mobile. Au-delà d'1 minute, beaucoup d'utilisateurs abandonnent le visionnage, surtout sur connexion lente.

Première image (thumbnail) : la première frame de votre vidéo doit être accrocheuse — c'est ce que l'utilisateur voit avant de cliquer. Commencez par votre produit, votre visage ou un texte d'accroche fort.

Audio optionnel : beaucoup d'utilisateurs regardent les vidéos WhatsApp sans son, surtout en public. Ajoutez des sous-titres ou du texte intégré pour que votre message passe même sans audio.

Adapter le contenu au canal : une vidéo WhatsApp n'est pas une publicité TV. Filmez directement depuis votre téléphone pour un aspect authentique, parlez directement à la caméra, soyez direct. Les contenus "maison" génèrent souvent plus d'engagement que les productions très polissées.

Pour les autres formats médias, consultez l'article sur l'envoi d'images WhatsApp et les templates WhatsApp. La documentation API complète couvre tous les paramètres disponibles.

FAQ

Q: WhatsApp lit-il les vidéos automatiquement dans la conversation (autoplay) ?

R: Oui, WhatsApp joue automatiquement les vidéos courtes (généralement moins de 30 secondes) quand elles sont visibles dans l'écran, sans son. Les vidéos plus longues doivent être lancées manuellement. L'autoplay muet est une opportunité : assurez-vous que vos premières secondes de vidéo attirent l'attention même sans son.

Q: La limite de 16 MB est-elle sur la taille brute du fichier ou après compression WhatsApp ?

R: La limite de 16 MB s'applique au fichier que vous envoyez à l'API (avant tout traitement de WhatsApp). Meta peut compresser davantage la vidéo côté serveur avant de la livrer au destinataire. Restez sous 15 MB pour avoir une marge de sécurité.

Q: Peut-on envoyer des vidéos verticales (9:16) sur WhatsApp API ?

R: Oui, WhatsApp supporte les vidéos verticales (format portrait, 9:16) et les affiche plein écran lorsqu'elles sont lues. Ce format est particulièrement efficace pour les téléphones mobiles. Filmez en vertical pour un contenu natif mobile — c'est le format qu'utilisent les jeunes audiences africaines sur les réseaux sociaux.

Q: Comment envoyer une vidéo dans un template HSM avec un header vidéo ?

R: Le header d'un template HSM peut être de type vidéo. Définissez le type HEADER avec format: VIDEO lors de la création du template. Pour l'envoi, uploadez d'abord la vidéo avec l'endpoint /media pour obtenir un media_id, puis référencez ce media_id dans le composant header lors de l'envoi du template. La vidéo doit respecter les mêmes limites de format et de taille.

Q: Les vidéos WhatsApp API sont-elles lisibles hors connexion ?

R: Oui, une fois téléchargées sur l'appareil de l'utilisateur, les vidéos WhatsApp sont accessibles hors ligne. Par défaut, WhatsApp télécharge automatiquement les vidéos sous Wi-Fi mais demande une confirmation pour les données mobiles. Pour les marchés africains à data coûteux, précisez dans votre caption que la vidéo est courte et importante pour encourager le téléchargement.


Enrichissez vos communications WhatsApp avec des vidéos engageantes. Whakup gère l'upload, l'optimisation et le suivi des vidéos dans vos campagnes WhatsApp.

#vidéos whatsapp api#envoyer vidéo whatsapp#compression vidéo whatsapp#whatsapp business api média#vidéo marketing whatsapp
Pablo Lenormand
Pablo LenormandCo-fondateur & CPO

Co-fondateur et Chief Product Officer de Whakup, Pablo conçoit les fonctionnalités qui permettent aux marques africaines de maximiser leur impact sur WhatsApp.

🚀

Prêt à passer à l'action ?

Essayez Whakup gratuitement pendant 15 jours. Aucune carte bancaire requise.

Démarrer l'essai gratuit