Screencast, capturer son écran avec ffmpeg
Par makoto doushite le vendredi, 16 avril 2010, 22:09 - GNU/Linux - Lien permanent
Screencast ou capturer une vidéo de son écran est bien utile quand on veut faire des démonstrations vidéo.
Plusieurs logiciel existent, comme istanbul ou recordmydesktop qui capturent puis compressent une vidéo de l'écran directement en ogg (théora+vorbis)
Mais malgré tous les tests effectués aucun d'eux ne m'a donné satisfaction… trop d'images perdues, vidéo saccadée, résolution trop petite… etc
J'ai alors lut parlé qu'on pouvait faire la même chose avec ffmpeg, en ligne de commande donc… ahhh cette fameuse ligne de commande Ô combien puissante et pratique, qui fait si peur aux noob et nous fait passer pour des bêtes curieuses.
Seulement voila, de base, la version de ffmpeg disponible dans mon système d'exploitation ne dispose pas de ce qu'il faut pour capturer l'écran, c'est à dire x11grab.
Il faut donc compiler les source de ffmpeg avec les options nécessaire… après pas mal de tentatives infructueuses, j'ai découvert sur le Planet Ubuntu qu'il fallait des sources patchées.
j'étais tellement content de l'avoir trouvé que j'ai repris une partie de cet article ^^
http://planet.ubuntu-fr.org/post/2006/09/21/Faire-du-screencast-sous-Ubuntu
On installe les paquets nécessaires :
$ sudo apt-get install build-essential xlibs-dev ffmpeg
On crée le répertoire nécessaire :
$ mkdir screencap && cd screencap
On récupère le fichier de source et on l'extrait :
$ wget http://lecoindespotes.free.fr/ubuntu/screencast/ffmpeg-0.4.9-p20051216.tar.bz2 && tar xjfv ffmpeg-0.4.9-p20051216.tar.bz2 && cd ffmpeg-0.4.9-p20051216
Il faut maintenant le patcher afin de lui permettre de faire du screen capture :
$ wget http://lecoindespotes.free.fr/ubuntu/screencast/ffmpeg-0.4.9-p20051216.diff && patch -Np1 -i ffmpeg-0.4.9-p20051216.diff
Il ne nous reste plus qu'à compiler :
$ ./configure --extra-ldflags=-L/usr/X11R6/lib --enable-x11grab --enable-gpl && make
Il se peut que la compilation se passe mal, vérifiez que vous ayez un executable ffmpeg, le reste du paquet ne nous intéresse pas vraiment. On obtient alors un exécutable 'ffmpeg'
Pour lancer une capture, il suffit de taper ce genre de commande :
$ ./ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi
La puissance de la «ligne de commande», c'est qu'on va pouvoir customiser la capture !
Par exemple, j'ai utilisé ça :
$ ./ffmpeg -acodec pcm_s16le -vcodec mpeg4 -b 1000 -r 25 -g 300 -vd x11:0,0 -s 1280x960 ~/screencast004.avi
La capture sonore en PCM 16 bits à été ajoutée :
- -acodec pcm_s16le
La capture vidéo est en MPEG4
- -vcodec mpeg4
25 images/secondes sont capturées :
- -r 25
La taille de la vidéo est adaptée à la résolution de mon écran :
- -s 1280x960
Même commande, sans l'audio, qui m'a servit à capturer le tuto cinelerra
$ ./ffmpeg -an -vcodec mpeg4 -b 1000 -r 25 -g 300 -vd x11:0,0 -s 1280x960 ~/screencast008.avi
La commande
$ ./ffmpeg -formats
donne la liste des codecs utilisable à la capture, reste à tester et choisir ceux qui vous conviennent !
Malgré ces paramètres exigeant en ressources, la capture est parfaite, alors que les logiciels cités plus haut ont étés bien incapable de faire le 1/4 de ce qu'a réalisé cette commande ffmpeg :)