wiki/HowtoFFmpeg.md
2023-03-29 19:10:30 +02:00

128 lines
3.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
~~~
Le découpage des blocs d'arguments est le suivant :
~~~
$ ffmpeg (-f pulse -i 1) (output.wav)
~~~
Utiliser `Ctrl+c` pour stopper l'enregistrement.
## 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
~~~
Le découpage des blocs d'arguments est le suivant :
~~~
$ ffmpeg (-f pulse -i 1) (-f pulse -i 2) (-filter_complex amix=inputs=2 output.wav)
~~~
Utiliser `Ctrl+c` pour stopper l'enregistrement.
## 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 taille (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 <SIZE> -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`).