Forum Linux.général Chronomètre mplayer

Posté par .
Tags : aucun
1
3
jan.
2009
Bonjour,

Pour les besoins d'un script Bash, j'ai besoin de récupérer la durée instantanée d'une vidéo lancée via mplayer (en gros, la valeur du chronomètre sur la vidéo lorsqu'on presse la touche "o").

Connaissez-vous un moyen de récupérer cette information ?
  • # Slave mode

    Posté par (page perso) . Évalué à 4.

    Bon je comprends pas vraiment la question, 'fin du moins je le comprends de plusieurs manières différentes, en tout les cas la solution à ce que tu cherche me semble être le slave mode, voir http://www.mplayerhq.hu/DOCS/tech/slave.txt ou http://mediacoder.sourceforge.net/wiki/index.php/MPlayer_Sla(...) ou DOCS/tech/slave.txt dans les sources de mplayer pour avoir plus d'infos.
    • [^] # Re: Slave mode

      Posté par . Évalué à 2.

      Pour être plus clair, je veux créer une barre de progression. J'ai donc besoin :

      -de la durée totale de la vidéo (ex. 90mn). Facile à obtenir via "mplayer -identify"
      -de la durée courante de la vidéo (ex. 25mn). Comment l'obtenir ?
      • [^] # Re: Slave mode

        Posté par (page perso) . Évalué à 2.

        Donc c'est bien ce que je disais, t'utilise le slave mode et tu lui demande get_time_length et get_time_pos
        • [^] # Re: Slave mode

          Posté par . Évalué à 1.

          Merci pour ton aide
          • [^] # Re: Slave mode

            Posté par . Évalué à 4.

            Dans un terminal :
            mkfifo mplcmd
            mplayer TAVIDEO -input file=mplcmd -slave -quiet 2>/dev/null | grep POSITION=

            Dans un autre terminal :
            echo get_percent_position > mplcmd

            Le premier terminal répond : ANS_PERCENT_POSITION=1 (pour 1%) par exemple
            • [^] # Re: Slave mode

              Posté par . Évalué à 1.

              Merci.

              Qu'est ce qui ne va pas dans le script suivant ?

              Chaque commande détaillée individuellement dans la console donne satisfaction.
              Par contre, les lancer via le script laisse un fichier log.txt vierge.

              #!/bin/bash
              mplayer -quiet -slave MyMovie/MyMovie.avi -input file=/tmp/video-control &> ~/.mplayer/mplayer.log &
              echo get_time_length > /tmp/video-control
              TimeLength=`cat ~/.mplayer/mplayer.log | grep "ANS_LENGTH="`
              echo $TimeLength > MyMovie/log.txt
              • [^] # Re: Slave mode

                Posté par . Évalué à 1.

                Bon... c'est un problème de temporisation
                un "sleep 1" a fait l'affaire...
                • [^] # Commentaire supprimé

                  Posté par . Évalué à 2.

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

                  • [^] # Re: Slave mode

                    Posté par . Évalué à 2.

                    Très fort, c'est difficile de rajouter encore plus d'overhead inutile en restant aussi élégant. Que penses-tu de :
                    pouet () {
                    # le code a executer apres le sleep
                    }
                    trap pouet ALRM
                    sleep 5 && kill -ALRM $$

                    ?

                    Et si l'on cherche des sensations exotiques :
                    watch -n 2 'test $(($$-PPID)) -gt 1 && kill $PPID || sleep 3'
                    • [^] # Commentaire supprimé

                      Posté par . Évalué à 2.

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

                      • [^] # Re: Slave mode

                        Posté par . Évalué à 2.

                        ah le wait était pour le mplayer ? C'est pas bon, mplayer continue de s'exécuter pendant longtemps (le temps de la vidéo), alors que tu as la réponse "TimeLength" en quelques millisecondes.
                        • [^] # Commentaire supprimé

                          Posté par . Évalué à 2.

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

                          • [^] # Re: Slave mode

                            Posté par . Évalué à 2.

                            Je crois qu'il ne veut pas envoyer de quit car il veut continuer a le contrôler en le faisant seeker et tout.
                            Ensuite, les commandes sont envoyées par le FIFO, mais mplayer ne répond pas sur le FIFO (il faut rediriger stdout de mplayer sur un 2e FIFO).
                            Sinon je suis d'accord que l'usage de sleep est souvent bancal.

Suivre le flux des commentaires

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