Journal fricorder : magnetoscope pour flux freebox

Posté par  (site web personnel) .
Étiquettes : aucune
0
6
jan.
2006
Voilà, ça ne concerne que les linuxiens qui possèdent une freebox, et qui ont le multiposte d'actif ...
Ce n'est pas de la pub (d'ailleurs peut on parler de pub pour un produit gpl ?!), mais c'est le genre de journal que j'aurai voulu voir icc bas ... ça m'aurait évité de devoir le developper moi même ;-)

comme le dit le titre : c'est une magnetoscope numerique, réalisé en python/gtk, qui permet de programmer des enregistrements de flux freebox (rtsp) sur son ordinateur.
C'est une sorte de frontend à "at", qui lance un script (de ce genre http://linuxfr.org/%7E11010010/20437.html), pour enregistrer le flux via un vlc qui bien ... (merci à David Decotigny pour l'idée du script)

tout est dispo là :
http://manatlan.online.fr/fricorder.php
(plus d'infos sur la pauvre page)

ça existait, assez rapidement pour les plateformes win32, et en voilà un pour gnu/linux (gtk) ... et qui permet, en plus, d'utiliser un guide tv (fichier xmltv, issu de tv_grab_fr), pour faciliter la saisie des enregistrements ... (je crois savoir qu'il y en a aucun sous win qui possède déjà cette fonctionnalité) ...

ça marche plutôt bien ;-), et c'est la version 0.5 (avant ça se nommait freecorder) ...

si ça peut servir à d'autres ... j'accepte aussi les patchs ...
et si il y a des gens qui arrivent à enregistrer dignement en mpeg4 avec VLC : je suis également prenneur (les tests que j'ai fait, il était le plus souvent illisible par autre chose que vlc, sous sans son, ou sans video, et quand il y avait les 2 : c'était souvent décalé) ...

Il y aura bientôt, une interface web, pour un pilotage distant, en utilisant l'excellent nouveau web.py ( http://webpy.org/ ) ... et qques menus corrections (nom de l'emission enregistré, ...)
  • # :)

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

    Plutôt sympa, cette idée... Je testerais un de ces 4, même si je n'ai pas l'occasion de regarder souvent la TV...

    merci
  • # J'ai une erreur au lancement

    Posté par  . Évalué à 1.

    File "./fricorder.py", line 99
    @staticmethod
    ^
    SyntaxError: invalid syntax

    J'ai pourtant bien installé les dépendances précisées dans le lisez-moi.
    • [^] # Re: J'ai une erreur au lancement

      Posté par  . Évalué à 2.

      C'est parceque tu n'est pas en Python 2.4...
      Cette nouveauté (l'utilisation du '@') est apparue à la version 2.4 du langage, pour permettre facilement de "décorer" une fonction (ce sont des decorators en anglais).
      En gros, c'est (pour reprendre la doc de Python) :

      @A @B @C
      def f ():
      ...

      It's equivalent to the following pre-decorator code:
      [ est équivalent au code suivant (en python 2.3)]

      def f(): ...
      f = A(B(C(f)))
      • [^] # Re: J'ai une erreur au lancement

        Posté par  . Évalué à 1.

        Merci de la réponse.
        J'ai python2.3 et python2.4 d'installés. Comment faire pour que fricorder utilise la version 2.4 ?
        • [^] # Re: J'ai une erreur au lancement

          Posté par  . Évalué à 2.

          2 possibilités :

          si tu lances le soft en ligne de commande (en supposant que python24 est le nom de l'executable Python 2.4) :
          python24 fricorder.py

          Sinon, modifier le fichier fricorder.py, première ligne, remplacer :
          #!/usr/bin/env python

          par
          #!/usr/bin/python24

          Bien sûr, adapter "/usr/bin/python24" à ton install...

          David
          • [^] # Re: J'ai une erreur au lancement

            Posté par  . Évalué à 1.

            Je n'ai plus d'erreur.
            Bon le logiciel ne se lance pas non plus, mais je pense que ca vient du fait qu'il ne trouve pas la playlist, et qu'il reste bloqué en attendant. Je testerais ca ce soir en rentrant.

            Merci du coup de main.
          • [^] # Re: J'ai une erreur au lancement

            Posté par  . Évalué à 1.

            Bonjour,

            j'ai suivi tes conseils en modifiant fricorder.py pourutiliser python2.4

            je passe lepb de @...

            mais j'obtiens l'erreur suivante:

            Traceback (most recent call last):
            File "./fricorder.py", line 514, in ?
            main()
            File "./fricorder.py", line 505, in main
            window1 = Window1()
            File "./fricorder.py", line 167, in __init__
            SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
            File "/home/jpq/fricorder/SimpleGladeApp.py", line 108, in __init__
            self.new()
            File "./fricorder.py", line 226, in new
            self.fillAt()
            File "./fricorder.py", line 267, in fillAt
            for code,chaine,deb,duree in getAtList():
            File "./fricorder.py", line 55, in getAtList
            buf=run(["atq"])
            File "/home/jpq/fricorder/libs/common.py", line 9, in run
            p = Popen(cmds, shell=False,stdout=PIPE,stderr=PIPE)
            File "/usr/lib/python2.4/subprocess.py", line 542, in __init__
            errread, errwrite)
            File "/usr/lib/python2.4/subprocess.py", line 975, in _execute_child
            raise child_exception
            OSError: [Errno 2] Aucun fichier ou répertoire de ce type

            Merci pour ton aide

            jpq
  • # je vais jouer les gros lourd

    Posté par  . Évalué à 0.

    sisi...
    Mais est-ce qu'il y a une version style ligne de commande pour les gros boulets comme moi ( c'est pour ca que je suis lourd ) qui sont partit trop vite le matin, permettant de tout faire dans un terminal ( à la xawdecode_record.sh quoi... ) ?
    Bon si y a pas, je peux toujours recup les deux scripts et faire un mix...

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: je vais jouer les gros lourd

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

      D'après le journal c'est un frontend à http://linuxfr.org/~11010010/20437.html donc il te suffit d'utiliser le script de cette page

      S'il y a un problème, il y a une solution; s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

      • [^] # Re: je vais jouer les gros lourd

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

        oui, mais ce n'est plus du tout ce script ...
        cependant, je prévois de faire un frontend web ...

        donc, en ssh ... il suffira de lancer le bousin ... et de tuneller le futur port de l'interface web ... et de clic clic clic ...

        sinon si tu feux utiliser la ligne de commande de fricoder tu peux toujours faire :

        echo ./frecord.sh rtsp:/.... 60 haute ~/fichier.mpg | at 15:00
        (60: minute ... à 15h, en qualité "haute" ...)
  • # Merci beaucoup

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

    C'est tout à fait le genre de chose qui me falait.

    Je vais l'essayer, mais j'ai déjà quelques remarques/suggestions :
    - Permettre de spécifier l'heure de fin plutot que le durée.
    - Pouvoir utiliser mencoder au lieu de vlc.
    - Quel est la marge (si il en a une) prise autour des horaires donnés par xmltv ?
    - Fournir un fichier de config adequat pour xmltv.
    - Permettre de lancer automatiquement un programme après que l'enregistrement soit achevé (par exemple pour réencoder en mpeg4 avec 2 passes)
    - Ajouter les logos des chaines (si, si !)

    Sinon tu devrais proposer ton soft sur la page suivante :
    http://www.freeplayer.org/portal.php?article=3182&pid=1
    Histoire de montrer qu'il existe aussi des logiciel pour commander le magnetoscope freeboxtv sous linux.
    • [^] # Re: Merci beaucoup

      Posté par  . Évalué à 3.

      Snif. Moi qui avait décidé de ne pas racheter de télévision, je viens de découvrir Free Multiposte à cause de ton journal.

      Au moins ton logiciel me permettra d'avoir une utilisation plus intelligente du bidule... Waouhhh y'a les simpsons ! A+
  • # Enregistrement

    Posté par  . Évalué à 2.

    Pour le transcodage (en regardant ou non), j'obtiens de
    bon résultat (pas de décalage audio/video, et regardable partout (totem, xine, ...) en faisant:

    Méthode d'encapsulation: ogg
    Option de transcodage:
    Codec Video: mp4v, 512kps, echelle 0.75
    Codec Audio: vorb, 64kps

    Ce qui donne:
    :sout=#transcode{vcodec=mp4v,vb=512,scale=0.75,acodec=vorb,ab=64,channels=2}:duplicate{dst=display,dst=std{access=file,mux=ogg,url="essai.ogg"}}

    j'aurrai bien mit theora comme codec Video, mais chez moi, ca plante... seg. fault...

    sinon, je test ton soft dès ce soir! y-a-t il un témoin visuel qui indique
    l'enregistrement en cours ?
    • [^] # Re: Enregistrement

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

      > sinon, je test ton soft dès ce soir! y-a-t il un témoin visuel qui
      > indique l'enregistrement en cours ?

      oui, une progressbar (zenity), permettant d'annuler ....

      sinon, merci pour tes params vlc ...
      suis vraiment curieux de tester ça ce soir !!!! (mais il me semble que j'avais aussi essayé cette combi)
      • [^] # Re: Enregistrement

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

        oui, une progressbar (zenity), permettant d'annuler ....

        Chez moi, Lorsque l'enregistrment ce lance, zenity (d'apres top en tout cas) prend 100% du cpu, ce qui est assez genant.
        Des idées sur la cause de ce problème?
        • [^] # Re: Enregistrement - problème sur zenity

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

          L'appel fait à zenity consomme tout le temps cpu restant.
          Pour éviter cela, on peut (par exemple) remplacer la ligne contenant "zenity" du fichier fricord.sh par le code suivant :

          (
          echo "0"
          sleep $LENGTH
          ) | zenity --display=:0.0 --progress --pulsate --title "FriCorder: Enregistrement de" --text `basename $OUTFILE` --auto-close &
    • [^] # Re: Enregistrement

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

      avec tes params ... j'ai uploadé une version 0.5b maintenant
      2 possibilité d'enregistrement :
      - direct : qualité direct du flux (mpeg2)
      - OGM : compression mpeg4 comme tes params ...
      • [^] # Re: Enregistrement

        Posté par  . Évalué à 1.

        Un rapide benchmark permet de mettre en lumiere que le format TS (qui possede des paquet de seulement de 188bytes) est loin d'être optimal dans le cas d'un sauvegarde sur disque.

        Voici le resultat des different format d'encapsulation pour un même stream

        -rw-r--r-- 1 ja ja 5948161 jan 6 18:31 foo.asf
        -rw-r--r-- 1 ja ja 5896185 jan 6 18:32 foo.mpg
        -rw-r--r-- 1 ja ja 5945568 jan 6 18:30 foo.ogg
        -rw-r--r-- 1 ja ja 5898192 jan 6 18:31 foo.ps
        -rw-r--r-- 1 ja ja 6144592 jan 6 18:29 foo.ts

        la packetisation de type MPEG semble la plus efficace dans ce cas.
        Il serait donc souhaitable que tu changes ton foramt de sauvegarde "direct"
        du format MPEG TS vers MPEG1

        donc, de "#std{access=file,mux=ts,url=$OUTFILE.mpg}"
        vers "#std{access=file,mux=mpeg1,url=$OUTFILE.mpg}"
      • [^] # Re: Enregistrement

        Posté par  . Évalué à 1.

        salut

        j'avais essayé une version précédente et c'est vrai que l'enregistrement en basse qualité était plutot mauvaise.
        Maintenant avec OGM l'image est meilleur mais j'ai pas le son!

        Je n'arrive pas non plus à faire fonctionner le guide avec un fichier xmltv (j'ai rajouté le chemin du fichier dans .fricorder): j'ai l'erreur ,en lançant progtv.py,
        "Vous n'avez pas specifier de cle 'xmltv' dans la section 'common' de votre ~/.fricorder"

        Humfred
        • [^] # Re: Enregistrement

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

          bah, je crois que c'est clair ...
          (soit c pas bien configuré, soit le fichier existe pas)

          il faut qqchose du style, dans le fichier ~/.fricorder :
          -------------------------------------------------------------------
          [common]
          ...
          xmltv=/path/vers/un/fichier/qui/existe
          • [^] # Re: Enregistrement

            Posté par  . Évalué à 1.

            Mon fichier ~/.fricoder:

            --------------
            [config]
            minutes = "30"
            destination = /home/humfred/Video
            quality = 1


            [common]
            xmltv = /home/humfred/guide
            ------------------

            Et le fichier "guide" existe bien!
            Je comprends pas pourquoi ça marche pas.

            Humfred
            • [^] # Re: Enregistrement

              Posté par  . Évalué à 1.

              En fait, c'est dans [config] qu'il faut ajouter la ligne, pas dans [common] comme indiqué.
              • [^] # Re: Enregistrement

                Posté par  . Évalué à 1.

                Exact, merci ça marche ... presque!

                Maintenant j'ai une erreur avec de codage UTF8

                ./fricorder.py
                Traceback (most recent call last):
                File "./fricorder.py", line 514, in ?
                main()
                File "./fricorder.py", line 505, in main
                window1 = Window1()
                File "./fricorder.py", line 167, in __init__
                SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
                File "/home/fred/usr/local/fricorder/SimpleGladeApp.py", line 108, in __init__
                self.new()
                File "./fricorder.py", line 191, in new
                if not progtv.isPresent(chaineTV):
                File "/home/fred/usr/local/fricorder/libs/progtv.py", line 81, in isPresent
                if chaine in __progs.keys():
                UnicodeDecodeError: 'utf8' codec can't decode bytes in position 9-11: invalid data

                Dommage, bon programme en tout cas :)

                Humfred
  • # Bugs

    Posté par  . Évalué à 1.

    J'ai deux gros bugs avec ton logiciel qui le rendent inutilisable :
    - Une fois l'enregistrement lancé il ne s'arrête jamais, même passée la durée spécifiée. Quand je l'arrête manuellement avec le bouton cancel, le script s'arrête mais vlc continue de tourner à moins d'un kill sauvage.
    - Les fichiers produits ne sont pas lisible (j'ai testé avec vlc, mplayer et xine).
    • [^] # Re: Bugs

      Posté par  . Évalué à 1.

      Pour préciser le deuxième point, je viens de faire plus de tests et c'est seulement les fichiers produits avec l'option basse qualité que je n'arrive pas à lire.
    • [^] # Re: Bugs

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

      > - Une fois l'enregistrement lancé il ne s'arrête jamais, même passée la durée spécifiée. Quand je l'arrête manuellement avec le bouton cancel, le script s'arrête mais vlc continue de tourner à moins d'un kill sauvage.

      Il faut créer un répertoire "tmp" dans le dossier ou se trouve ton fricorder. C'est dans ce dossier que vont être enregistrés les pid des programmes lancés pour l'enregistrement. Pour pouvoir les killer (en -9, un peu bourrin ^^) après.
      • [^] # Re: Bugs

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

        oui ...

        mais la 0.5b répare tout ça ....
        elle vient avec le rep

        mais bientot y aura un deb
  • # Un autre bug

    Posté par  . Évalué à 1.

    Je ne suis pas sur que ca vienne de ton programme ou de at, mais j'ai un bug.

    Si je fais at -c N° du job, j'ai tout un tas de ligne avant la commande en derniere ligne. Je pense que c'est normal que at me mette tout ca, et c'est pourquoi il y a une recherche avec une expression rationnelle dans ton source ( si ce n'est pas le cas, alors at bug dans mon environnement ).

    Là ou ca coince, c'est que si fricorder ( et donc la commande at ) est lancé depuis mon shell bash non configuré, l'expression rationnelle fonctionne, mais depuis mon shell zsh, ca coince.

    Résultat : le résumé des enregistrement affiche n'importe quoi, mais bon l'essentiel est là : ca enregsitre.
    Merci pour ce programme !

    Voici la fin de la commande at -c.
    Je pense que ca coince sur la ligne PS1, mais je n'y connais pas suffisament en python et expressions rationnelles pour corriger :

    EDITOR=vim; export EDITOR
    LESSCHARSET=latin1; export LESSCHARSET
    PS1=%{\[33\;36\;1m%}%T%{\%}\ %{\[33\;31\;1m%}%n%{\\[33\;33\;1m%}@%{\[33\;37\;1m%}%m\ %{\[33\;32\;1m%}%\~%{\\[33\;33\;1m%}%#%{\%}\ ; export PS1
    HISTORY=100; export HISTORY
    SAVEHIST=100; export SAVEHIST
    HISTFILE=/home/laurent/.history; export HISTFILE
    cd /home/laurent/Desktop/fricorder || {
    echo 'Execution directory inaccessible' >&2
    exit 1
    }
    ./frecord.sh rtsp://mafreebox.freebox.fr/freeboxtv/201 60 direct "/home/laurent/Desktop/[France_2][2006.01.07_22:17][1]"
  • # Freevo

    Posté par  . Évalué à 1.

    Le truc vraiment génial, ce serait de pouvoir intégrer ça à Freevo (sur mon poste qui a Freevo, je n'ai pas de carte d'acquisition TV).
  • # Excellent !

    Posté par  . Évalué à 2.

    J'ai testé l'enregistement de 2 chaines en simultané, ça marche impec :)
  • # problème avec glade :

    Posté par  . Évalué à 2.

    bonjour, merci pour ce petit logiciel...mais il y a un problème chez moi :

    $ ./fricorder.py
    Traceback (most recent call last):
    File "./fricorder.py", line 30, in ?
    from SimpleGladeApp import SimpleGladeApp
    File "/home/maston28/Desktop/fricorder/SimpleGladeApp.py", line 28, in ?
    import gtk.glade
    ImportError: No module named glade

    j'ai bien installé python-gtk-glade, mais ca ne amrche toujours pas...
    quelqu'un a le même problème ? p-e un problème de path pour trouver glade (mdv2005LE ici).

    si quelqu'un a une idée...
  • # Erreur de segmentation vlc $STREAM

    Posté par  . Évalué à 1.

    Pour ma part j'ai téléchargé l'archive hier après midi .... La phase de configuration de l'enregistrement se passe sans problème mais lors de l'enregistrement j'ai le message suivant:
    VLC media player 0.8.4-svn20040920 Janus
    Warning: option --filter is deprecated. You should use --vout-filter instead.
    [00000269] dummy interface: Using the dummy interface module...
    ./frecord.sh: line 76: 11523 Erreur de segmentation  vlc $STREAM --filter deinterlace:bob --sout "#std{access=file,mux=ts,url=$OUTFILE.mpg}" -I dummy
    ./frecord.sh: line 22: kill: (11523) - Aucun processus de ce type
    ./frecord.sh: line 71: 11531 Processus arrêté      sleep $LENGTH
    ./frecord.sh: line 60: 11528 Processus arrêté      zenity --display=:0.0 --progress --pulsate --title "FriCorder: Enregistrement de" --text `basename $OUTFILE`
    Alors si quelqu'un à une idée, ce serait cool ! En tout cas chapeau à Manatlan

Suivre le flux des commentaires

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