Chaine de logiciel libre pour faire un timelapse

Cette semaine j’ai essayé de faire un timelapse avec des logiciels libres sous Linux. Ça m’a fait découvrir ou approfondir un certain nombre d’outils :

gphoto2 | ImageMagic | Luciole | Pitivi | Jyraphe > vidéo webm et Balise vidéo html5

Gphoto2

Gphoto2 est un logiciel en ligne de commande qui permet de piloter un appareil photo via USB. Il fonctionne avec beaucoup de modèle d’appareil Nikon et Canon.

Il permet entre autres, de prendre des photos à intervalle régulier et de les enregistrer directement sur le pc sans passer par la carte mémoire. Pour prendre des photos à 5 minutes intervalle :

  1. gphoto2 –capture-image-and-download –interval=300

Toutes les photos seront placées dans le dossier courant.

ImageMagic

Les photos ne sont pas directement utilisables pour faire une vidéo :

- Elles sont trop carrées pour tenir dans les formats HD habituels, comme le 1080p (1920×1080)
- Elles sont trop grosses : 4288×2848 à la sortie de l’appareil. C’est plus grand que le 4K, format retenu pour le cinéma numérique (4096×2160)

L’objectif est de faire une vidéo en 1080p, donc il faut redimensionner les images en 1920×1080. Il est possible de les réduire à une hauteur de 1080px, mais dans ce cas, des bandes noirs apparaîtront sur les bords gauche et droite. J’ai préféré les réduire à une largeur de 1290px, en tronquant le haut et le bas des images, ce qui ne gênait pas dans ce cas.

Pour redimensionner et couper les photos, j’ai utilisé ImageMagic qui fournit un lot de commandes bien pratiques, dont la commande convert :

  1. mkdir output
  2. for img in `ls *.jpg`
  3. do
  4.     convert $img  -thumbnail ‘1920×1080^’ -gravity center -extent 1920×1080 output/$img
  5. done

Cela signifie que pour chaque image dans le dossier courant, une miniature donc la taille minimum est 1920px de large ou 1080px de haut est créée, puis l’image est tronquée à une taille de 1920×1080 en centrant l’image. Le résultat est mis sous le même nom dans le dossier output.

J’ai remarqué plus tard que j’aurais dû utiliser -resize au lieu de -thumbnail. Le résultat est le même si ce n’est que -resize optimise la qualité alors que -thumbnail optimise le poids de l’image.

Luciole

Luciole est un logiciel qui permet de d’agrégé une séquence d’image en une vidéo, pour faire du stop motion.

luciole

Luciole permet de manière très simple d’ajouter des images, de choisir un nombre d’images par seconde et d’exporter. Malheureusement, les réglages d’exportation en vidéo sont assez pauvres et je n’ai pas réussi à avoir une sortie d’une qualité suffisante (par exemple, 720×576 au max).

Heureusement, Luciole propose aussi d’exporter dans des formats de projets pour 3 logiciels de montages vidéo pour Linux : cinnelera, kdenlive et pitivi.

Je voulais utiliser pitivi parce que je l’ai déjà testé et je voulais voir de quoi il était capable. Cependant, le fichier de projet pitivi généré par Luciole avait quelques erreurs: les durées des images était beaucoup trop longue (0.5 seconde au lieu de 0.08 pour du 12,5 images par seconde).

J’ai du corriger le bug pour continuer : diff

Pitivi

Pitivi est un logiciel de montage vidéo assez récent, ne disposant pas de beaucoup de fonctionnalités, mais qui a l’avantage de bien marcher.

pitivi

Un fois le projet généré par luciole corrigé, il n’y a plus qu’à exporter, en choisissant le format d’image (1080p) et le format d’encodage : webm

J’obtiens alors une vidéo de 1,1Mo pour environ 1Go de photos !

Jyraphe

Pour éviter d’utiliser des systèmes de stockage de vidéo centralisé comme Youtube. J’ai placé la vidéo en webm sur le serveur b219 (ici)
Malheureusement, Firefox 4 est incapable de la lire correctement (contrairement à Chrome), parce que le Content-Type annoncé est faux : text/plain à la place de video/webm.

Du coup on obtient ceci :

(Les utilisateurs de Chrome devront imaginer qu’il y a un lecteur video vide avec une croix sombre)

J’ai essayé une autre source d’hébergement : le service Jyraphe de b219.org. Jyraphe est un équivalent de dl.free.fr que l’on peut installer sur son propre serveur.

Les vidéos uploadées sur jyraphe affichaient un autre Content Type, mais toujours pas le bon : application/x-extension-webm
Pour réussir à faire marcher les vidéos sur Firefox, j’ai patché Jyraphe afin de corriger ce Content Type en particulier :

  1. function jyraphe_map_mime($mime) {
  2.         if($mime == "application/x-extension-webm") {
  3.                 return "video/webm";
  4.         }
  5.         return $mime;
  6. }

et

  1. header(‘Content-Type: ‘ . jyraphe_map_mime($mime_type));

à la place de :

  1. header(‘Content-Type: ‘ . $mime_type);

Balise video html5

Et pour finir, la balise vidéo du HTML5 permet de publier cet vidéo en webm.

Voici le résultat :

La vidéo est en 1920×1080, j’ai limité la largeur à 800px pour le blog, mais en la téléchargeant, elle serait bien plus grande : La vidéo en grand

Conclusion

L’utilisation de tout ses outils peut paraître laborieuse, mais elle permet d’obtenir exactement le résultat souhaité. En étant moins exigeant (sur les bandes noires ou les formats de sortie par exemple) il est possible d’aller beaucoup plus vite. D’autre part, le plus long a été de trouver et corriger les logiciels, d’affiner les réglages et corriger quelques bugs. Maintenant que cela est fait, les vidéos suivantes devraient être bien plus rapides à faire.

La deuxième partie de la vidéo a été faite avant, sans gphoto2, et l’appui sur le bouton suffit à faire fortement bouger l’appareil photo. Par contre, alors qu’il ne consomme presque rien en prenant une photo régulièrement manuellement, les batteries de l’appareil photo (un D90) se vide très vite (6 heures) lorsque celui-ci est branché par USB au pc. Il va être nécessaire de trouver une alimentation secteur pour faire de plus longues vidéos.

Perroquet 1.1.1

Perroquet 1.1.1 vient de sortir. Cette version corriges quelques bugs bien génant et améliore sensiblement le confort d’utilisation :

- Les sous-titres inclus dans les fichiers mkv ne sont plus affichés
- Correction d’un bug de chargement de projet avec des séquences partiellement complétées
- Place le curseur à la fin d’un mot déplacé
- Correction d’un bug de suppression
- Correction de la position du curseur quand un alias est utilisé
- Correction de la position du curseur quand le dernier mot est complété
- Correction de la position du curseur après l’utilisation d’une aide
- Correction d’un crash si une clé de configuration est manquante
- Mise à jour de la traduction

Les téléchargements sont disponibles à cette adresse:

https://launchpad.net/perroquet/+download

PPA:

https://launchpad.net/~fred-bertolus/+archive/perroquet

Plus d’informations sur Perroquet ici:

http://perroquet.b219.org

Perroquet 1.1.0

Cette news est dérivée de ma dépêche pour linuxfr.org

Perroquet est logiciel éducatif dont le but est d’aider à améliorer sa compréhension orale. L’originalité de Perroquet réside dans son utilisation de n’importe quel film accompagné de sous-titres comme support d’exercice. Les exercices prennent alors la forme de texte à trou.

La première version de Perroquet, sortie en début janvier, a été l’objet d’une dépêche qui a généré un afflux massif de commentaires, rapport de bugs, suggestions et contributeurs. Par conséquent, le développement à été poursuivi avec l’aide de quelques contributeurs (à la base, il s’agit d’un projet personnel mais en parlant un peu trop fort et on se fait piéger bêtement…)

La version 1.1.0 vient donc de sortir. Malgré ce que laisse penser le numéro de version, il s’agit d’une version majeure. Le nombre de ligne de code à doublé et grâce à Matthieu Bizen le code est maintenant beaucoup plus propre et commenté.

Archlinux n’a pas volé sa réputation puisque qu’un paquet pour cette distribution était disponible 2 heures après la release. Un paquet pour Ubuntu est aussi disponible. Pour ceux des autres distributions, il est possible de lancer Perroquet sans compilation ni installation depuis le tarball.

Voici les nouveautés de la version 1.1.0 :

Gestionnaire d’exercice

Un gestionnaire d’exercice à été ajouté. Il permet de télécharger des exercices pré-construit à partir d’un dépôt sur internet. Il est aussi possible d’ajouter d’autres dépôts ou d’en créer soit même simplement. Il a actuellement 4 exercices utilisant des ressources libres de droits.

Exportation et importation d’exercice

Il est possible d’exporter ou d’importer des exercices au format tar afin de partager des exercices pré-configurés

Multilinguismes

Perroquet ne supporte plus seulement des exercices en anglais, mais aussi en français ou en espagnol. La limitation était une restriction du jeu de caractère à deviner pour éviter de rester bloqué parce qu’un caractère japonais trainait dans le sous-titre. Il est possible d’ajouter soi-même des jeux de caractère pour d’autres langues.

Amélioration de l’ergonomie

Afin de ne pas donner sa langue au chat alors qu’on est prêt du but, ou de passer 5 min sur un mot correct mais mal placer, Perroquet colore les mots en fonction de la distance entre ce que l’on tape et la solution (en utilisant la distance de Levenshtein). De plus si un mot est correct mais mal placé, il sera déplacé automatiquement.

Alias

Perroquet dispose maintenant d’une petite base d’homonymes synonymes permettant de valider, par exemple, ‘4′ comme réponse si le mot à trouver était ‘four’. Malheureusement, cette base est pour le moment assez pauvre mais il est très simple d’ajouter des nouveaux alias.

Options et enseignement

Il est maintenant possible de configurer finement les exercices au moyen de nombreuses options. Pour les enseignants, il est possible de bloquer certaines fonctions de correction par un mot de passe.

Aides supplémentaires

De nouvelles méthodes d’aide sont disponibles pour ceux qui ont vraiment du mal comme le ralentissement de la vitesse de lecture ou la diminution de la longueur des séquence. Les bilingues pourront eux augmenter la durée des séquences, limiter le nombre de réécoute autorisé ou désactiver la correction continue pour augmenter la difficulté (en dernier recourt, ces derniers pourrait aussi essayer d’autres langues…).

Beaucoup d’autres ajouts ou de correction ont été apportées. Un changelog complet est disponible sur la page d’accueil du site.

Comme la dernière fois, j’ai implémenté surtout ce qui m’intéresse et les futures nouveautés dépendront surtout de ce qui sera suggéré ou implémenté par d’autres. Il y a aussi beaucoup de tâches de fond comme la traduction, la documentation et l’enrichissement du dépôt qui n’avanceront pas bien vite sans aide exterieure.

Le nouveau site web de perroquet pourrait intéresser certains. Il est développé pour faire des sites quasi-statiques traduisibles et dispose d’un système d’authentification utilisant OpenID. Le code est disponible sous licence AGPL v3 ici : Code du site web de Perroquet

Site web de Perroquet : http://perroquet.b219.org
Capture d’écran : http://perroquet.b219.org/fr/screenshots/
Page de téléchargement : http://perroquet.b219.org/fr/download/
Page du projet Launchpad : https://launchpad.net/perroquet

Perroquet 1.0.1

Perroquet 1.0.1 vient de sortir. Cette version apporte quelques améliorations mais corrige surtout beaucoup de petits bugs.

- Amélioration du comportement de la fenêtre lors d’un redimensionnement
- Ajouts de nouveaux raccourcis
- Suppression automatique des balises HTML présentes dans les fichiers srt
- Remplacement des | présents dans les fichiers de sous-titres par des retours à la ligne
- Intégration des fichiers perroquet au système (ouvrir avec, type mime, icone,…)
- Amélioration de la boite de dialogue de création d’exercices
- Ajout d’infobulles
- Amélioration du système de frappe pour support les caractères spéciaux (touches mortes par exemple)
- Corrections de divers bugs
- Mise à jour des traductions (Français et turc)

Les téléchargements sont disponibles à cette adresse:

https://launchpad.net/perroquet/+download

PPA:

https://launchpad.net/~fred-bertolus/+archive/perroquet

Plus d’informations sur Perroquet ici:

http://perroquet.b219.org

Sortie de Perroquet 1.0.0, c’est à vous de répéter.

J’ai développé un petit logiciel et je vais vous le présenter.

Origine

J’ai un problème avec les langues étrangères et si j’arrive à lire l’anglais sans trop de problème à force de lire des man-pages, je ne comprend presque rien en écoutant. On me conseille de regarder des films en anglais, mais quand je regarde un film sans les sous-titres, je ne comprend habituellement qu’un seul mot dans chaque phrase (souvent le dernier) et avec les sous-titres, je les lis et comprend sans écouter. Bref, ça ne marche pas avec moi parce que je suis trop nul pour amorcer le cercle vertueux de la compréhension orale.

Après une petite étude de l’existant sous Linux, j’ai conclus que si je voulais un logiciel pour améliorer mon anglais, disponible sous Linux et libre, il fallait que je le crée moi-même.

Ainsi naquit Perroquet.

Principe

Le principe de Perroquet est de créer des exercices de compréhension à partir d’une vidéo en anglais (mais ça marche aussi avec un fichier son) et un fichier de sous-titres lui aussi en anglais.
À partir des timecodes des fichiers de sous-titres, le logiciel fait écouter de courtes séquences du film en présentant un texte à trou que l’utilisateur doit compléter pour continuer le visionnage. L’utilisateur peut répéter chaque séquence autant de fois qu’il est nécessaire pour trouver les réponses ou pour abandonner et demander la correction.
En effet, Perroquet peut aider les plus nuls en complétant partiellement puis totalement certains mots ou en affichant la traduction française si on a pris le soin de fournir en plus un sous-titre français. On peut aussi chercher un mot dans la liste des mots à trouver dans tout l’exercice (bien sûr, le filtre prend des expressions régulières).

Voici pour le principe de Perroquet. Certains diront que ça doit être très long voir un film avec ce système, mais il ne faut pas perdre de vu qu’il s’agit d’un logiciel éducatif et que le but premier est d’apprendre une autre langue.

Perroquet n’est actuellement « compatible » que pour apprendre l’anglais mais il suffira de peu pour permettre de travailler avec d’autres langues.

Première release

Comme Perroquet ne plantais plus sur les 4 postes différents auxquels j’ai eu accès et avec mes 3 fichiers vidéo de test, je me suis dis qu’il était temps d’en faire profiter aux autres.

Voici donc la première version de Perroquet, la symbolique 1.0.0

Le site officiel [1] propose une explication peut-être plus claire du logiciel, une capture d’écran [2] (j’ai abandonné le screencast, il faudra peut être faire un journal concernant le son sous Linux), une documentation [3] et des informations pour le téléchargement et l’installation [4].

Une archive contenant une version très compressée d’Elephant Dream avec les sous-titres vous attend ici [5] pour tester rapidement.

Le logiciel est distribué sous GPL v3.

1 – Accueil du site de Perroquet
2 – Captures d’écran
3 – Documentation
4 – Téléchargement
5 – Demo Elephant Dream

Technologies utilisées

Pour développer, j’ai essayer de récupérer le maximum de choses, j’utilise donc:

  • Python
  • Gstreamer pour la lecture vidéo
  • Gtk via pygtk via gtkbuider via Glade
  • Gettext et Launchpad pour les traductions (il permet de récupérer les pot et de commiter automatiquement les po issues des traductions fait sur Launchpad)

Qt aurait surement pu faire ça à lui tout seul mais je ne connaissais pas Gtk alors c’était l’occasion d’apprendre.

La partie qui m’a posé le plus de problème a été la mise en place des autotools afin qu’un ./configure, make, make install (ou dist) mette tout (icône, code python, fichier de traduction,…) automatiquement au bon endroit pour la création de paquet devient un jeu d’enfant. (Et j’ai pas encore trouver comment ne pas avoir à faire de make install pour tester mes modifications d’ui maintenant que le fichier se trouve dans /usr/…) J’ai pas trouvé de doc concluante sur les autotools et python donc j’ai dû comprendre le fonctionnemt grâce à beaucoup d’apt-get source.

Légalités

Les DVD c’est pas libre, mais si il n’y avait que ça…

J’ai eu beaucoup d’hésitations avant de faire ce logiciel à cause de la légalités des « divx ».
Au départ, je pensais lire directement les DVDs pour y trouver des films et leur sous-titres. Malheureusement l’organisation d’un DVD semble être faite pour dissuader quiconque de les lire (mon logiciel aurais dû trouver les pistes vidéos, audio et les bon sous-titres et lancer tout ça, sans parler de la précision du seek sur un DVD…). De plus les sous-titres sont stockés sous forme d’images, et leur conversion en un format texte exploitable pour mes exercices passe par des systèmes d’OCR à paramètrer à la main pour chaque DVD. L’extraction des sous-titres d’un DVD prend plusieurs heures.

D’un autre coté on a les « divx » qui se lisent très simplement en quelques lignes avec gstreamer et les fichier srt qui se parsent en quelques lignes.

Malheureusement, je n’ai pas trouvé d’informations claires sur la légalité de la possession et de la récupération d’un « divx » dont on détient un DVD.
Savez-vous ce qu’il en est ?

Maintenant, que je connais par cœur Elephant Dream, j’espère qu’il y aura beaucoup de dialogues dans Durian, parce que Big Buck Bunny n’aura pas beaucoup aidé mon projet.

Conclusion

Je remercie Yekcim, que je connais en tant que grand chef graphiste de Wormux, pour avoir respecté à la lettre la GPL pour ses images en fournissant les sources svg (ce qui est rare). Grâce à cela, j’ai modifier le « Thunderbird » de Wormux pour faire un icône présentable en quelques minutes sans avoir utilisé Inkscape auparavant.

Donc, maintenant, j’attends les retours de bug, les patchs, le port KDE et des liens vers des films libre de droit pour pourvoir s’entrainer en tout légalité.

Un fond d’écran Hubble aléatoire en une commande ? C’est possible !

Dans un article du Clapico’s Blog, il est question d’un programme permettant d’afficher en fond d’écran de manière dynamique une image provenant des « Astronomy Picture of the Day ». Ce programme marche très bien mais les images de cette base d’images sont relativement petites et laisse trop de marges à mon gout. En effet, je suis en bi-écran et la surface à couvrir est très grande.

Après quelques recherches j’ai trouvé une base d’images de grande taille : la base d’image du site http://hubblesite.org qui offre des images de très haute définition.

Évidement, la récupération automatique d’images sur un site est spécifique à ce site donc la majorité du programme du Clapico’s Blog était inutilisable. De plus dans le cas de ce programme, l’adresse de l’image peut être directement déduite puisqu’elle est basée uniquement sur la date, et il ya une et une seule image par jour. J’ai donc décidé de tout refaire, pour que ça soit plus amusant, le faire en language shell et en une seul ligne de commande.

La voici :

  1. mkdir -p ~/hubble && gconftool -t string -s /desktop/gnome/background/picture_filename ~/hubble/nowallpaper.jpg && wget -q -O – http://hubblesite.org/gallery/album/entire/npp/all/  | grep  -E ‘pr[0-9]+[a-z]‘ | sed ’s/^.*pr\([0-9]\+[a-z]\+\).*$/\1/g’ | grep -v title | shuf -n 1 | sed ’s/^\([0-9]\{4\}\)0\?\([0-9]\{2\}\)\([a-z]\+\)$/http:\/\/stsciopo.cachefly.net\/hu\/db\/images\/hs-\1-\2-\3-full_jpg.jpg/’ | wget -q -i – -O ~/hubble/wallpaper.jpg && gconftool -t string -s /desktop/gnome/background/picture_filename ~/hubble/wallpaper.jpg

Cette commande est assez longue alors je vais la détailler pas à pas.

  1. mkdir -p ~/hubble

Création d’un dossier « hubble » dans le home de l’utilisateur, et on ne rale pas si le dossier existe déja (pratique si on veux exécuter la commande plusieurs fois).

  1. gconftool -t string -s /desktop/gnome/background/picture_filename ~/hubble/nowallpaper.jpg

On met comme image de fond d’écran une image qui n’existe pas encore. Cela perment d’éviter à gnome de recharger l’image alors qu’elle n’est pas encore totatement téléchargée.

  1. wget -q -O – http://hubblesite.org/gallery/album/entire/npp/all/

On télécharge la page d’acceuil de la galerie avec comme nombre d’image par page « Toutes les images ». On dit aussi à wget d’être silencieux et de ne pas sauver la page dans un fichier mais plutot de l’envoyer à la commande suivante. Cette page HTML contient des miniatures et des liens vers une page permettant de télécharger l’image dans différents formats.

  1. grep  -E ‘pr[0-9]+[a-z]‘

Chaque miniature contient dans le code html un code identifiant l’image. Ce code est constitué de « pr » suivi de 7 chiffres et de 1 ou 2 lettre, par exemple « pr2008035h ». Les quatres premiers chiffres correspondent à l’année le reste est la référence de la photo. Cette partie de la commande permet de filtrer les lignes du fichier HTML pour ne garder que les lignes contenant un code valide. Le résultat est envoyé à la commande suivante.

  1. sed ’s/^.*pr\([0-9]\+[a-z]\+\).*$/\1/g’

Cette partie de la commande isole le code contenu dans les lignes filtrés. On obtient donc une liste de codes.Le résultat est envoyé à la commande suivante.

  1. grep -v title

Cette partie de la commande ne devrait pas être nécessaire mais il s’avère que certaine ligne reste entière parce au lieu d’isoler le code. Je n’ai pas trouvé la raison mais je n’ai pas beaucoup cherché. En tout cas, cette commande enlève toute les lignes contenant « title ». On obtient donc vraiment une liste de codes.Le résultat est envoyé à la commande suivante.

  1. shuf -n 1

Cette partie de la commande permet de tirer au sort un code parmi tous les codes disponible. Le code sélectionné est envoyé à la commande suivante.

  1. sed ’s/^\([0-9]\{4\}\)0\?\([0-9]\{2\}\)\([a-z]\+\)$/http:\/\/stsciopo.cachefly.net\/hu\/db\/images\/hs-\1-\2-\3-full_jpg.jpg/’

Cette partie de la commande permet de transformer le code en l’URL de l’image correspondante. Ainsi, « pr2008035h » devient « http://stsciopo.cachefly.net/hu/db/images/hs-2008-35-h-full_jpg.jpg ». Il y a une subtilité, si la 2ème partie du code, « 035 » içi, commence par un zero, il faut le tronquer.

  1. wget -q -i – -O ~/hubble/wallpaper.jpg

Cette partie de la commande sauvegarde l’image dans le dossier hubble.

  1. gconftool -t string -s /desktop/gnome/background/picture_filename ~/hubble/wallpaper.jpg

Enfin, l’image enregistrée est placée comme fond d’écran.

Quelques informations complémentaires :
- Cette ligne de commande ne fonctionne que sur Gnome, mais devrait être facilement adaptable aux autres environnement de bureau.
- Il y a des vraiment grosses images, la plus grosse que j’ai eu dans mes essais faisait 125mio (oui, c’est bien du jpg !). Certains changement de fond d’écran peuvent être assez long.
- Pour automatiser le changement d’image, je vous laisse consulter l’article de référence qui détaille très bien la procédure.

Shrew-gallery 1.1.2

Un tout petit article pour signaler que ma galerie web « Shrew-gallery » vient de sortir en version 1.1.2. Cette version propose juste la correction d’un bug dans le cas de l’utilisation de tirets dans les noms d’albums.

Le site officiel : http://shrew-gallery.b219.org
Une démo : http://shrew-gallery.b219.org/demo

Redimensionnement et rotation automatique de photos

Je manipule souvent des photos de très grandes tailles. J’ai 2 problématique principales :

- Les photos sont souvent trop lourdes pour être facilement transportable ou diffusable sur un site web.
- Les visionneuses et explorateurs de fichiers sous linux utilisent les données EXIF pour connaitre l’orientation des photos et les afficher correctement. Quand je copie mes photos sur l’ordinateur d’un utilisateur de Windows, on me reproche de ne pas avoir tourné mes photos (opération que la personne en question fait souvent à la main).

J’ai donc fait un petit script qui permet de :

  • recompresser l’original pour gagner de la place (facteur 2 environ)
  • réorienter automatiquement les photos grâce aux données EXIF
  • créer une miniature de 800px de large en conservant le ratio

  1. #!/bin/sh
  2. for img in `ls *.jpg`
  3. do
  4. thumb=`echo $img| sed ’s/^\(.*\).jpg$/\1-thumb.jpg/’`
  5.  
  6. convert $img -resize 800x $thumb
  7. convert $thumb -auto-orient $thumb
  8. convert $img -auto-orient $img
  9. done

Ce script nécessite le logiciel « ImageMagic » disponible ici : http://www.imagemagick.org ou apt://imagemagick pour les Ubunteros.

Shrew-gallery 1.1.1

Je vous avais parlé d’une petite galerie photos en PHP que j’ai développé il y a quelques semaines. Une nouvelle version de ce logiciel est sortie : la version 1.1.1.

Voici la liste des améliorations :

  • Ajout du multi-album
  • Ajout des règles d’accès avancés
  • Support des données EXIF
  • Affichage de la licence
  • Miniatures
  • Support du ogg (theora/vorbis)

Pour rappel le site officiel qui contient un peu plus d’informations : http://shrew-gallery.b219.org

On y trouve entre aussi une démo :
http://shrew-gallery.b219.org/demo

Différencier Theora et Vorbis dans un Ogg en PHP

J’ai eu besoin pour la galerie web que je développe en PHP d’un moyen de détecter le type d’encodage d’un fichier ogg. En effet, les types MIMES trouvés pour un ogg/theora et un ogg/vorbis sont « application/ogg ». Cette information ne me suffit pas car j’ai besoin de savoir si je dois ajouter mon « .ogg » dans une balise « video » ou une balise « audio ».

PHP ne proposant pas en standart cette possibilité de différenciation, j’ai développé une petite classe permettant de le faire. Après une étude rapide des plusieurs fichiers ogg et de la spécification, j’ai pondu ça :

  1. class Ogg {
  2.   private $path;
  3.  
  4.   public function __construct($path){
  5.     $this->path = $path;
  6.   }
  7.  
  8.   function IsOgg(){
  9.     $isOgg;
  10.     $handle = fopen($this->path,‘rb’);
  11.    
  12.     $type = fread($handle,4);
  13.     if($type === false){
  14.       $isOgg = false;
  15.     }else{
  16.       $isOgg = ($type == ‘OggS’);
  17.     }
  18.    
  19.     fclose($handle);
  20.     return $isOgg;
  21.   }
  22.  
  23.   function GetCodec(){
  24.     if(!$this->IsOgg()){
  25.       return false;
  26.     }
  27.    
  28.     $codec;
  29.     $handle = fopen($this->path,‘rb’);
  30.    
  31.     //Read begin of header
  32.     fread($handle,0×1D);
  33.    
  34.     $codec = fread($handle,6);
  35.    
  36.     fclose($handle);
  37.     return $codec;
  38.   }
  39. }
  • IsOgg() renvoie « true » si le fichier est bien un fichier ogg, « false » dans les autres cas.
  • GetCodec() renvoie « false » si le fichier n’est pas de type ogg. Dans les autres cas, cette fonction renvoie le nom du codec, habituellement « theora » ou « vorbis ».

Cette classe fonctionne avec les 4 vidéos dont je dispose et il n’est pas garantis qu’elle fonctionne pour tous les ogg.

(Merci à newneo et SnakeFast pour l’impulsion sur #php-fr)