Page 1 sur 1

Retour de programme en ligne de commande

Publié : dim. 17/janv./2010 20:43
par Kwai chang caine
Bonjour les copains :D

Je voulais recuperer la durée d'un MP3 en minute, seconde
Alors "j'm'ai" dit, je vais le demander a FFmpeg, je pense que ce doit etre la maniere la plus simple :roll:

Alors quand je tape dans la CMD, j'obtiens ça :
C:\>ffmpeg -i gaga.mp3
FFmpeg version SVN-r12665, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --enable-gpl --enable-postproc --enable-swscale --enable-avfilt
er-lavf --enable-pthreads --enable-liba52 --enable-avisynth --enable-libfaac --e
nable-libfaad --enable-libgsm --enable-memalign-hack --enable-libmp3lame --enabl
e-libnut --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid
--cpu=i686 --extra-ldflags=-static
libavutil version: 49.6.0
libavcodec version: 51.54.0
libavformat version: 52.13.0
libavdevice version: 52.0.0
built on Apr 2 2008 22:35:11, gcc: 4.2.3
Input #0, mp3, from 'gaga.mp3':
Duration: 00:02:04.8, start: 0.000000, bitrate: 128 kb/s
Stream #0.0: Audio: mp3, 44100 Hz, stereo, 128 kb/s
Must supply at least one output file
Et quand j'essaie d'avoir ces infos par PB , j'ai quedal (Comme dab) :(
Ou c'est que j'ai encore merdoyé :oops:

Code : Tout sélectionner

Parametre$ = "-i gaga.mp3"
x = RunProgram("ffmpeg.exe", Parametre$, "", #PB_Program_Open|#PB_Program_Read)

If x <> 0

 While ProgramRunning(x)
  Debug ReadProgramString(x)
 Wend
 
 If ProgramExitCode(x) <> 0
  Debug "error"
 Else
  Debug "success"
 EndIf
 
 CloseProgram(x)

Else 

 Debug "Ffmpeg ne s'est pas lancé"

EndIf
Merci de votre aide

Re: Retour de programme en ligne de commande

Publié : dim. 17/janv./2010 22:20
par venom
Salut KCC,

j'ai regarder de mon coté en effet c'est etrange car ce code doit récuperer une ligne depuis une commande lancer précédament avec runprogram

Code : Tout sélectionner

Programme  = RunProgram("ffmpeg.exe", "-i c:\requiem.mp3", "", #PB_Program_Open |  #PB_Program_Read | #PB_Program_Hide) 
 Output.s = "" 
  While ProgramRunning(Programme) 
	 Output = ReadProgramString(Programme) 
	  If FindString(Output,"Dur",1)
		 Break 
	  EndIf 
   Wend 
  Debug  Mid(Output, 1, 10)
Mais cela ne fonctionne pas. 8O

alors que celui-ci oui :

Code : Tout sélectionner

Programme  = RunProgram("ping.exe", "www.google.fr", "", #PB_Program_Open |  #PB_Program_Read | #PB_Program_Hide) 
 Output.s = "" 
  While ProgramRunning(Programme) 
	 Output = ReadProgramString(Programme) 
	  If FindString(Output,"Stat",1)
		 Break 
	  EndIf 
   Wend 
  Debug  Mid(Output, 14, 24)
étrange






@++

Re: Retour de programme en ligne de commande

Publié : dim. 17/janv./2010 22:58
par Kwai chang caine
Peut etre que FFMPEG y l'envoi pas les infos comme le fait une reelle commande DOS ?? :roll:

Re: Retour de programme en ligne de commande

Publié : dim. 17/janv./2010 23:36
par Ar-S
Je pense plutôt que
FFmpeg version SVN-r12665, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --enable-gpl --enable-postproc --enable-swscale --enable-avfilt
er-lavf --enable-pthreads --enable-liba52 --enable-avisynth --enable-libfaac --e
nable-libfaad --enable-libgsm --enable-memalign-hack --enable-libmp3lame --enabl
e-libnut --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid
--cpu=i686 --extra-ldflags=-static
libavutil version: 49.6.0
libavcodec version: 51.54.0
libavformat version: 52.13.0
libavdevice version: 52.0.0
built on Apr 2 2008 22:35:11, gcc: 4.2.3
sont les infos de bases données par FFmpeg et qu'ils ne dépendent pas des commandes paramètres inscrit par l'utilisateur.
En tapant -? à la place de -a dans une fenêtre DOS, le même blabla apparait en 1er. C'est un genre d'entête.

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 2:39
par case
en fait je pense que ffmepg n'utilise pas la même sortie qu'un programme dos car impossible de faire un dump dans un fichier texte avec


genre ffmpeg.exe >> test.txt


ne fonctionne pas non plus ( en tout cas sous seven)


pour ce qui est de retrouver la durée d'un mp3 ceci dit pas la peine de passer par un programme externe alors qu'on peux le faire en PB...

enfin moi je dis ca, je dis rien hein ...

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 9:38
par Fred
Regarde ce topic: http://www.purebasic.fr/english/viewtop ... lit=ffmpeg, ca peut peut etre t'aider.

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 10:10
par Kwai chang caine
@Case

J'ai peur que tu ai raison :(

@FRED

Merci pour le lien 8)
Malheureusement, je l'avais deja vu....et j'avais fait un essai mais ça marche pas non plus.
Je n'y connais rien la dedans...comme dans le reste d'ailleur, mais j'ai l'impression (C'est important le nez, quand le cerveau suit pas :wink:) que pour ce code c'est une autre fonction qui est lue, par la fonction ERROR.
J'en ai deduit ça, car meme si tu demande l'info sur le mp3, bah il te remonte toujours la version 8O

Code : Tout sélectionner

wait=RunProgram("ffmpeg.exe"," -i Gaga.mp3 ","",#PB_Program_Open|#PB_Program_Error|#PB_Program_Hide)

While ProgramRunning(wait)

 line.s=ReadProgramError(wait)
 Debug(StringField(line.s,1,","))

Wend

WaitProgram(wait)
Ce qui est bizarre, c'est que tu n'est pas infirmé ce que dit CASE.
Donc je suppose qu'il a raison, PB ne peut pas lire ce genre d'info.

Par contre, j'avais trouvé entretemps, un code qui lisait la console, (Parce que KCC, y casse les "cavouilles" a tout le monde, mais il cherche noir avant, et meme apres sa question).
Alors je m'etais dit que peut etre en lisant ce qu'ecris FFMPEG, je pourrais remonter les données, mais je n'ai pas eu le temps d'essayer, car dodo :(

Et ce matin "pere casel" a apporté dans notre cheminé son super code MP3 8O

Y'a un truc chiant avec RUNPROGRAM, mais si ça se trouve j'sais encore pas l'utiliser, c'est qu'il referme l'application, alors on a pas le temps de lire...et y'a pas moyen de l'arreter en cours, car avant la console n'est pas ouverte, et apres le RUNPROGRAM...bah elle se ferme :(
PEut etre connaissez vous une combine pour qu'elle reste ouverte ??? :roll:

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 10:29
par Fred
C'est surtout ffmpeg qui est mal codé, il utilise pas correctement la sortie standard (le fait qu'on ne puisse pas utiliser la redirection sous DOS le prouve).

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 11:00
par Kwai chang caine
D'accord FRED merci de l'info.
La seule chose que je voulais savoir c'est si c'est "normal" de ne pas pouvoir lire la sortie de FFMPEG

Quand je veux dire PB ne peux pas....sache bien que ce n'est pas une critique :D
Je pensais encore a un "protocole" ou une methode que tu n'avais soit pas choisie, sois pas encore envisagée :roll:
Je suis le premier a dire que PB sait tout faire....sauf la vaisselle .....et les GIFS et retour à la ligne :mrgreen: Aie pas sur la tete ...pas sur la tete aie !!! :lol: :lol:

Maintenant...si comme case t'as un PC dans tes toilettes....FFMEG, il est "OPEN RIVIERE"..... tu devrais leur montrer...ce que c'est que coder dans le bon sens :?
Et y'aura toujours un KCC derriere toi, avec une canette de bierre, une echarpe aux couleurs de PB, et une pancarte pour crier :
"Allez FREDO vas z'y FREDO...vas z'YYYyyyyyyyy !!!!!"
"Allez FREDO vas z'y FREDO...vas Z' YYYyyyyyyyy !!!!!"
:o :o

Au fait, encore merci pour mes JPG...j'meclate comme une bete avec la 4.41 ... 8)

Bonne journée et encore merci de ta reponse 8)

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 11:34
par Backup
Kwai chang caine a écrit : Par contre, j'avais trouvé entretemps, un code qui lisait la console, (Parce que KCC, y casse les "cavouilles" a tout le monde, mais il cherche noir avant, et meme apres sa question).
c'est qu'il referme l'application, alors on a pas le temps de lire...et y'a pas moyen de l'arreter en cours, car avant la console n'est pas ouverte, et apres le RUNPROGRAM...bah elle se ferme :(
PEut etre connaissez vous une combine pour qu'elle reste ouverte ??? :roll:
ben tu cherche mal dans la doc !! :roll:

Code : Tout sélectionner

; *******************************
; recupere tout les Formats de codec possible avec ffmpeg
FFmpeg$ = "C:\Dobro\PureBasic\dobro\Dobro_creation\Pure Converter\pure converter_source\Source_pure_converter_v1_8\ffmpeg.exe" 

id=RunProgram(FFmpeg$,"-formats",fichier$,#PB_Program_Open|#PB_Program_Read );<--- on lance ffmpeg

While AvailableProgramOutput(id)
    Debug ReadProgramString(id) + Chr(13) 
Wend
Delay(60000) ; ---------< ici la methode pour rester ouvert !!
CloseProgram(id)
; *******************************

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 11:59
par Kwai chang caine
T'es un malin DOBRO, t'as sorti la phrase de son contexte :lol:
Je parlais du code pour retourner un texte de la console.
La plaie du forum a écrit :Par contre, j'avais trouvé entretemps, un code qui lisait la console, (Parce que KCC, y casse les "cavouilles" a tout le monde, mais il cherche noir avant, et meme apres sa question).
Pour runprogram, j'ai lu la doc, mais pas tout compris :oops:
Y'a un truc chiant avec RUNPROGRAM, mais si ça se trouve j'sais encore pas l'utiliser
Mais bon....le soleil...ça brule les yeux :lol: :lol: :lol:

C'est pas grave...merci de ton code...mais chez moi ça me donne un panneau noir :(

Re: Retour de programme en ligne de commande

Publié : lun. 18/janv./2010 12:17
par Kwai chang caine
Par contre y viens encore de m'arriver un truc de guedin 8O

J'ai lancé le meme code et cette fois il m'a donné la "DURATION" en plus de l'erreur
Comme si le texte il etait coincé quelque part et qu'a force que je le demande a FFMPEG et bah il me le donne 8O

J'ai bidouillé et maintenant plus moyen qu'il recommence ....
J'comprend plus rien :roll: