Tutoriel · FFmpeg pour la vidéo en direct

Tutoriel de streaming FFmpeg d'une seule commande à une chaîne en direct

Ce tutoriel de streaming FFmpeg vous met en direct avec une seule commande : FFmpeg lit votre fichier, votre caméra ou votre écran, l'encode en vidéo H.264 et en audio AAC, puis l'envoie en RTMP vers votre chaîne Primcast.

Vous trouverez la commande pour chaque type de source, les réglages d'encodeur qui garantissent une lecture fluide pour vos spectateurs, ainsi qu'une version SRT pour les connexions longues ou instables.

ffmpeg · rtmp
ffmpeg -re -i input.mp4 \ -c:v libx264 -preset veryfast \ -b:v 2500k -maxrate 2500k -bufsize 5000k \ -pix_fmt yuv420p \ -force_key_frames "expr:gte(t,n_forced*2)" \ -sc_threshold 0 \ -c:a aac -b:a 128k -ar 44100 -ac 2 \ -f flv "rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream"

Remplacez les mots surlignés par vos propres valeurs. L'étape 02 explique chaque option.

01

Avant de commencer : FFmpeg et quatre valeurs de votre panneau

Vous avez besoin de FFmpeg sur l'ordinateur qui envoie la vidéo, ainsi que des réglages d'encodeur de votre chaîne. Les deux ne prennent que quelques minutes.

Installer FFmpeg

Utilisez le gestionnaire de paquets de votre système, puis vérifiez qu'il fonctionne. Toute version récente fonctionne avec les commandes de cette page.

installer
# Windowswinget install Gyan.FFmpeg# macOS (Homebrew)brew install ffmpeg# Debian ou Ubuntusudo apt install ffmpeg# vérifierffmpeg -version

Copier vos réglages d'encodeur

Connectez-vous, ouvrez votre compte vidéo et trouvez la carte Diffusion en direct. Sa liste Réglages d'encodeur contient tout ce dont FFmpeg a besoin :

Serveur
Ressemble à rtmp://HOST:1935/APP. Votre hôte et le nom de l'application.
Nom du flux
Généralement livestream. Il se place à la fin de l'adresse.
Nom d'utilisateur
Votre identifiant de publication.
Mot de passe
Cliquez sur Afficher pour le voir, ou sur Nouveau mot de passe pour le remplacer.

Si votre panneau affiche aussi une adresse Serveur le plus proche, utilisez-la comme serveur. Votre encodeur se connecte alors à notre emplacement le plus proche (New York, Miami, San Francisco, Amsterdam ou Bucarest) et le flux continue vers votre chaîne sur notre réseau. Le nom du flux, le nom d'utilisateur et le mot de passe restent identiques.

02

Votre premier flux RTMP FFmpeg, option par option

Placez votre nom d'utilisateur et votre mot de passe devant l'hôte, suivis d'un @, puis ajoutez le nom du flux après l'application. Le reste de la commande indique à FFmpeg comment encoder.

adresse rtmp
rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream

Conservez les guillemets autour de l'adresse. Si votre mot de passe contient @, : ou /, écrivez-les sous la forme %40, %3A et %2F, ou cliquez sur Nouveau mot de passe dans le panneau pour en obtenir un sans ces caractères.

Rôle de chaque option FFmpeg dans la commande
OptionSon rôle
-reLit un fichier à sa vitesse de lecture réelle. Sans cette option, FFmpeg envoie un fichier aussi vite que possible et le flux se coupe. Omettez-la pour les caméras et les périphériques de capture, qui fonctionnent déjà en temps réel.
-i input.mp4Votre entrée : un fichier, un périphérique ou un autre flux. L'étape 03 en présente un pour chaque cas.
-c:v libx264Encode la vidéo en H.264, que tous les lecteurs et navigateurs peuvent afficher.
-preset veryfastSacrifie un peu de qualité au profit de la vitesse pour que l'ordinateur suive en temps réel. Essayez faster ou medium si vous avez de la puissance CPU disponible.
-b:v 2500k -maxrate 2500k -bufsize 5000kMaintient la vidéo autour d'un débit stable de 2 500 kbps, afin que le flux ne demande jamais plus de bande passante montante que vous n'en avez. L'étape 04 donne des valeurs pour chaque résolution.
-pix_fmt yuv420pLe format de couleur attendu par les téléphones, les téléviseurs et les navigateurs.
-force_key_frames "expr:gte(t,n_forced*2)"Une image clé toutes les 2 secondes, quelle que soit la fréquence d'images. La lecture est découpée en segments sur les images clés, c'est donc l'option la plus importante.
-sc_threshold 0Empêche les images clés supplémentaires lors des changements de scène, afin que le rythme de 2 secondes reste fixe.
-c:a aac -b:a 128k -ar 44100 -ac 2Audio stéréo AAC à 128 kbps et 44,1 kHz. L'encodeur AAC intégré de FFmpeg ne nécessite aucune option supplémentaire.
-f flvEncapsule le flux en FLV, le format transporté par RTMP.

Les guides plus anciens, y compris la première version de cette page, ajoutent -strict experimental pour l'AAC. FFmpeg a retiré l'étiquette expérimentale de son encodeur AAC dans la version 3.0, vous pouvez donc l'omettre.

03

Choisissez votre source : fichier, webcam, écran ou caméra IP

Seule la partie d'entrée change. Dans chaque exemple, [encoding] représente les options vidéo et audio de l'étape 02, et RTMP_ADDRESS votre adresse entre guillemets.

Diffuser un fichier vidéo avec FFmpeg

Ajoutez -stream_loop -1 avant l'entrée pour le lire en boucle jusqu'à ce que vous arrêtiez FFmpeg.

fichier
ffmpeg -re -stream_loop -1 -i video.mp4 \ [encoding] -f flv "RTMP_ADDRESS"

Webcam sous Windows

Listez d'abord vos périphériques, puis utilisez les noms exacts qu'il affiche.

windows · dshow
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f dshow -rtbufsize 256M ^ -i video="Your Camera":audio="Your Microphone" ^ [encoding] -f flv "RTMP_ADDRESS"

Webcam sous macOS

La liste affiche chaque caméra et microphone avec un numéro. "0:0" signifie caméra 0 et microphone 0.

macos · avfoundation
ffmpeg -f avfoundation -list_devices true -i ""
ffmpeg -f avfoundation -framerate 30 \ -video_size 1280x720 -i "0:0" \ [encoding] -f flv "RTMP_ADDRESS"

Webcam sous Linux

Vidéo depuis le périphérique caméra, son depuis l'entrée par défaut de votre bureau.

linux · v4l2
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 \ -i /dev/video0 -f pulse -i default \ [encoding] -f flv "RTMP_ADDRESS"

Votre écran sous Windows

Capture tout le bureau à 30 images par seconde. Ajoutez un microphone avec une seconde entrée dshow si vous voulez du son.

windows · gdigrab
ffmpeg -f gdigrab -framerate 30 -i desktop ^ [encoding] -f flv "RTMP_ADDRESS"

Caméra IP via RTSP

Si la caméra envoie déjà du H.264 avec un intervalle d'images clés de 2 secondes (réglé dans son propre menu), copiez la vidéo telle quelle et n'encodez que le son. Sinon, utilisez les options d'encodage complètes.

caméra rtsp
ffmpeg -rtsp_transport tcp \ -i "rtsp://CAM_USER:CAM_PASS@192.168.1.64:554/stream1" \ -c:v copy -c:a aac -b:a 128k \ -f flv "RTMP_ADDRESS"

Pas de microphone sur la caméra ? Remplacez les options audio par -an.

Les exemples terminent les lignes par \ (macOS et Linux) ou ^ (invite de commandes Windows). Dans PowerShell, ou en cas de doute, mettez toute la commande sur une seule ligne.

04

Réglages d’encodeur FFmpeg qui tiennent en direct

Choisissez une ligne adaptée à votre débit montant. Gardez un tiers de votre upload libre : si un test de vitesse indique 6 Mbps, n’envoyez pas plus d’environ 4.

Débits vidéo et audio FFmpeg suggérés par résolution
ImageÀ ajouter à la commandeVidéoAudioUpload nécessaire
1080p, 30 i/s-vf scale=-2:1080 -r 304500k128k7 Mbps
720p, 30 i/s-vf scale=-2:720 -r 302500k128k4 Mbps
480p, 30 i/s-vf scale=-2:480 -r 301200k96k2 Mbps

Définissez -b:v et -maxrate sur le chiffre vidéo et -bufsize sur le double. La commande de l’étape 02 correspond à la ligne 720p. Les offres payantes de vidéo en direct acceptent jusqu’à 5 Mbps en entrée, de quoi couvrir la ligne 1080p.

Trois règles qui évitent la plupart des mises en mémoire tampon

  1. Gardez des images clés fixes à 2 secondes. Un intervalle long ou irrégulier se traduit par des blocages pour vos spectateurs, et de votre côté cela ressemble à une panne de serveur.
  2. Maintenez un débit stable avec -maxrate et -bufsize, pour qu’une scène chargée ne dépasse pas votre upload.
  3. Surveillez le chiffre speed= dans la ligne d’état de FFmpeg. Il doit rester à 1x. En dessous, votre ordinateur ne peut pas encoder en temps réel.

Laissez votre GPU encoder

Si speed= passe sous 1x, remplacez -c:v libx264 -preset veryfast par l’encodeur matériel de votre ordinateur. Le CPU est alors libre pour tout le reste.

GPU NVIDIA
-c:v h264_nvenc -preset p4
Graphiques Intel
-c:v h264_qsv
Mac
-c:v h264_videotoolbox

Lancez ffmpeg -encoders pour voir lesquels votre build inclut.

05

Envoyez plutôt un flux SRT avec FFmpeg

SRT maintient un flux stable sur des liaisons longues ou avec pertes, comme le Wi-Fi d’un lieu, une connexion mobile ou un flux venu d’un autre continent, là où RTMP a tendance à se bloquer. Il est inclus dans les offres Pro et Platinum de notre CDN vidéo.

Votre carte de diffusion en direct comporte alors une section Ingestion SRT avec votre propre port et votre phrase secrète. Copiez son URL en une ligne et utilisez-la comme sortie, avec MPEG-TS à la place de FLV. Les options d’encodage restent les mêmes.

Un flux SRT est lu sous son propre nom, utilisez donc le lien de lecture affiché à côté, sous Lecture à.

ffmpeg · srt
ffmpeg -re -i input.mp4 \ [encoding] \ -f mpegts \ "srt://HOST:PORT?passphrase=PASSPHRASE&pbkeylen=16"

Votre build FFmpeg doit prendre en charge SRT. Vérifiez avec ffmpeg -protocols et cherchez srt dans la liste de sortie.

06

Vérifiez que vous êtes en direct, et corrigez ce qui ne va pas

  1. Lancez FFmpeg et laissez la fenêtre ouverte. Une ligne d’état qui continue de compter frame= et time= signifie que l’envoi est en cours.
  2. Ouvrez la carte de diffusion en direct. En moins de 15 secondes, elle doit indiquer en direct et afficher ce que votre encodeur envoie, proche de votre débit.
  3. Copiez le lien de lecture depuis le même panneau et ouvrez-le dans VLC (Média, Ouvrir un flux réseau) ou lancez ffplay "PLAYBACK_LINK". Le panneau vous fournit aussi un code d’intégration pour votre propre site.
Problèmes courants de diffusion FFmpeg et leurs solutions
Ce que vous voyezQue faire
FFmpeg s’arrête aussitôt avec une erreur de connexion ou d’E/SVérifiez l’hôte et le nom de l’application lettre par lettre. Certains réseaux de bureau ou d’hôtel bloquent le port 1935 : essayez une autre connexion.
Il se connecte, puis le serveur refuse le fluxLe nom d’utilisateur ou le mot de passe est incorrect, ou le mot de passe contient un caractère à encoder. Cliquez sur Nouveau mot de passe, mettez à jour la commande et réessayez.
speed= reste bien au-dessus de 1x sur un fichierVous avez oublié -re. Ajoutez-le avant -i.
speed= reste en dessous de 1xUtilisez un préréglage plus rapide (superfast), une ligne plus basse de l’étape 04, ou l’encodeur de votre GPU.
FFmpeg semble fonctionner mais les spectateurs ont des coupuresVérifiez les options d’images clés, puis baissez le débit. Votre upload est peut-être plus lent que vous ne le pensez à cette heure-là.
Le flux se termine quand le fichier se termineAjoutez -stream_loop -1 avant -i.
07

Questions sur le streaming FFmpeg

Comment diffuser vers un serveur RTMP avec FFmpeg ?

Encodez en H.264 et AAC, enveloppez la sortie en FLV avec -f flv, et donnez à FFmpeg l’adresse RTMP comme dernier argument. Pour une chaîne Primcast, l’adresse se compose de votre serveur, de l’application et du nom du flux, avec votre nom d’utilisateur et votre mot de passe devant l’hôte : rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream.

Où trouver mon adresse de serveur, mon nom d’utilisateur et mon mot de passe ?

Dans votre compte, sur la carte Live streaming de votre compte vidéo, sous Encoder settings. Le mot de passe reste masqué jusqu’à ce que vous cliquiez sur Show, et New password vous en donne un nouveau. Le flux en direct continue de tourner, et le nouveau mot de passe s’applique à la prochaine connexion.

Ai-je encore besoin de -strict experimental pour l’audio AAC ?

Non. L’encodeur AAC propre à FFmpeg a perdu son étiquette expérimentale dans FFmpeg 3.0, sorti en 2016. Un simple -c:a aac fonctionne sur toutes les versions actuelles, vous pouvez donc retirer ce drapeau des anciennes commandes.

Quel intervalle d’images clés FFmpeg doit-il utiliser pour le direct ?

Un intervalle fixe de 2 secondes. Nous découpons les segments de lecture sur les images clés, donc un intervalle plus long ou irrégulier se traduit par des blocages pour vos spectateurs. Utilisez -force_key_frames "expr:gte(t,n_forced*2)" avec -sc_threshold 0, ou -g réglé sur le double de votre fréquence d’images.

À quel débit binaire dois-je diffuser ?

Environ 2 500 kbps pour le 720p et 4 500 kbps pour le 1080p à 30 images par seconde, plus 128 kbps d’audio. Gardez le total à deux tiers de votre débit montant mesuré afin qu’un ralentissement momentané de votre ligne n’interrompe pas le flux.

Comment lire un fichier vidéo en boucle 24 h/24 avec FFmpeg ?

Placez -re -stream_loop -1 avant -i et FFmpeg relit le fichier jusqu’à ce que vous l’arrêtiez. Cela occupe toutefois un ordinateur toute la journée. Les offres payantes de CDN vidéo incluent des chaînes de télévision 24 h/24 et 7 j/7 qui diffusent vos vidéos depuis notre côté à la place.

FFmpeg peut-il encoder le flux sur mon GPU ?

Oui. Utilisez h264_nvenc sur un GPU NVIDIA, h264_qsv sur les graphiques Intel ou h264_videotoolbox sur un Mac, à la place de libx264. Les drapeaux d’images clés et de débit restent les mêmes.

Puis-je envoyer du SRT au lieu du RTMP ?

Oui, sur les offres Pro et Platinum du CDN vidéo. Votre panneau vous donne un port SRT et une phrase secrète. Utilisez -f mpegts et l’URL srt:// en une ligne du panneau comme sortie.

08

Vous préférez une fenêtre à une ligne de commande ?

La même chaîne fonctionne avec n’importe quel encodeur compatible RTMP. Ces tutoriels reprennent les quatre mêmes valeurs.

Besoin d’une chaîne vers laquelle diffuser ?

Ouvrez une chaîne vidéo, collez vos valeurs dans la commande et jugez vous-même de l’image. Bloqué sur un drapeau ? Notre chat répond en quelques secondes et peut consulter votre chaîne pendant que vous attendez, et une personne prend le relais dès que vous le demandez.