[PyGObject] Youtube-dl Pygtk Gui


Youtube-dl PyGtk Gui est une interface graphique du célèbre youtube-dl, crée avec Python 3.xx en utilisant le module Python PyGtk3 (PyGObject nommé aussi PyGI) et GLib.

Beaucoup de mots difficiles ? hein ?
Pas de problème. Je vais tout expliquer par la suite .

youtube-dl : Est un programme tournant sur presque tous les systèmes d'exploiations (Windows, Mac OS X, Gnu/Linux, Unix, Unix-like, BSD , etc...). Cette portabilité est due au  langage de programmation Python qui s'exécute sur les différents systèmes d'exploitations cités (autres aussi).

Python : est un langage de programmation objet, multi-paradigme et multiplateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl. La dernière version stable de Python est Pyton 3.4.2. (source Wikipédia)

PyGtk3 : Est un module Python permettant la création d'interfaces graphiques utilisant la bibliothèque GTK2. Depuis la version GTK3, PyGObject (appelé aussi : PyGI) remplace PyGtk dans ce rôle.
PyGObject (PyGI) : Est une liaison entre Python et GLib/GObject/GIO/Gtk+. Ce qui signifie : PyGI est une module Python qui donne accès propre et conforme à l'ensemble de la plateforme de logiciel de GNOME grâce à l'utilisation de l'introspection GObject.

GLib : est une bibliothèque libre de manipulation de structures de données - arbres, table de hachage et listes. Elle a commencé en tant qu'élément de GTK+, mais est utilisée maintenant par de nombreuses applications.
C'était à l'origine une bibliothèque utilisée comme fourre-tout pour le code bas niveau. Elle s'est désormais étendue pour offrir des fonctionnalités diverses qui sont en plus portables.
GLib fait partie du paquet GTK+ du projet GNU. Elle est distribuée selon les termes de la licence GNU LGPL.


Ouuuuf !! Des définitions, des définitions et encore des définitions !!

N'ayez pas peur. Il faut connaître ces outils pour ne pas se casser la tête en tout créant du point de départ (from scartch). Python et tous ces modules nous facilitent la vie et nous donnent un accès à une multitude de choix pour ne pas compliquer la création des GUI.
En effet, je me rappelle de mon professeur d'analyse quand il nous a dit pour ne pas compliquer la résolution de cette équation, on la traite avec les nombres complexes et la résultat sera directe.
Notre cas suit la règle de mon professeur : Pour créer une interface graphique basée sur GTK+, faudra bien connaître nos outils de travail et savoir les manipuler.

Assez de théorique. Un peu de pratique.
Le code source de "Youtube-dl PyGtk Gui" peut être téléchargé soi sur Google Drive ou bien sur Github.


  • Explication du concept générale du programme :


"Youtube-dl PyGtk Gui" est une interface graphique qui se base sur "youtube-dl" qui pourra être téléchargé et installé via ce lien (lien officiel de youtube-dl).
Lors du lancement de "Youtube-dl PyGtk Gui", l'utilisateur doit entrer l'URL de la vidéo youtube qu'il veut télécharger, puis choisir le format souhaité (pour l'instant la GUI supporte les formats MP4 et FLV, les autres formats et fonctionnalités seront ajoutées dans les prochaines versions du programme). L'appui sur le bouton télécharger actionne youtube-dl en lui envoyant l'option du téléchargement d'une vidéo, la format et l'URL. Les informations collectées par notre GUI et affichées sur son TextView (espace de visualisation textuel). L'appui sur le bouton Stopper, annule le téléchargement et stoppe la barre de progression "ProgressBar".


  • Explication de quelques concepts du code utilisé :
Je dois remercier gianmant du forum  stackoverflow pour l'idée de l’a-synchronisation en utilisant GLib :


GLib.source_remove(self.source_id_out) : Enlever self.source_id_out de la boucle principale.
Gtk.events_pending() : Retourne "True" s'il y a un événement en attente dans le programme et "False" dans le cas contraire.
Gtk.main_iteration_do(False) : Ne pas bloquer l'itération du programme
GLib.spawn_async(params,flags=GLib.SpawnFlags.SEARCH_PATH|\
GLib.SpawnFlags.DO_NOT_REAP_CHILD,standard_output=True,standard_error=True) :
 La définition générale est : GLib.spawn_async(arguments,flags,child,setup,standard_output,standard_error)
GLib.spawn_async appelle la fonction GLib.spawn_async_with_pipes sans les pipes, Donc : GLib.spawn_async = Exécute un programme enfant (child)de manière asynchrone. Ce qui signifie que le programme ne sera pas bloqué en attendant l'enfant (processus enfant) pour quitter.
io = GLib.IOChannel(stdout) : Création d'une variable qui stock les informations du socket de retour
err = GLib.IOChannel(stderr) : Création d'une variable qui stock les informations du socket d'erreur
self.source_id_out = io.add_watch(GLib.IO_IN|GLib.IO_HUP, write_to_textview,self.tw_out,priority=GLib.PRIORITY_HIGH) : La définition générale est : def glib.io_add_watch(file id, condition, callback, addional arguments ...)                               File ID : GLib.IO_IN = Date to read / GLib.IO_HUP = Hang UP / GLib.IO_ERR =  Condition d'erreur / GLib.IO_out = Données peuvent être écrites / Glib.IO_PRI = Données urgentes pour la lecture . add_watch : contrôle le file id par la condition ajoutée et si la condition est vraie, callback sera exécuté
GLib.spawn_close_pid(pid)  : Faut fermer GLib.spawn_asyn avec GLib.spawn_close_pid()


  • Mise à jour : 

18/10/2014 Fixed - Support des formats suivants :
  • WEBM [Audio Basse Qualité]
  • M4A [Audio]
  • MP4 [Vidéo 144p]
  • WEBM [Vidéo 240p]
  • MP4 [Vidéo 240p]
  • WEBM [Vidéo 360p]
  • MP4 [Vidéo 360p]
  • WEBM [Vidéo 480p]
  • MP4 [Vidéo 480p]
  • WEBM [Vidéo 720p]
  • MP4 [Vidéo 720p]
  • WEBM [Vidéo 1080p]
  • MP4 [Vidéo 1080p]
  • 3GP [Vidéo 176x144]
  • 3GP [Vidéo 320x240]
  • FLV [Vidéo 400x240]
  • WEBM [Vidéo 640x360]
  • MP4 [Vidéo 640x360]
  • MP4 [Vidéo 1280x720 Meilleure Qualité]
    • Une seule zone d'affichage du traitement lors du téléchargement
    • Ajout de deux fenêtres de dialogues en cas de mauvaise manipulation du logiciel
    • Ajout de la repository GitHub
09/11/2014 Update :

  • Optimisation du code source
  • Fenêtre de taille fixe
  • VBox homogène
  • Traduction de la Gui en anglais
11/11/2014 Update :

  • Ajout d'une interface de choix de langue (Français et anglais)



Enregistrer un commentaire