150 lines
5.2 KiB
Markdown
150 lines
5.2 KiB
Markdown
---
|
||
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 <INPUT_URL>` 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 flux PulseAudio, et identifier le numéro de périphérique de votre micro :
|
||
|
||
~~~
|
||
$ pactl list short sources | grep input | awk '{print $1}'
|
||
~~~
|
||
|
||
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 <SOURCE_NUMBER> <OUTPUT_FILE>
|
||
|
||
$ # 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 flux PulseAudio, et identifier le numéro de périphérique de votre micro et de votre sortie audio :
|
||
|
||
~~~
|
||
$ pactl list short sources | grep -E "(in|out)put" | awk '{print $1}'
|
||
~~~
|
||
|
||
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 <INPUT_SOURCE_NUMBER> -f pulse -i <OUTPUT_SOURCE_NUMBER> -filter_complex amix=inputs=2 <OUTPUT_FILE>
|
||
|
||
$ # 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, 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 <SCREEN_RESOLUTION> -i :0.0<OFFSET> <OUTPUT_FILE>
|
||
$ # 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 ) :
|
||
|
||
~~~
|
||
$ ffmpeg -f pulse -i <INPUT_SOURCE_NUMBER> -f pulse -i <OUTPUT_SOURCE_NUMBER> -f x11grab -video_size <SCREEN_RESOLUTION> -i :0.0<OFFSET> -filter_complex amix=inputs=2 <OUTPUT_FILE>
|
||
$ # 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)
|
||
~~~
|
||
|
||
|