18
0
Fork 0

Script pour capture complète

This commit is contained in:
jlecour 2017-03-13 09:25:02 +01:00
parent 723e57b3bb
commit 68c23cf36a
1 changed files with 38 additions and 7 deletions

View File

@ -52,13 +52,13 @@ Pour capter la vidéo de ce qui est présenté (sur le projecteur), nous utiliso
Le flux vidéo est géré par [x11grab](https://ffmpeg.org/ffmpeg-devices.html#x11grab). Il faut lui indiquer quelle partie de l'affichage il faut capturer :
Avec un écran interne (à gauche) d'une résolution de "1360×768" et un vidéoprojecteur d'une résolution de "1920x1080", les paramètres FFmpeg sont :
Avec un écran interne (à gauche) d'une résolution de "1360×768" et un vidéo-projecteur d'une résolution de "1920x1080", les paramètres FFmpeg sont :
~~~
$ ffmpeg […] -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0+1360,0 […]
~~~
On indique donc une zone de capture de la taille de l'écran externe, décallée de 1360 pixels vers la droite. Sans ce décallage, x11grab capturait à partir du coin haut-gauche de l'écran interne.
On indique donc une zone de capture de la taille de l'écran externe, décalée de 1360 pixels vers la droite. Sans ce décalage, x11grab capturait à partir du coin haut-gauche de l'écran interne.
Il est possible de générer ces dimensions et positions de manière automatique :
@ -81,9 +81,11 @@ screen_pos_x=$(echo ${screen_geometry} | cut -d '+' -f 2)
screen_pos_y=$(echo ${screen_geometry} | cut -d '+' -f 3)
screen_pos="${screen_pos_x},${screen_pos_y}"
echo ffmpeg […] -video_size ${screen_size} -framerate 30 -f x11grab -i :0.0+${screen_pos} […]
ffmpeg […] -video_size ${screen_size} -framerate 30 -f x11grab -i :0.0+${screen_pos} […]
~~~
Il est possible de limiter le "framerate" (nombre d'images capturées par seconde) si vous constatez des frames perdues et si la présentation capturée le permet. Préférez alors 25 ou 15 images par secondes pour limiter les soucis d'interpolation de frames au montage.
#### Encodage
Le choix du codec vidéo est large, selon ce qu'on veut faire avec la vidéo.
@ -126,7 +128,7 @@ $ ffmpeg -f pulse -i $(pulse_input_yeti) […]
**Idées d'amélioration**
Nous envisageons d'utiliser un ou plusieurs micro-cravates pour une meilleur captation du ou des présentateurs. Pour éviter le risque du fil qui se balade, on peut faire une captation avec le micro-cravate branhé sur un smartphone. La piste son sera alors récupérée séparément pour le montage.
Nous envisageons d'utiliser un ou plusieurs micro-cravates pour une meilleur captation du ou des présentateurs. Pour éviter le risque du fil qui se balade, on peut faire une captation avec le micro-cravate branché sur un smartphone. La piste son sera alors récupérée séparément pour le montage.
#### Encodage
@ -140,11 +142,40 @@ $ ffmpeg […] -c:a pcm_s16le […]
Nous faisons là une capture du vidéo-projecteur en _Full-HD_ et du micro Yeti branché en USB.
Nous recommandons que FFMpeg enregistre son résultat sur un disque rapide pour éviter les pertes de _frames_.
~~~{.bash}
#!/bin/sh
output_file=/localhome/jlecour/tmp/capture.mov
screen_name=${1:-HDMI2}
mic_input=$(pulse_input_yeti)
if [ -z ${mic_input} ]; then
echo "Yeti microphone is disconnected"
exit 1
fi
xrandr_info=$(xrandr | grep ${screen_name})
screen_state=$(echo ${xrandr_info} | cut -d ' ' -f 2)
if [ $screen_state != "connected" ]; then
echo "Screen ${screen_name} is disconnected"
exit 2
fi
screen_geometry=$(echo ${xrandr_info} | cut -d ' ' -f 4)
screen_size=$(echo ${screen_geometry} | cut -d '+' -f 1)
screen_pos_x=$(echo ${screen_geometry} | cut -d '+' -f 2)
screen_pos_y=$(echo ${screen_geometry} | cut -d '+' -f 3)
screen_pos="${screen_pos_x},${screen_pos_y}"
echo "Starting capture of ${screen_name} (${screen_size}) and Yeti microphone to ${output_file}"
echo "=========="
ffmpeg -f pulse -i $(pulse_input_yeti) -video_size ${screen_size} -framerate 30 -f x11grab -i :0.0+${screen_pos} -c:v prores -c:a pcm_s16le ${output_file}
~~~
$ ffmpeg -f pulse -i $(pulse_input_yeti) -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0+1360,0 -c:v prores -c:a pcm_s16le /path/to/fast/disk/capture.mov
~~~
Nous recommandons que FFmpeg enregistre son résultat sur un disque rapide pour éviter les pertes de _frames_.
## Vidéo/son d'ensemble