Sortie de Fwomaj 0.3

Posté par  . Édité par Benoît Sibaud. Modéré par bubar🦥. Licence CC By‑SA.
35
14
juil.
2016
Audiovisuel

N. D. M. : dépêche réécrite en octobre 2022 suite à la demande de purge du compte de l'auteur initial

Fwomaj est un lecteur multimédia libre (GPLv2) permettant de « dérusher » (parcourir rapidement des fichiers vidéos après un tournage).

Aller plus loin

  • # Commentaires rapides

    Posté par  (site web personnel) . Évalué à 7.

    dpkg gère les installations/mises à jour/suppressions de paquets, c'est dans apt (& friends/concurrents) que tu trouveras la partie résolution de dépendances.

    La page de manuel est construite (à partir du fichier d'exemple SGML) mais n'est pas embarquée dans le paquet résultant (tu pourrais la lister dans debian/manpages pour qu'elle le soit, mais il faudrait probablement commencer par modifier le boilerplate).

    J'ai bien fait de lancer la compilation à coup de debuild directement, le script build_package.sh semblant vouloir lancer un upload…

    En tout cas, cela semble se lancer et tourner correctement sur Debian Jessie. Peut-être que « Tous les fichiers » ou « Tous les fichiers vidéo » serait un meilleur choix dans le sélecteur de fichier ?

    Debian Consultant @ DEBAMAX

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 1. Dernière modification le 15 juillet 2016 à 09:46.

      Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 2. Dernière modification le 15 juillet 2016 à 10:27.

      Ce commentaire a été supprimé par l’équipe de modération.

      • [^] # Commentaire supprimé

        Posté par  . Évalué à -7. Dernière modification le 15 juillet 2016 à 12:58.

        Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Commentaire supprimé

          Posté par  . Évalué à 3.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à -7. Dernière modification le 15 juillet 2016 à 15:59.

            Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: Commentaires rapides

            Posté par  (site web personnel) . Évalué à 1.

            Spécifiquement, j'aimerais bien (le mot est faible) un journal ou une dépêche sur les horreurs qu'il a forcément du rencontrer dans sa tache pharaonique de "je lis tous les fichiers multimedia" plus on bosse avec

            Mouais, mais pour décrire toutes les merdes et les hacks de MI pour le gérer, il me faudrait 1 ou 2 semaines (ou plus) pour écrire le journal. Et c'est pas un taf des plus motivant.

            • [^] # Commentaire supprimé

              Posté par  . Évalué à 2.

              Ce commentaire a été supprimé par l’équipe de modération.

  • # Génial

    Posté par  . Évalué à 5.

    J'ai adoré ta dépêche, c'est vraiment en plein dans l'idée que je me fait de linuxfr : c'est une présentation mais aussi un retour d'expérience et surtout un partage.

  • # MediaInfo

    Posté par  (site web personnel) . Évalué à 2.

    Mediainfo… Est le meilleur outil d'analyse de fichiers multimédia, oui du monde, même sans les mains, point final.

    J'aime.
    (désolé)

    J'avais commencé à implémenter une usine à mazout en utilisant les fonctions de "découverte" de GStreamer, pour éviter une dépendance, mais sa souplesse et son intelligence relative étaient ridicules face aux capacités d'introspection de Mediainfo.

    Par curiosité, quel reproche fais-tu sur la souplesse de GStreamer? A première vue, son API semble propre.
    Et tu as rencontré des fichiers qui t'ont donné du fil à retordre ("intelligence relative")?

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 2.

      Ce commentaire a été supprimé par l’équipe de modération.

  • # Improvements ?

    Posté par  . Évalué à 5.

    Salut,

    j'ai rapidement jeter un œil a ton code (le nom m'a fait marrer): bon on est d'accord pour une PoC c'est bien mais ça risque d'en dissuader plus d'un =D.
    Mes modestes conseils (qui son mes guidelines, vous aurez surement les votres) qui pourraient t'aider:

    • essaie de séparer la partie "lib" de la partie interface GTK et de la partie exécution de script pour commencer. Simplement tu peux faire un package fwomaj/ dans lequel tu crées 3 modules par exemple libfwomaj.py, cmd_scripts.py, gtk_ui.py ; En gros ça te permet si un jour tu veux faire un support en CLI d'ajouter un cli_ui.py qui utilisent tes popen de libfowmaj.py sans tout refaire.

      • libfwomaj.py : tu y mets toute tes fonctions ffmpeg, gstreamer, et mediainfo dans un premier temps, puis essaie de faire des objets et des mixin pour emballer/structurer le tout,
      • cmd_scripts.py : tu y mets la partie pour exécuter la ligne de commande (en gros ce que tu mettrais dans une fonction main (que tu n'as pas fait) ie: tes lignes 769-772) ce qui permet d'ajouter un parser, des options par défauts, bref la partie système,
      • gtk_ui.py : toute ta partie concernant gtk, décorrélée de toute ce que tu as mis dans les autres fichiers.
    • pour mediainfo tu peux utiliser le wrapper python PyMediainfo https://pymediainfo.readthedocs.io/en/latest/ ça t'évite d'aller ouvrir un popen pour récupérer les infos ;)

    D'une façon générale, j'aurai fait un objet Fwomaj qui lui va réaliser le binding entre la video et ton interface. Par exemple je trouverai sympa d'avoir un truc du style:

    class GtkUiFwomaj(...):
        def __init__( ... ):
            ...
            self.mycheese = Fwomaj('my_video.avi')
            # puis tu initialises ton UI avec les fonctions & attributs de ton objet Fwomaj
            ...

    La classe Fwomaj te permettant de récupérer les infos via mediainfo, d'initialiser ton pipeline GStreamer, de faire ta waveline le tout sans être dépendant de GTK. Par exemple ça peut donner:

    # Par exemple pour charger un nouveau fichier
        ...
        def on_load_file(self, widget, filename):
            """ Load a file, either at startup or later. """
            delete self.mycheese                 # some cleanup
            self.mycheese = Fwomaj(filename)     # our new file
            ...

    A vérifier mais ce genre de truc te permet de virer le fichier png de ta waveline quand tu delete l'objet par exemple. Au niveau des UI faire le nettoyage c'est souvent le bordel, même si au départ je n'ai qu'une ligne, je fais une fonction ui_cleanup(…) en prévision du futur (NB: tu peux aussi t'en servir à l'init pour être sur d'avoir quelque chose de cohérent entre les états/variables/éléments de ton UI).

    Ou encore ta classe WForm avec cette tête:

    class WForm(object):
    
        @classmethod
        def execute(cls, cheese, wbox, style_provider, spinner, label):
            ## ici cheese est un objet Fwomaj
            ...
            label.set_text(' Generating WaveForm image for {}... '.format(cheese.name)
            unique_file = os.path.join(tempfile.gettempdir(), 'fwomaj-{}.png'.format(time.time()))
    
            # on fait la waveline
            cheese.do_waveline(unique_file)
    
            # la suite qui elle dépend des GObject
            ...

    C'est simple à comprendre, ça t'évite d'aller mettre en global ta commande, même si tu caches un peu la misère dans une classe =D.

    Bref mes 2 copecs si tu as envie d'y re-travailler dessus pour l'améliorer. =)

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 1.

      Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.