Comment faire un screencast avec ffmpeg

Pour ceux qui ne savent pas, un screencast il s'agit d'un enregistrement numérique de la sortie d'un écran d'ordinateur, contenant parfois une narration audio.

En Linux/Unix, il y a plusieurs outils à faire projection d'écran. Cependant, ceux qui préfèrent le faire consommant un minimum de ressources ils ne peuvent pas arrêter de lire cet article.


En utilisant 2 outils (ffmpeg pour capturer l'écran et xwininfo pour obtenir les coordonnées et les dimensions de la fenêtre à enregistrer) j'ai réussi à faire des screencasts en utilisant un minimum de ressources et en obtenant des résultats optimaux.

Le script pour démarrer le screencast

#! / Bin / bash

# Obtenir les coordonnées et la taille de la fenêtre sélectionnée
# Ceci exclut la décoration de fenêtre.
  unset xywh
  eval $ (xwininfo -frame |
    sed -n -e "s / ^ + X absolu en haut à gauche: + ([0-9] +). * / x = 1 / p"
           -e "s / ^ + Y absolu supérieur gauche: + ([0-9] +). * / y = 1 / p"
           -e "s / ^ + Largeur: + ([0-9] +). * / w = 1 / p"
           -e "s / ^ + Hauteur: + ([0-9] +). * / h = 1 / p")
$ w = $ w + $ w% 2 # que la largeur est un multiple de 2, sinon ffmpeg se plaint
WIN_XY = $ x "," $ y # format XY
WIN_GEO = $ w "x" $ h # format de la fenêtre
# notify-send affichera un message indiquant le début du screencast.
# lancez ffmpeg avec les paramètres qui correspondent à votre configuration.
notify-send "Démarrage du screencast ..." && ffmpeg -f alsa -i hw: 0 -f x11grab -r 25 -s $ WIN_GEO -i: 0.0 + $ WIN_XY -acodec libmp3lame -async 1 -vcodec libx264 -preset ultra-rapide - crf 0 -threads 0 save.mp4

Vous n'avez pas besoin de bien comprendre tout ce que fait ce script. Il suffit de suivre les commentaires. Cependant, il est très possible que vous deviez changer certains paramètres dans la ligne où ffmpeg est exécuté pour les ajuster à la configuration de votre machine.

Architecture audio

1) Si vous utilisez OSS, remplacez -f alsa -i hw: 0 par -f oss -i / dev / dsp

2) Si vous utilisez uniquement ALSA, vous devez utiliser les paramètres fournis dans le script (-f alsa -i hw: 0). Pour déterminer le nombre après hw: vous pouvez exécuter aplay -l et choisir le numéro de la carte son appropriée.

3) Si vous utilisez Pulse Audio (Ubuntu et ses dérivés l'utilisent), utilisez les paramètres -f alsa -ac 1 -i pulse.

Images/seconde

-r 25 indique les images par seconde (images par seconde ou images par seconde) auxquelles vous souhaitez enregistrer. 25 est une bonne option.

Codec audio, vidéo et sync

-acodec libmp3lame est le codec audio. J'ai choisi de l'enregistrer en mp3. Vous pouvez utiliser n'importe quel autre.

-async 1 permet la synchronisation de l'audio avec la vidéo.

-vcodec libx264 -preset ultra-rapide -crf 0 -threads 0, indique à ffmpeg que le codec vidéo à utiliser est x264 et que le préréglage est ultra-rapide (il est rapide, lent, etc.), sinon il n'enregistrera pas correctement à la quantité souhaitée de fps. Le paramètre -crf 0 indique le niveau de compression (plus la compression est basse, plus la compression est basse). Enfin, threads 0 indique le nombre de threads à utiliser, en passant 0 ffmpeg le calcule automatiquement. Comme pour les paramètres audio, vous pouvez choisir d'autres options.

Tous ces paramètres sont ceux qui m'ont donné les meilleurs résultats: un fichier relativement petit, une bonne qualité vidéo, avec un son synchronisé et sans décalage. Cependant, je vous recommande de vous plonger dans la documentation ffmpeg pour en découvrir d'autres.

Le script pour terminer le screencast

#! / Bin / bash
notify-send "Fin du screencast ..." && killall ffmpeg
Pour que les deux scripts fonctionnent, vous devez avoir installé notify-send. Toutes les distributions dérivées d'Ubuntu doivent être livrées avec cet outil installé. Dans Arch et dérivés: sudo pacman -S libnotify.

ffcast

Cherchant des informations pour écrire les scripts, j'ai découvert que quelqu'un avait une idée très similaire à la mienne. Ffcast est un script qui utilise les mêmes outils (ffmpeg et xwininfo). Je le mentionne car certains trouveront peut-être plus pratique d'utiliser ce script.

Dans Arch et dérivés, j'ai ouvert un terminal et exécuté:

yaourt -S ffcast

Le reste, vous pouvez télécharger à partir de ici !.

Pour terminer…

Une fois que vous avez créé et enregistré les scripts enregistrés dans votre dossier HOME, vous devez lui accorder des autorisations d'exécution. En supposant que start_screencast et finish_screencast sont appelés, exécutez les commandes suivantes dans un terminal:

chmod + x start_screencast
chmox + x terminate_screencast

Enfin, il ne reste plus qu'à attribuer à chacun des scripts 2 raccourcis (raccourcis) qui vous conviennent. De cette façon, les scripts s'exécuteront lorsque vous appuyez sur la combinaison de touches sélectionnée.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Michel Sp. dit

    Depuis que j'ai appris à connaître Linux, je me suis demandé exactement la même chose qui vient d'être détaillée dans ce commentaire. ce serait un projet ambitieux.

  2.   pmf dit

    Le tutoriel me semble bon, mais comment dire quelque chose de facile pour les utilisateurs novices? Eh bien, celui qui me semble le mieux est KAzam, il est facile à utiliser et ne consomme pas grand chose à mon avis !!!! À votre santé

  3.   Utilisons Linux dit

    Pas tous. De plus, je crois honnêtement qu'il n'y a pas de bonne interface pour le screencasting (qui a tout ce dont j'ai besoin), qui fonctionne avec les formats que je veux et qui consomme peu de ressources.

    Dans mon cas, le terminal est la meilleure option. Je ne prétends pas que ce soit pour tout le monde, mais c'est bien de partager ce que l'on apprend, non?

    À votre santé! Paul.

  4.   Jorge Rocha dit

    Il est faux que si nous voulons étendre le système d'exploitation sous GNU / linux, nous conseillons aux utilisateurs de faire ce genre de chose dans le terminal, les gens veulent quelque chose de simple et fonctionnel

    @ingjorgerocha

  5.   pourquoi yjuan dit

    Au niveau serveur j'utilise aussi uniquement la console, pas d'environnement graphique ... c'est le plus pratique et je fais tout à partir de là (automatiser les sauvegardes par exemple comme tu le dis bien ...), mais, sur une machine que tu as comme un serveur ... pour quoi voulez-vous faire un screencast là-dessus? hehe..ffmpeg est très très valide mais je pense que le problème de la console devrait passer en arrière-plan en fonction des distributions.
    Puisque nous avons tellement de variété de distributions dans le monde Linux, et que la console est suffisamment perfectionnée pour fonctionner correctement dans toutes les situations (c'est presque infaillible plutôt ..), nous devrions commencer à améliorer les applications pour le public, commencer à polir, coder et l'aspect graphique ... c'est ce qui est exigé aujourd'hui.
    Nous avons des projets Linux assez archaïques et abandonnés, nous le savons tous ... un bon exemple, pour moi, c'est pourquoi il n'y a plus de format de fichier exécutable qui vous permet de prendre un programme sur une clé USB et de simplement double-cliquer et un simple installation en plus de nécessiter des référentiels (et donc du réseau) .. pas d'APTonCD, c'est obsolète aussi .. il nous faut un standard, un ".tux" ou quelque chose de similaire à un ".exe" de Windows. Est-ce une question d'espace? .. sous Windows, l'exécutable de Gimp occupe 72 Mo et le même pour Linux (.deb) occupe 4,2 Mo ... pourquoi? Eh bien, parce que le programme Gimp lui-même, dans Windows toutes les bibliothèques l'accompagnent pour s'assurer que le programme fonctionne une fois installé ... sous Linux, nous pourrions avoir quelque chose de pareil, l'exécutable occuperait plus, nous perdrions l'avantage de la taille mais on gagne en portabilité (et plus encore avec les mémoires si volumineuses que l'on emporte aujourd'hui dans nos poches ... quelle différence cela fait-il de transporter 4 Mo à 72 Mo si presque tous ont des clés USB de 8 Go?)
    Toutes ces choses doivent être peaufinées ... le système est stable, a un excellent support et une compatibilité avec les pilotes ... pourquoi ne pas améliorer ce qu'il y a? ... si quelqu'un est encouragé, nous démarrons le projet exécutable hehe.!

  6.   Hidabe dit

    Euh ... eh bien, les gens qui aiment la console ne l'aiment pas parce que cher ami, ils l'aiment car avec elle beaucoup de choses peuvent être automatisées, par exemple au niveau du serveur (bien que ce ne soit pas le cas).

  7.   pourquoi yjuan dit

    Honnêtement, la console est très utile ... mais il existe des programmes avec une interface graphique qui utilisent ffmpeg et sont plus attrayants et constructifs pour d'éventuels nouveaux utilisateurs Linux ... Je recommande RecordMyDescktop qui est dans les référentiels de presque toutes les distributions. Je sais il y a beaucoup de gens qui aiment la console, mais cela doit être fini avec autant que possible ... Linux doit être concentré sur le bureau et un éventuel utilisateur final qui le souhaite fondamentalement, une interface graphique et, si possible, belle et pratique ... est-ce si difficile? que nous ne pouvons pas nous laisser marcher dessus ... Linux a un potentiel énorme et nous devons le faire sortir!
    Malgré tout, c'est un super programme! Bon post ^^

  8.   pourquoi yjuan dit

    La vérité est, oui, c'est formidable de partager ce que l'on apprend ... Ce n'est pas une critique au sens dévalorisant du post, mais une critique de la raison pour laquelle plus de gens n'utilisent pas Linux ... quoi qu'ils disent, le la console doit être réduite à un second plan pour laisser place aux facilités graphiques (cela ne veut pas dire que la possibilité de faire les choses par console est exclue, mais que celui qui veut s'en servir et celui qui ne le fait pas, eh bien, non ..)
    En fin de compte, ce qui se vend, ce qui est frappant, c'est la facilité d'utilisation d'un OS ... Linux est en interne imparable, mais si nous ajoutons à cette facilité d'utilisation et aux interfaces intuitives ... nous gagnons des utilisateurs et cela en profite. le développement de la communauté, les différents programmes, le support des sociétés de jeux vidéo et donc du matériel spécifique (disons les cartes graphiques ...), la création de logiciels spécialisés qui n'existent actuellement que sur Windows / Mac ... je ne sais pas, je Je pense que c'est dans le plan 15M ... tout est très beau mais maintenant il est temps de changer un peu de cap ... et je dis un peu!

    Eh bien, le projet exécutable standard sous Linux tient toujours, si quelqu'un le lit et veut que nous commencions à collaborer, voici mon email, je ne cache pas hehe (whysoyjuan@gmail.com)

    Salutations et j'espère voir plus de commentaires ici ... qu'il s'agisse de critiques ou d'éloges, le fait est que nous devons parler. Xao

  9.   Utilisons Linux dit

    Bien! Bonne contribution.
    Étreinte! Paul.

  10.   Gerardo dit

    De quoi parle ce programme ... attention, je ne connais pas très bien ça!

    1.    utilisons Linux dit

      Généralement, il est utilisé pour convertir des vidéos. Dans ce cas, nous montrons comment l'utiliser pour enregistrer votre bureau et réaliser un didacticiel vidéo, par exemple.
      Étreinte! Paul.

  11.   tarribalis dit

    Je vous remercie. En résolution, par exemple 1280X800, le X doit être en majuscule pour que la commande ffmpeg fonctionne.