Pour enregistrer des tutoriels vidéo de code, je cherche une méthode pour enregistrer mon écran et produire des vidéos dont le texte soit lisible et les fichiers le plus légers possibles.
Dans une première étape j'utilise SimpleScreenRecorder de Maarten Baert, puis la vidéo enregistrée est recompressée avec ffmpeg pour réduire le poids du fichier.
L'installation depuis les dépôts se déroule sans (mauvaise) surprise
# Debian Stretch 9.5 @ kirin / 20201110 sudo apt-get install simplescreenrecorder
Dépôt de code du projet : https://github.com/MaartenBaert/ssr
Quelques réglages à faire dans SimpleScreenRecorder pour enregistrer une vidéo encodée en h.264 en gardant la définition de l'écran (1600×900). Il me semble que le réglage le plus significatif est celui du crf (constant rate factor) car il influence beaucoup la compression, donc la taille du fichier final.
N'y connaissant pas grand chose en h.264, je ne sais pas exactement ce que ça signifie, en tout cas crf=23 donne de très bons résultats, les caractères de texte sont lisibles, alors que crf=30 produit un fichier plus léger (100 Mo pour 1:30) mais rajoute de nombreux artefacts de compression.
Avec crf=23, une vidéo de 1:30 en définition 1600×900 produit un fichier de 144 Mo, on peut donc établir avec ces réglages que 1 minute = 100 Mo
Pour enregistrer le son “qui sort”, choisir “Monitor of Audio Interne Stereo Analogique”
ffmpeg est utilisé pour réduire le poids du fichier sans changer la définition.
Après différents essais de bitrate, un très bon résultat lisible est donné en choisissant un bitrate vidéo de 500k (-b:v 500k), le fichier est réduit 144 Mo à 6,5 Mo !
# ffmpeg version 3.2.15-0+deb9u1 / debian 9.5 stretch @ kirin / 20201110 ffmpeg -i ./test_crf23.mp4 -b:v 500k test_crf23_red500k.mp4 # encore bien lisible + 144 > 6.5 Mo
(D'autres résultats de tests : -b:v 5000k donne un fichier de 23Mo, -b:v 2000k donne un fichier de 20 Mo ; en revanche en réduisant la définition, les caractères de texte deviennent un peu flous, ce n'est pas l'effet recherché)
Variante avec réencodage en 44100
# ffmpeg version 3.2.15-0+deb9u1 / debian 9.5 stretch @ kirin / 20220511 ffmpeg -i ./scratch_autoportrait_pierre.mp4 -b:v 500k -ar 44100 test.mp4
Pour aller plus loin, une explication du CRF : https://slhck.info/video/2017/02/24/crf-guide.html
Options reconnues par SimpleScreenRecorder : https://www.maartenbaert.be/simplescreenrecorder/custom-codec-options/
SimpleScreenRecorder permet aussi d'enregistrer en openGL (les jeux par exemple) : https://en.wikipedia.org/wiki/SimpleScreenRecorder