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 -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.
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.
# 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.
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.
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.
| Option | Son rôle |
|---|---|
-re | Lit 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.mp4 | Votre entrée : un fichier, un périphérique ou un autre flux. L'étape 03 en présente un pour chaque cas. |
-c:v libx264 | Encode la vidéo en H.264, que tous les lecteurs et navigateurs peuvent afficher. |
-preset veryfast | Sacrifie 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 5000k | Maintient 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 yuv420p | Le 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 0 | Empê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 2 | Audio 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 flv | Encapsule 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.
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.
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.
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.
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.
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.
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.
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.
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.
| Image | À ajouter à la commande | Vidéo | Audio | Upload nécessaire |
|---|---|---|---|---|
| 1080p, 30 i/s | -vf scale=-2:1080 -r 30 | 4500k | 128k | 7 Mbps |
| 720p, 30 i/s | -vf scale=-2:720 -r 30 | 2500k | 128k | 4 Mbps |
| 480p, 30 i/s | -vf scale=-2:480 -r 30 | 1200k | 96k | 2 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
- 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.
- Maintenez un débit stable avec
-maxrateet-bufsize, pour qu’une scène chargée ne dépasse pas votre upload. - 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.
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 -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.
Vérifiez que vous êtes en direct, et corrigez ce qui ne va pas
- Lancez FFmpeg et laissez la fenêtre ouverte. Une ligne d’état qui continue de compter
frame=ettime=signifie que l’envoi est en cours. - 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.
- 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.
| Ce que vous voyez | Que faire |
|---|---|
| FFmpeg s’arrête aussitôt avec une erreur de connexion ou d’E/S | Vé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 flux | Le 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 fichier | Vous avez oublié -re. Ajoutez-le avant -i. |
speed= reste en dessous de 1x | Utilisez 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 coupures | Vé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 termine | Ajoutez -stream_loop -1 avant -i. |
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.
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.