From 68c23cf36a689afa1b9617ae07e3b329a3a690f0 Mon Sep 17 00:00:00 2001 From: jlecour Date: Mon, 13 Mar 2017 09:25:02 +0100 Subject: [PATCH] =?UTF-8?q?Script=20pour=20capture=20compl=C3=A8te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoEnregistrerPresentation.md | 45 ++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/HowtoEnregistrerPresentation.md b/HowtoEnregistrerPresentation.md index 235c16d8..e86c675c 100644 --- a/HowtoEnregistrerPresentation.md +++ b/HowtoEnregistrerPresentation.md @@ -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