Catégories
Gstreamer Open-source Planet-libre Reseau Web

Nagios: vérifier l’existence d’un fichier sur un site Web

Il y a quelques jours je me suis rendu compte que lors d’une mise à jour de mon blog j’avais oublié de copier le fichier googlexxxxxxxxx.html à la racine de mon site. Ce fichier permet à Google de vérifier que le site est bien associé à mon compte Google Webmaster et au mécanisme de lecture d’un autre fichier important: sitemap.xml. En conséquence, mon site n’était plus référencé dans Google… C’est ici Google Analytics qui m’a servi de serveur de supervision vu que mon trafic a été divisé par 8 :).

Disposant d’un serveur de supervision Nagios pour mes tests, je me suis pencher sur le problème suivant: comment vérifier la présence d’un fichier précis sur un site Web en utilisant le protocole HTTP.

Il n’y a pas de plugin par défaut permettant d’effectuer cette action. Le seul qui se rapproche est check_http. Malheureusement ce dernier permet seulement de vérifier que le serveur Web est opérationnel mais ne fait aucune interprétation sur le contenu du site.

En cherchant un peu on tombe rapidement sur le plugin check_url. Ce dernier, écrit en Perl, utilise Wget pour récupérer le fichier cible et interprète le code d’erreur renvoyé par le serveur Web.

J’ai du un peu modifier le code pour le rendre compatible avec une installation ou le daemon Nagios tourne avec un utilisateur qui n’a pas de « home directory ». Le script modifié est disponible ici.

On a les associations code d’erreur Nagios / code d’erreur HTTP suivantes:

OK = (« 200 »);

WARN = (« 400 », « 401 », « 403 », « 404 », « 408 »);

CRITICAL = (« 500 », « 501 », « 502 », « 503 », « 504 »);

Pour installer le plugin, il faut le copier dans le répertoire /usr/local/nagios/libexec de votre serveur Nagios puis fixer les bons droits:

cd /usr/local/nagios/libexec

sudo wget https://raw.github.com/nicolargo/nagiosautoinstall/master/check_url.pl

sudo chown nagios:nagios /usr/local/nagios/libexec/check_url.pl

sudo chmod a+x /usr/local/nagios/libexec/check_url.pl

Enfin on configure un nouveau service dans le fichier commands.cfg:

# CheckURL

# $ARG1$: URL a tester (exemple: http://blog.nicolargo.com/sitemap.xml)

define command{

command_name check_url

command_line $USER1$/check_url.pl $ARG1$

}

Puis on définie le service associé au site/fichier à vérifier:

# Define a service to check URL

# http://blog.nicolargo.com/sitemap.xml

define service{

use generic-service

host_name monserveur

service_description URL Sitemap

check_command check_url!http://blog.nicolargo.com/sitemap.xml

}

Une fois Nagios relancé, une alerte sera automatiquement remontée si le fichier sitemap.xml n’est pas accessible !

Il est bien sur possible de faire autant d’alertes que de fichiers à vérifier.

Catégories
Gstreamer Open-source Planet-libre Video Web

Installation et test de Flumotion 0.8

Flumotion est un serveur de streaming open-source sous licence GPL. Il permet de diffuser à des utilisateurs ne disposant que d’un simple navigateur Web des contenus audio et vidéo.

La dernière version disponible (la 0.8) apporte une fonctionnalité que je trouve intéressante de tester: le support du conteneur WebM et du codec vidéo VP8 que gOOgle à libéré il y a quelques mois.

Nous allons voir dans ce billet comment installer et configurer Flumotion 0.8 sur une distribution GNU/Linux Ubuntu Desktop 10.10.

Compilation de Flumotion 0.8

Récupération des sources:

mkdir ~/src

cd ~/src

wget http://www.flumotion.net//src/flumotion/flumotion-0.8.0.tar.gz

tar zxvf flumotion-0.8.0.tar.gz

cd ~/src/flumotion-0.8.0

Installation des librairies (en plus de mon installation standard d’Ubuntu), j’ai du ajouter:

sudo aptitude install python-all-dev python-kiwi

Configuration et compilation:

./configure

make

sudo make install

sudo mkdir /usr/local/etc/flumotion/

sudo cp conf/default.pem /usr/local/etc/flumotion/

Configuration de Flumotion 0.8

Le serveur Flumotion utilise deux processus: flumotion-manager et flumotion-worker.

Le premier processus (flumotion-manager) à besoin d’un fichier de configuration nommé planet.xml. Je vous propose donc de partir du fichier de configuration fourni avec les sources et de le copier dans un répertoire de votre machine.

mkdir ~/flumotion

mkdir ~/flumotion/conf

cp ~/src/flumotion-0.8.0/conf/managers/default/planet.xml ~/flumotion/conf/

Puis de l’éditer:

gedit ~/flumotion/conf/planet.xml

La ligne vraiment intéressante à modifier est celle-ci:

user:PSfNpHTkpTx1M

Elle défini l’utilisateur user avec le mot de passe par défaut test (encodé).

Remarque: Pour générer un nouveau couple login/password, le plus simple est de ce rendre sur ce site et de remplacer le résultat dans le fichier ~/flumotion/conf/planet.xml.

On lance ainsi le processus avec la commande suivante:

flumotion-manager ~/flumotion/conf/planet.xml &

On vérifie que le processus est bien lancé:

ps auxw | grep flumotion

labo    16352 10.4  0.3  18300 12724 pts/3    S    15:41   0:00 /usr/bin/python /usr/local/bin/flumotion-manager /home/labo/flumotion/conf/planet.xml

Le deuxième processus (flumotion-worker) n’a pas besoin d’un fichier de configuration. Il faut juste passer en paramètre l’utilisateur user avec le mot de passe test (clair) à utiliser pour se connecter au processus flumotion-manager:

flumotion-worker -v -u user -p test

Utilisation de Flumotion 0.8

On va utiliser le programme flumotion-admin pour administrer notre serveur Flumotion:

flumotion-admin &

La fenêtre suivante devrait s’afficher :

Remarque: si vous installez Flumotion sur un serveur sans interface graphique, il faudra utiliser flumotion-admin-text en lieu et place de flumotion-admin.

On clique sur Suivant:

On clique sur Suivant puis on entre le login user et le password test:

Après avoir cliqué sur Suivant, un assistant de configuration (wizard) va s’afficher:

On arrête de cliquer quelques instant pour voir que Flumotion propose deux scénarios:

  • configuration d’un streaming « live » à partir d’une camera / webcam
  • configuration d’un streaming « on demand » à partir d’un fichier

Configuration d’un « streaming live »

Comme un des objectifs de ce billet est de tester la diffusion live en WebM/VP8, on choisi la première option dans la fenêtre suivante:

Si vous n’avez pas de caméra digitale ou de Webcam sur votre machine, vous pouvez utiliser le « test video producer »  qui est en fait une mire de test (je rappelle de Flumotion se base sur GStreamer et cette mire est en fait généré par le plugin videotestsrc).

On configure la mire:

Il est ensuite possible de configurer un texte ou un logo qui sera affiché en overlay sur la vidéo:

On passe ensuite à la configuration de la « mire audio »:

Puis on défini les paramètres du streaming: conteneur, codec vidéo et codec audio:

Au niveau du codec vidéo VP8, on peut soit définir un débit fixe (CBR) ou bien une qualité fixe (VBR). Pour du streaming live, je conseille plutôt du CBR, par exemple à 400 Kbps:

De même pour le codec audio Vorbis:

On défini ensuite si l’on veut streamer sur HTTP (seule option disponible pour l’instant) et/ou sauver le résultat du streaming dans un fichier local sur le serveur (cette option peut être intéressante pour relire la vidéo de manière offline).

Enfin, on défini le point de montage (URL) ainsi que le port TCP à partir duquel le serveur sera accessible. Il est également possible de limiter le streaming (nombre d’utilisateur max, bande passante max…):

On peut également préciser la licence de diffusion de votre streaming:

Et voilà le travail, votre serveur de streaming est opérationnel:

Pour le tester il suffit de ccopier l’URL de l’onglet Statistiques dans (attention pour voir la vidéo depuis une autre machine, il faut remplacer le nom d’hôte avant le :8800 par l’adresse IP de la machine):

  • un navigateur Web compatible WebM/VP8: Chromium
  • un lecteur multimedia compatible WebM/VP8: Totem sous Ubuntu

La vidéo devrait s’afficher:

Pour sauvegarder cette configuration de streaming, il suffit de cliquer sur Connexion > Exporter la connexion puis de sauvegarder le fichier au format XML (Connexion > Importer pour la réimporter dans Flumotion).

Les sources vidéos possibles pour un streaming live sont:

  • la mire (pour les tests)
  • webcam (j’ai rencontré un problème avec la mienne, voir le dernier chapitre de ce billet)
  • TV card
  • Loop video (prend en entrée un fichier OGG et génère une boucle infini à partir de cette vidéo)
  • Firewire

Configuration d’un streaming on-demand (VoD)

Avant de tester la vidéo à la demande, il faut disposer de fichiers vidéos encodés au format WebM (pour la VoD, la version communautaire de Flumotion supporte également le format OGG). Pour produire de tel fichier, je vous conseille la lecture de ce billet. Une fois les vidéos localisées dans un répertoire de votre machine faisant tourner le serveur Flumotion, il suffit de faire appel à l’assistant via le menu Contrôler > Lancer l’assistant de flumotion-admin.

Il faut seulement définir le répertoire ou sont stockées les vidéos:

Puis identifier la liste des vidéos disponibles et leurs URLs dans l’onglet Browser. Là encore, il faut adapter l’adresse en remplaçant le nom logique par l’adresse IP de votre machine Flumotion si vous voulez consulter ces vidéos sur d’autres machines du réseau.

Enfin, vous pouvez ouvrir cette URL soit dans un navigateur Web qui prend en charge WebM (par exemple Chromium):

Soit dans votre lecteur multimédia par défaut (par exemple Totem, ouvrir en utilisant CTRL+L):

Pour une intégration plus « web design compliant » de vos vidéos dans des pages Web (plutôt qu’un bête affichage en full-screen), il faut utiliser le tag HTML5 <video> dont j’ai donné plusieurs syntaxe d’utilisation dans ce billet.

Problèmes rencontrés…

Lors de mes tests, j’ai rencontré un problème lors de la détection de ma WebCam Logitech QuickCam Pro 4000 (qui marche très bien par ailleurs). La détection des informations n’aboutie pas…

Un autre problème est l’ouverture des fichiers VoD à partir de VLC qui supporte pourtant le format WebM. Le son passe correctement mais la vidéo reste désespérément noire…

Catégories
Gstreamer Open-source Planet-libre Systeme

7 choses à faire après l’installation de Fedora

Je viens de finaliser l’installation de mon PC portable pro sous une distribution GNU/Linux Fedora 14 (je reviens à mes premiers amours :)). Voici donc la liste des étapes que j’ai suivi pour mettre l’environnement dans un état acceptable pour mes yeux et mes neurones. Comme pour la version Ubuntu de ce billet, cette liste est personnelle et me permet d’avoir un environnement de travail qui corresponde à mes besoins (pas forcement aux vôtres !).

Je compte sur vous pour ajouter vos commentaires et nous faire découvrir de nouvelles choses.

On commence par un aperçu du bureau Gnome:

La connaissance s’accroît quand on la partage…

1.  Lancement du script fedorapostInstall.sh

Ce script shell à pour but d’automatiser toutes une série d’actions que je fais plus ou moins systématiquement quand j’installe un PC sous Fedora Desktop. C’est la première chose que je fais sur un nouveau PC.

On peut notamment citer:

  • Ajout de dépôts pour avoir de nouveaux logiciels ou des versions plus récentes
  • Installation d’applications indispensable à mes yeux et non présente dans la distribution de base
  • Configuration système standard

Récupération du script:

wget http://svn.nicolargo.com/fedorapostinstall/trunk/fedorapostinstall.sh

chmod a+x fedorainstall.sh

Je vous conseille d’éditer le script pour le faire coller à vos besoins.

Lancement du script:

su -c ./fedorainstall.sh

2. Fenêtre et icônes

Le script précédant installe la configuration GTK suivante: Look des fenêtre Equinox et icônes Faenza.

Il faut les activer en allant dans le menu “Système > Préférences > Apparences > Thème > Equinox Evolution“.

3. Des informations directement sur votre bureau

Mon coté geek fait que j’aime bien connaître ce qui se passe dans ma bécane: son occupation CPU, mémoire, la place disponible sur le disque, les débits réseau, le nom de la musique que je suis en train d’écouter…

Pour cela j’utilise Conky avec la configuration suivante (télécharger mon fichier .conkyrc puis l’adapter à votre configuration):

4. Configurer le tableau de bord

Rien de très original de ce coté, j’utilise un seul tableau de bord ou l’essentiel des éléments se trouvent en haut à droite de mon écran:

5. Un beau fond d’écran

Je maintien une base d’environ 70 fond d’écran que je puise dans différentes sources.

6. Gestion des mes fichiers personnels

J’utilise le service Dropbox pour sauvegarder et synchroniser mes documents entre mes différentes machines (3 PC GNU/Linux, 1 MBP, 1 iPhone).

Pour adapter la Dropbox à mon environnement GNU/Linux, je fais des liens symboliques entre le répertoire ~/Dropbox et les répertoires systèmes suivants:

bin -> ../bin/: Mes scripts shells

dev -> ../dev/: Le répertoire contenant mes développements en cours

Documents -> ../Documents/: Mes documents persos

Images -> ../Images/: Mes images, photos persos

7. Mes applications de tous les jours…

J’utilise Docky pour avoir un accès rapide aux applications suivantes:

A vous de nous faire découvrir votre monde sous Fedora !

Catégories
Gstreamer Open-source Planet-libre Systeme Video

Installation complète de GStreamer sous Fedora 14

Gstreamer est un framework multimedia très puissant que j’aborde régulièrement sur mon blog (voir la liste des articles ici). Il fonctionne avec un système de « plugins » lui permettant d’apporter de nouvelles fonctions sans toucher au coeur du framework.

Comme toutes les distributions GNU/Linux, Fedora est installée par défaut avec GStreamer et un certain nombre de plugins (environ 180 sur ma toute fraîche Fedora 14).   Nous allons donc voir dans ce billet comment installer « la totale » (c’est à dire la liste complète des plugins pour GStreamer).

Installation des dépôts

J’utilise les depôts RPMFusion qui contienne les dernières versions stable de GStreamer et des plugins:

su –

yum -y localinstall –nogpgcheck http://fr2.rpmfind.net/linux/rpmfusion/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://fr2.rpmfind.net/linux/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

yum update

Installation de GStreamer et de tous les composants

Cette installation devrait occuper environ 160 Mo sur votre disque dur.

LISTE=`yum -q list available ‘*gstreamer*’ | awk ‘{print $1 }’ | grep gstreamer | xargs -eol` ; yum -y install $LISTE

A la fin de cette installation, on peut demander le nombre de plugins avec la commande suivantes:

gst-inspect | tail -1

Nombre total :229 greffons (2 éléments de liste noire not shown), 1125 fonctionnalités

Et voili, on a donc un gain de 49 plugins 🙂 !

Catégories
Gstreamer Open-source Planet-libre Video

Scripts de transcodage de vidéos

Il existe de nombreux logiciels pour transcoder (WIKI) une vidéo d’un format vers un autre. On peut notamment citer Transmageddon, Handbrake, VLC… Néanmoins, votre distribution GNU/Linux intègre le framework GStreamer permettant d’effectuer ces taches de transcodage directement en ligne de commande et sans installer de logiciel supplémentaire. En dehors du fait que c’est un bon exercice pour comprendre le fonctionnement de ce fabuleux framework, c’est également un moyen simple d’intégrer ce transcodage dans des scripts automatisés (par exemple, transcoder toutes les vidéos déposées dans un répertoire dans un format unique).

Nous allons dans ce billet voir comment effectuer ce transcodage dans trois formats « standard » (industriellement parlant…):

  • MP4 avec codec vidéo H.264 et codec audio AAC
  • OGG avec codec vidéo Theora et codec audio Vorbis
  • WEBM avec codec vidéo VP8 et codec audio Vorbis

Installation des plugins GStreamer

L’installation standard de GStreamer n’inclue pas la prise en charge de tout les codecs vidéos et audios. Afin de remédier à ça, je vous conseille d’installer « la totale » avec les commandes suivantes:

wget https://raw.github.com/nicolargo/ubuntupostinstall/master/gstreamerinstall.sh

chmod a+x ./gstreamerinstall.sh

sudo ./gstreamerinstall.sh

rm ./gstreamerinstall

Ces commandes vont récupérer un script maison qui va installer le PPA de l’équipe de développement de GStreamer, puis installer les paquets GStreamer.

Un peu de pipeline

Je donnerai en fin d’article un lien vers trois scripts shell qui vont automatiser les phases de transcodage. Cependant, nous allons dans ce paragraphe voir comment faire un transcodage à la main en utilisant la commande gst-launch.

Pour illustrer notre exemple, prenons une vidéo au format .MOV (H.264 + AAC) que l’on soughaite convertir dans un format plus « libre », c’est à dire WEBM (VP8 + VORBIS). La pipeline (ligne de commande) correspondante est la suivante:

gst-launch -t filesrc location=source.mov ! progressreport ! decodebin name=decoder \

decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \

webmmux name=muxer \

decoder. ! queue ! ffmpegcolorspace ! vp8enc ! queue ! \

muxer. muxer. ! queue ! filesink location=destination.webm

La première ligne (filesrc location=source.mov ! progressreport ! decodebin name=decoder \) permet de charger le fichier source au format .MOV et de décoder les pistes audio et vidéo.

La seconde ligne (decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \) prend la piste audio du fichier source et la transcode au format VORBIS.

La troisième ligne (webmmux name=muxer \) précise que l’on utilisera un conteneur multimédia de destination de type Webm.

La quatrième ligne (decoder. ! queue ! ffmpegcolorspace ! vp8enc ! queue ! \) prend la piste vidéo du fichier source et la transcode au format VP8.

Enfin la dernière ligne (muxer. muxer. ! queue ! filesink location=destination.webm) prend les pistes audio et vidéo transcodées puis génère le fichier destination au format .WEBM.

Des scripts ! Des scripts !

« C’est bien beau la théorie mais moi je veux juste faire rapidement un transcodage… »…

Ok Michel, voici trois script shell permettant de faire un transcodage de n’importe quel type de vidéo vers un des formats suivants:

Pour les utiliser, il faut dans un premier temps les rendre executable avec la commande:

chmod a+x *encoder.sh

L’utilisation est des plus simple. Exemple de transcodage en MP4:

./mp4encoder.sh Inception-1080p.mov

Exemple de transcodage en OGG:

./oggencoder.sh Inception-1080p.mov

Exemple de transcodage en WEBM:

./webmencoder.sh Inception-1080p.mov

Et si je veux modifier les paramètres de transcodage ?

Ben c’est possible Miche, Nicolargo a pensé à toi. Il suffit d’éditer le script puis de mettre les paramètres dans la variable AUDIO_ENCODER_PARAMETERS pour le codec audio et VIDEO_ENCODER_PARAMETERS pour le codec vidéo.

Par exemple pour modifier le script webmencoder.sh afin d’encoder avec une qualité vidéo supérieure, il faut éditer le fichier et modifier la ligne suivante:

VIDEO_ENCODER_PARAMETERS= »quality=7 speed=2″

Pour avoir la liste des paramètres pour un codec (par exemple pour l’encodeur VP8 ; vp8enc), il faut saisir la commande suivante:

gst-inspect vp8enc

Conclusion

C’est à vous de jouer pour intégrer ces scripts dans vos processus d’automatisation de transcodage de vidéo/audio !

Catégories
Gstreamer Open-source Video

Mise à jour du script de screencast

Il y quelques mois, j’avais écrit un script shell (MyScreenCast) permettant d’automatiser la création d’un screencast avec des outils libres disponibles sur les distributions GNU/Linux (notamment GStreamer).

Affichage des touches / clicks souris

Suite à un message de Sylvain, je viens d’ajouter une nouvelle option permettant d’afficher sur l’écran les touches cliqués (clavier et souris) lors du screencast. J’utilise pour cela le logiciel libre key-mon (licence Apache v2).

Comme il n’est pas encore disponible via un PPA, il faut installer le logiciel (version 1.2.2 au moment de l’écriture de ce billet) à la mimine:

wget -q http://key-mon.googlecode.com/files/keymon_1.2.2_all.deb

sudo dpkg -i keymon_1.2.2_all.deb

rm keymon_1.2.2_all.deb

Support de WebM

J’ai modifier le script pour qu’il demande à la fin de la capture le format dans lequel le screencast doit être compressé, les formats disponibles sont les suivants:

  • H.264 (codec vidéo X.264 et audio AAC)
  • OGV (codec vidéo Théora et audio Vorbis)
  • WebM (codec vidéo VP8 et audio Vorbis)

Comment tester ces nouvelles fonctions ?

Il faut récupérer la dernière version du script:

MyScreencast

version 0.9

Puis de lancer la ligne de commande suivante:

chmod a+x ./myscreencast.sh

./myscreencast.sh -k -w

PS1: le flag -k permet de lancer le logiciel key-mon

PS2: le flag -w permet, si vous avez une webcam d’afficher votre tête dans une fenêtre…

Je suis toujours preneur de pistes d’amèliorations sur ce script !

Bon screencast à vous !

Catégories
Gstreamer Open-source Systeme

Installation de tous les composants GStreamer sous Ubuntu

Voici un petit script maison permettant d’installer la totalité des plugins GStreamer sur votre distribution Ubuntu.

On télécharge, le script, puis on le lance:

wget https://raw.github.com/nicolargo/ubuntupostinstall/master/gstreamerinstall.sh

chmod a+x ./gstreamerinstall.sh

sudo ./gstreamerinstall.sh

rm ./gstreamerinstall.sh

Vous devriez vous retrouver avec environ 233 plugins dont les fameux webmmux et vp8enc pour encoder vos vidéo au format WebM 🙂

Catégories
Gstreamer Open-source Planet-libre Video Web

Encodage de vidéo WebM en ligne de commande

Le format multimédia WebM fait beaucoup parler de lui ces derniers temps. Sous l’impulsion de Google, il a pour objectif de devenir le standard libre pour la diffusion de fichier vidéo sur Internet. Sans entrer dans les polémiques de qualité et des problèmes de licence, nous allons dans ce billet voir comment encoder un vidéo dans un format WebM en ligne de commande en utilisant le framework GStreamer, fourni en standard sous GNU/Linux.

WebM, c’est quoi donc ?

En fait WebM est un conteneur multimédia, une enveloppe au même titre que OGG, MP4  ou AVI. Quand on parle de fichiers au « format WebM », cela sous entant l’utilisation des codecs audio Vorbis et vidéo VP8 (racheté il y a quelques mois par Google à la societé On2).

Avant de tester l’encodage d’un fichier WebM sur votre distribution GNU/Linux. Sous Ubuntu, il faut d’abord vérifier que vous disposez de la dernière version PPA de GStreamer:

sudo add-apt-repository ppa:gstreamer-developers

sudo aptitude update

sudo aptitude upgrade

sudo aptitude install gstreamer0.10-x gstreamer-tools gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-ffmpeg gstreamer0.10-alsa gstreamer0.10-sdl

Enfin on vérifie que l’on a les bons plugins:

# gst-inspect | grep webmmux

matroska: webmmux: WebM muxer

 

# gst-inspect | grep vp8enc

vp8: vp8enc: On2 VP8 Encoder

 

gst-inspect | grep vorbisenc

vorbis: vorbisenc: Vorbis audio encoder

Passons maintenant aux choses sérieurses…

Encodage au format WebM

Pour mes test j’ai utilisé une bande annonce du film « Prince of persia » en qualité HD 1080p récupérée sur le site HDTrailers.

J’utilise ensuite la pipeline (ligne de commande) suivante pour effectuer l’encodage:

gst-launch -t filesrc location=pp_rltA_1080.mov ! progressreport \

! decodebin name=decoder decoder. \

! queue ! audioconvert ! vorbisenc quality=0.5 \

! queue ! webmmux name=muxer decoder. \

! queue ! ffmpegcolorspace ! vp8enc quality=5 speed=2 \

! queue ! muxer. muxer. ! queue ! filesink location=pp_rltA_1080-Q5.webm

La qualité vidéo par défaut (option quality=5) n’est pas terrible, on obtient de meilleurs résultats en l’augmentent. Voici un tableau comparatif:

Format Codecs Taille Aperçu (clique pour agrandir)
Source HQ .mov Audio: AAC 48 Khz
Video: H.264
126 Mo
WebM Audio: Vorbis 

Video: VP8 « Quality 5 »

24 Mo
WebM Audio: Vorbis 

Video: VP8 « Quality 6 »

30 Mo
WebM Audio: Vorbis 

Video: VP8 « Quality 7 »

40 Mo
WebM Audio: Vorbis 

Video: VP8 « Quality 8 »

61 Mo
WebM Audio: Vorbis 

Video: VP8 « Quality 9 »

73 Mo
WebM Audio: Vorbis 

Video: VP8 « Quality 10 »

92 Mo

Je trouve que la paramètre quality=7 est un bon compromis taille/qualité. Il faut noter que la source est d’un  qualité nettement supérieure (je ne connais pas les paramètre H.264 utilisés).

Comparaison avec les codecs Theora et H.264

Pour compléter ce petit test de WebM, nous allons comparer maintenant le résultat obtenu avec le paramètre quality=7 et les codecs Theora (avec une qualité égale à 7) et X.264 (avec une qualité de 23 équivalente).

Voici les lignes de commandes utilisées, pour l’encodage en WebM (VP8/Vorbis):

gst-launch -t filesrc location=pp_rltA_1080.mov ! progressreport \

! decodebin name=decoder decoder. \

! queue ! audioconvert ! vorbisenc quality=0.5 \

! queue ! webmmux name=muxer decoder. \

! queue ! ffmpegcolorspace ! vp8enc quality=7 speed=2 \

! queue ! muxer. muxer. ! queue ! filesink location=pp_rltA_1080-Q7.webm

puis en OGG (Theora/Vorbis):

ffmpeg2theora -v 7 –optimize pp_rltA_1080.mov -o pp_rltA-1080-Q7.ogg

et enfin en MP4 (X.264/FAAC):

x264 –tune animation –crf 23 -o pp_rltA-1080-Q7.mp4 pp_rltA_1080.mov

On obtient les résultats suivants:

Format Codecs Taille Aperçu (clique pour agrandir)
WebM Audio: Vorbis 

Video: VP8 « Quality 7 »

40 Mo
OGG Audio: Vorbis 

Video: Theora « -v 7 »

57 Mo
MP4 Audio: AAC 

Video: X.264 « CRF 23 »

56 Mo

Que peut on en déduire ? Niveau qualité, le format H.264 garde une longueur d’avance (mais pour combien de temps). Theora est en dessous. Par contre le taux de compression est bien meilleur avec le codec VP8 mais encore faut il être sur que l’on peut comparer les paramètres utilisés…

A vous de vous faire une idée !

Conclusion

Bien que « jeune » ce format de fichier semble avoir un bel avenir. Surtout si Google arrive à l’imposer comme un « standard industriel » (sic). Avec des leviers comme YouTube et Google Chrome, j’ai peu de doute sur le résultat des courses qui ne se fera pas sur un plan technique mais sur la capacité de chacun de défendre son format.

Catégories
Gstreamer Open-source Video Web

MyScreenCast, comment faire du screencast avec GStreamer

Je ne sais pas vous mais je n’arrive pas à trouver LE logiciel de screencast libre ultime pour mon PC Linux. J’ai essayé Istanbul (le résultat est très mauvais sur ma distribution Ubuntu 10.04), XVidCap (pas d’enregistrement du son) et même VLC (un peu usine à gaz pour ce besoin)… Seul RecordMyDesktop sort du lot bien que son interface graphique d’administration (gtk-recordmydesktop) ne soit pas des plus ergonomique.

Ce billet est donc un appel à la communauté pour développer CE logiciel en question !

Nous allons dans un premier temps donner les bases techniques permettant de faire un screencast à partir du framework GStreamer (fourni en standard sous Linux). Puis donner dans les grandes largeurs les spécifications DU logiciel.

On commence par la fin: le résultat

Voici le screencast obtenu (format libre OGV – Theora/Vorbis – hébergé sur blip.tv): si votre navigateur est compatible…

Sinon vous pouvez toujours consulter la vidéo en ligne sur Blip.tv ou sur Vimeo (codec H.264/AAC)

Les fichiers générés sont au format HD 720p et ont une taille d’environ 11 Mo pour le format M4V et 13 Mo pour le format OGV.

Screencast avec GStreamer en ligne de commande

On commence par vérifier que l’on dispose bien du plugin gstreamer istximagesrc:

[cc]

gst-inspect istximagesrc

version 0.2.2

[/cc]

Si ce n’est pas le cas, il suffit d’installer le package Istanbul qui inclue ce plugin:

[cc]

sudo aptitude install istanbul

[/cc]

Aller, une fois ces menus préparatifs passés,  on commence par lancer un capture vidéo de l’écran et sonore en utilisant la ligne de commande GStreamer (pipeline) suivante:

[cc]

gst-launch avimux name=mux ! filesink location=screencast.avi \
alsasink ! audioconvert ! queue ! mux. \
istximagesrc name=videosource use-damage=false ! video/x-raw-rgb,framerate=10/1 \
! ffmpegcolorspace ! queue ! videorate ! ffmpegcolorspace ! videoscale method=1 \
! video/x-raw-yuv,width=1152,height=720,framerate=10/1 ! mux.

[/cc]

Cette commande va capturer l’écran à 10 images par secondes (istximagesrc), le son (alsasink) et mixer le tout (sans compression mais avec une redimensionnement de la vidéo au format 720p) dans un fichier temporaire au format AVI. Ce fichier aura une taille très importante mais c’est juste une étape temporaire avant la compression.

Pour cette compression j’utilise deux pipelines permettant de générer des screencasts au format libre OGV (Theora/Vorbis) et propriétaire M4V (H.264/AAC), comme cela, tous les navigateurs sont heureux:

[cc]

gst-launch filesrc location=screencast.avi ! decodebin name= »decode » \
decode. ! videoparse format=1 width=1152 height=720 framerate=10/1 \
! queue ! ffmpegcolorspace ! theoraenc ! queue ! \
oggmux name=mux ! filesink location=screencast.ogv \
decode. ! queue ! audioconvert ! vorbisenc ! queue ! mux.

gst-launch filesrc location=screencast.avi ! decodebin name= »decode » \
decode. ! videoparse format=1 width=1152 height=720 framerate=10/1 \
! queue ! ffmpegcolorspace ! x264enc pass=4 quantizer=23 threads=0 ! queue ! \
ffmux_mp4 name=mux ! filesink location=screencast.m4v \
decode. ! queue ! audioconvert ! faac tns=true ! queue ! mux.

[/cc]

Un script qui fait tout…

Comme je suis un bon loulou, voici un script shell qui automatise

  1. le lancement de votre Webcam pour avoir une incrustation de votre image dans le screencast
  2. le lancement de la capture video de l’écran + capture audio (après un délais de 3 secondes histoire de refaire son nœud de cravate)
  3. (on arrête la capture en faisant un CTRL-C dans la fenêtre)
  4. la compression du screencast dans un fichier screencast-dateetheure.ogv (codec Theora/Vorbis)
  5. la compression du screencast dans un fichier screencast-dateetheure.m4v (codec H.264/AAC)
  6. la suppression du fichier temporaire

A télécharger ici: https://raw.github.com/nicolargo/myscreencast/master/myscreencast.sh

Vous pouvez éditer le fichier et notamment la configuration suivante:

[cc]

### Variables à ajuster selon votre configuration
AUDIODEVICE= »alsasrc »
WEBCAMDEVICE= »/dev/video0″
WEBCAMHEIGHT= »240″
OUTPUTHEIGHT= »720″
OUTPUTFPS= »10″
### Fin des variables à ajuster

[/cc]

… en attendant LE programme ultime

qui devra reprendre en gros les étapes de mon script mais en ajoutant:

  • une interface graphique
  • le choix d’une portion de l’écran à capturer
  • le choix d’une application (fenêtre) à capturer
  • le choix de la source audio (mixage possible avec la librairie Jack)
  • paramétrage fin des codecs audio et video
Catégories
Gstreamer Open-source Systeme Video

Maintenir à jour FFMpeg et X.264 sous Ubuntu

Dans la série petits scripts permettant de gagner du temps, je vous présente ffmpeginstall.sh et ffmpegupdate.sh. Ils se basent sur un post du forum Ubuntu qui est régulièrement mis à jour à chaque version d’Ubuntu.

  1. ffmpeginstall.sh permet d’installer les dernières versions de FFMpeg (svn) et du codec X.264 (git) à partir des sources.
  2. ffmpegupdate.sh permet de mettre à jour ces deux logiciels à partir des sources.

Suivi des modifications:

  • 26/04/2010: Scripts version 0.1 (validé sous Ubuntu 9.10 et 10.04)

Récupération des scripts

On commence par récupérer les scripts:

[shell]

mkdir ~/src

cd ~/src

wget http://svn.nicolargo.com/ubuntupostinstall/trunk/ffmpeginstall.sh

wget http://svn.nicolargo.com/ubuntupostinstall/trunk/ffmpegupdate.sh

chmod a+ ffmpeg*.sh

[/shell]

Lancement des scripts

Pour une installation initiale:

[shell]

cd ~src

./ffmpeginstall.sh

[/shell]

Pour une mise à jour:

[shell]

cd ~src

./ffmpegupdate.sh

[/shell]

Le résultat

[shell]

ffmpeg -version
FFmpeg version SVN-r22965, Copyright (c) 2000-2010 the FFmpeg developers
built on Apr 26 2010 16:57:27 with gcc 4.4.3
configuration: –enable-gpl –enable-version3 –enable-nonfree –enable-postproc –enable-pthreads –enable-libfaac –enable-libfaad –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libx264 –enable-libxvid –enable-x11grab

x264 –version
x264 0.94.1564 a927654
built on Apr 26 2010, gcc: 4.4.3

[/shell]

Et si je veux revenir avec les versions systèmes ?

Rien de plus simple, il suffit de saisir la commande suivante:

[shell]

sudo apt-get remove x264 ffmpeg build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libsdl1.2-dev libtheora-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev

[/shell]

Je suis preneur de tout retour/amélioration sur ces scripts…