--- categories: video audio stream flux title: Howto FFmpeg ... [FFmpeg](http://ffmpeg.org) est un outil en CLI permettant d'enregistrer, convertir et streamer des flux vidéos et audio. * Statut de la page : nouvelle. * [Documentation officielle](https://ffmpeg.org/ffmpeg.html) * [Wiki officiel](https://trac.ffmpeg.org/wiki) # Installer FFmpeg ~~~ # apt install ffmpeg ~~~ # Utiliser FFmpeg ## Syntaxe générale La syntaxe de la commande est la suivante : ~~~ $ ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... ~~~ On passe en option plusieurs flux d'entrée et de sortie. Les flux d'entrée sont ré-encodés et redirigés vers les sorties (en fonction des options). Chaque flux d'entrée est déclaré d'abord avec ses options et un `-i ` final (« URL » est à prendre au sens large). Idem pour chaque flux de sortie, mais sans le `-i`. ## Lister les formats et les codecs supportés ~~~ $ ffmpeg -formats ~~~ On peut aussi lister les codecs pour l'encodage et le décodage avec : ~~~ $ ffmpeg -decoders $ ffmpeg -encoders ~~~ ## Enregistrer du son à partir d'un micro Pour la capture audio, on utilise les flux fournis par le serveur de son [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/), qui fait le lien avec les pilotes ALSA des périphériques audio. Lister les périphériques d'entrée de PulseAudio : ~~~ $ pactl list short sources | grep input ~~~ Il est possible de fournir à FFmpeg le numéro du périphérique audio (colonne 1, par exemple : `1`) ou bien son nom complet (colonne 2, par exemple : `alsa_input.pci-0000_00_1f.3.analog-stereo`) : Puis lancer un enregistrement (voir [Lister les formats et les codecs supportés](https://wiki.evolix.org/HowtoFFmpeg#lister-les-formats-et-les-codecs-support%C3%A9s) pour les formats supportés en sortie) : ~~~ $ ffmpeg -f pulse -i $ # Par exemple : $ ffmpeg -f pulse -i 1 output.wav ~~~ Utiliser `Ctrl+c` pour stopper l'enregistrement. Les blocs d'arguments indiqués dans la section [Syntaxe générale](#syntaxe-générale) sont les suivants : ~~~ (Entrée audio ) (Flux de sortie) $ ffmpeg (-f pulse -i 1) (output.wav) ~~~ ## Enregistrer une discussion audio En plus de la source du micro, on ajoute la sortie audio comme seconde source avec un autre bloc d'arguments `-i`. Lister les périphériques d'entrée et de sortie de PulseAudio : ~~~ $ pactl list short sources | grep -E "(in|out)put" ~~~ Il est possible de fournir à FFmpeg le numéro des périphériques audio (colonne 1) ou bien leur nom complet (colonne 2). Le nom du périphérique de sortie audio de sortie à utiliser contient normalement `.monitor` (par exemple : `alsa_output.pci-0000_00_1f.3.analog-stereo.monitor`) : Il faut également indiquer comme option de sortie `-filter_complex amix=inputs=2` pour dire à FFmpeg de fusionner les deux entrées audio. ~~~ $ ffmpeg -f pulse -i -f pulse -i -filter_complex amix=inputs=2 $ # Par exemple : $ ffmpeg -f pulse -i 1 -f pulse -i 2 -filter_complex amix=inputs=2 output.wav ~~~ Utiliser `Ctrl+c` pour stopper l'enregistrement. Les blocs d'arguments indiqués dans la section [Syntaxe générale](#syntaxe-générale) sont les suivants : ~~~ (Entrée audio ) (Sortie audio ) ( Flux de sortie ) $ ffmpeg (-f pulse -i 1) (-f pulse -i 2) (-filter_complex amix=inputs=2 output.wav) ~~~ ## Enregistrer une vidéo à partir d'un affichage Xorg Pour la capture vidéo (image seulement, sans le son), on utilise les flux fournis fournis par le serveur graphique [Xorg](https://www.x.org/wiki/). Lister les écrans connectés et identifier la résolution (par exemple `2560x1080`) et le décalage (par exemple `+2560+0`) de l'écran à enregistrer : ~~~ $ xrandr | grep -E "[[:space:]]connected" ~~~ Puis lancer un enregistrement (voir [Lister les formats et les codecs supportés](https://wiki.evolix.org/HowtoFFmpeg#lister-les-formats-et-les-codecs-support%C3%A9s) pour les formats supportés en sortie) : ~~~ $ ffmpeg -f x11grab -video_size -i :0.0 $ # Par exemple : $ ffmpeg -f x11grab -video_size 2560x1080 -i :0.0+2560+0 output.webm ~~~ Utiliser `Ctrl+c` pour stopper l'enregistrement (la clôture prend un peu de temps pour l'encodage, ne pas forcer l'arrêt en faisant 2 fois `Ctrl+c`). ## Enregistrer une visioconférence (audio + vidéo) Combiner les options des sections [Enregistrer une discussion audio](#enregistrer-une-discussion-audio) et [Enregistrer une vidéo à partir d’un affichage Xorg](#enregistrer-une-vidéo-à-partir-dun-affichage-xorg) (voir ces sections pour trouver les bons arguments) : ~~~ $ ffmpeg -f pulse -i -f pulse -i # flux audio en entrée \ -f x11grab -video_size -i :0.0 # flux vidéo en entrée \ -filter_complex amix=inputs=2 # flux audio+vidéo en sortie $ # Par exemple : $ ffmpeg -f pulse -i 1 -f pulse -i 2 -f x11grab -video_size 2560x1080 -i :0.0+2560+0 -filter_complex amix=inputs=2 output.webm ~~~ Utiliser `Ctrl+c` pour stopper l'enregistrement (la clôture prend un peu de temps pour l'encodage, ne pas forcer l'arrêt en faisant 2 fois `Ctrl+c`). Les blocs d'arguments indiqués dans la section [Syntaxe générale](#syntaxe-générale) sont les suivants : ~~~ (Entrée audio ) (Sortie audio ) ( Vidéo ) ( Flux de sortie ) $ ffmpeg (-f pulse -i 1) (-f pulse -i 2) (-f x11grab -video_size 2560x1080 -i :0.0+2560+0) (-filter_complex amix=inputs=2 output.webm) ~~~