Random Thoughts And Coding
Movie BarCode Generator
Connaissez vous les movie barcode ?
(code barre de film en français)
J’adore les trucs inutiles mais fun, et ça en fait sans aucun doute partie
Il s’agit en fait d’obtenir une sorte d’empreinte d’un film, en mettant toutes ses images cotes à cotes, écrasées d’une façon qui ressemble à un code barre.
si vous en voulez plus, je vous conseil ce site, sur lequel j’ai découvert ces choses…
La première fois que j’en ai vu j’ai immédiatement pensé “j’aurais aimé être celui qui a eu l’idée de faire ça”, puis j’ai cherché rapidement si un code source permettant d’en créer existait déjà, et j’ai été surpris de ne rien trouver.
Alors j’ai voulu faire le mien
Première étape : comment extraire des images d’une vidéo
Faire un truc pareil en .Net est loin d’être évident.
Je connaissais déjà la librairie BASS et son wrapper .Net pour le son, mais je n’avais jamais eu besoin de traiter de la vidéo.
Heureusement je ne suis pas le premier à chercher, et quelqu’un a écrit un wrapper .Net de fonctions DirectShow, et un article sur son utilisation.
Si j’ai bien compris, DirectX 8 est suffisant, ce code devrait donc marcher dans presque tous les cas.
Comme la classe de l’article ne me plaisait pas, j’ai réécrit un wrapper de wrapper en m’en inspirant, beaucoup plus simple d’utilisation et plus efficace (on ne recharge pas l’objet à chaque appel à une fonction) :
Cette classe s’initalise avec le chemin d’un fichier vidéo, et permet d’en extraire une image, soit pour la sauvegarder directement à l’emplacement indiqué, en bmp, soit pour en faire ce que l’on veut, avec l’instance de Bitmap renvoyée.
Deuxième étape : Génération du barcode
Une fois la première partie terminée, la génération du movie barcode en elle même est plutôt simple :
private Bitmap GenerateMovieBarCode(string videoPath)
{
VideoHelper v = new VideoHelper(videoPath);
Bitmap b = new Bitmap(1000, 500);
System.Drawing.Graphics g = Graphics.FromImage(b);
for (int i = 1; i <= 1000; i++)
{
Bitmap tempB = v.GetFrameFromVideo(((double)i) / 1000.0);
g.DrawImage(tempB, i, 0, 1, 500);
}
v.Dispose();
return b;
}
on prend 1000 images que l’on redimensionne à un pixel de large, et que l’on place à la suite dans une image de 1000×500.
Ce système basique rend des résultats très similaires à ceux du site précédent, et est plutôt rapide : pas plus de quelques minutes pour un film de 2h en .avi.
Si vous souhaitez expérimenter, en prenant une image par seconde par exemple, ne vous gênez pas, les sources sont la pour ça
MAJ :
Page de téléchargement (en Anglais uniquement pour l’instant)
| Print article | This entry was posted by Yaurthek on March 15, 2011 at 17:18, and is filed under Art, Coding, Projects. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
No trackbacks yet.
A better terminal color theme for Putty
about 7 months ago - 2 comments
Putty is a great terminal emulator for Windows, but its default color theme is pretty bad, especially for the blue colors, which are illegible: The good news is, someone already created a nice web tool to create a terminal theme, and to export it to several formats, including for Putty. Unfortunately, I had to edit…
Visual Studio snippet for a view model property, using the SetProperty() method
about 9 months ago - No comments
I spent my 3 months summer internship coding a Windows 8 application, and even though there now is a basic implementation of the INotifyPropertyChanged interface provided by Microsoft (BindableBase), I can tell you creating a view model for each view you need is very time consuming and boring, and not nearly as quick as I…
How to find all implementations of IEnumerable not implementing ICollection
about 10 months ago - No comments
Following my last post on benchmarking madness, here is a short one about finding .net classes or interfaces based on given criteria. While writing my last post, I found myself having a hard time searching for classes implementing IEnumerable<T> without also implementing ICollection<T>. Indeed, beside String, there is not so many… This information is almost…
Benchmarking madness: IEnumerable
about 10 months ago - 1 comment
What is the best way to know if an IEnumerable<T> contains at least one element? I mean, what is the most optimized way to know this information? Maybe the first thing that came to my mind was to do some .Count() > 0 check, but if you think of it, the Count() extension method would…
How to dynamically add properties to an existing object – dynamic keyword trick
about 1 year ago - No comments
Les développeurs sont fainéants, c’est l’une de leurs nombreuses qualités… To Wrap or not to wrap Je travaille sur une bibliothèque .net pour une api REST, dont un des objets modèle contient une propriété stockant l’url d’une image. Mon but est de sauvegarder cette image localement, puis d’ajouter le chemin local à l’objet, et enfin…
Firefox tip of the day: open twitter profile with the Awesome Bar
about 1 year ago - No comments
Introduction Problème : je veux accéder au profil d’un utilisateur twitter le plus rapidement possible depuis mon navigateur, en utilisant la notation courante @pseudo. J’ai cherché quelque temps une solution existante sans succès, et trouvant que cela faisait une bonne idée de projet, j’ai décidé de créer la mienne. N’ayant pas de meilleur idée, je…
When comes the night : screen colors inversion
about 1 year ago - No comments
Rien de tel qu’un écran affichant une page blanche ou claire, pour s’éclater les yeux lors de l’utilisation de son ordinateur dans la pénombre. Sans parler des insectes attirés à 100 mètres lorsque vous essayez d’aérer les 28.5°C de votre chambre… Pour atténuer un peu le problème, il existe une solution très simple en…
Entity Framework 4.1 : Un template qui prend en charge la documentation xml
about 1 year ago - No comments
Cela fait quelques semaines que je découvre Entity Framework, Le système d’ORM de Microsoft, et je l’apprécie de plus en plus Ce framework d’ORM a beau être jeune et manquer encore de pas mal de fonctions (qui à dit enumérations ?), il simplifie beaucoup la vie, et c’est un vrai plaisir de travailler avec. (tant…
Reinventing the wheel : C++ Linked List
about 1 year ago - 4 comments
Hasard du web ou magie des mots clés, j’ai l’impression en ce moment de ne lire que des posts ou les auteurs se demandent si les programmeurs de nos jours ne sont pas incompétents et paresseux comparés à leurs prédécesseurs… La question du lien précédent a généré un nombre impressionnant de réponses en une…
Tower Defense, projet de fin d’année SUPINFO
about 1 year ago - 7 comments
J’ai été plutôt discret ces derniers temps, pris pas mal d’occupations, dont la finalisation de nos projets de fin d’année à SUPINFO. Nous venons juste (mes 3 collègues et moi) de passer notre soutenance orale, ce qui met enfin un terme à plusieurs mois de développement. Notre présentation s’est très bien passée, et dans…



about 2 years ago
I was here when it happened and it’s epic