Peut-on régler la vitesse de lecture d'une vidéo ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
jak64
Messages : 89
Inscription : dim. 03/mai/2020 23:16

Peut-on régler la vitesse de lecture d'une vidéo ?

Message par jak64 »

Bonjour,
En VB, j'arrivais à régler la vitesse de lecture d'une vidéo (soit la ralentir, soit l'accélérer)
Peut-on le faire en PureBasic v.72 ?
Je n'ai rien trouvé à ce sujet dans la documentation.

Merci à vous.
Cordialement,
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par falsam »

Avec les commande MCI (Windows) c'est possible. Un code de GPI sur le forum Germanique. Je n'ai pas retrouvé le lien.

Code : Tout sélectionner

; Author: GPI
; Date: 09. November 2003

;Info: MCI-MP3-Commands
Enumeration 0
  #MP3_Unknown
  #MP3_Stopped
  #MP3_Playing
  #MP3_Paused
EndEnumeration
Procedure MP3_GetStatus(Nb)
  Result=#MP3_Unknown
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MP3_"+Str(Nb)+" mode",@a$,#MAX_PATH,0)
  If i=0
    Debug a$
    Select a$
      Case "stopped":Result=#MP3_Stopped
      Case "playing":Result=#MP3_Playing
      Case "paused":Result=#MP3_Paused
    EndSelect
  EndIf
  ProcedureReturn Result
EndProcedure
Procedure MP3_Load(Nb,file.s)
  ;i=mciSendString_("open Sequencer!"+Chr(34)+file+Chr(34)+" alias mid"+Str(Nb),0,0,0)
  i=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type MPEGVIDEO ALIAS MP3_"+Str(Nb),0,0,0)
  If i=0
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Procedure MP3_Play(Nb)
  i=mciSendString_("play MP3_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_PlayStart(Nb)
  i=mciSendString_("play MP3_"+Str(Nb)+" from "+Str(0),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_PlayPart(Nb,Start,endPos)
  i=mciSendString_("play MP3_"+Str(Nb)+" from "+Str(Start)+" to "+Str(endPos),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_Pause(Nb)
  i=mciSendString_("pause MP3_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_Resume(Nb)
  i=mciSendString_("resume MP3_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_Stop(Nb)
  i=mciSendString_("stop MP3_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure mp3_Free(Nb)
  i=mciSendString_("close MP3_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_SetVolume(Nb,volume)
  i=mciSendString_("SetAudio MP3_"+Str(Nb)+" volume to "+Str(volume),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_GetVolume(Nb)
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MP3_"+Str(Nb)+" volume",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure


Procedure MP3_SetSpeed(Nb,Tempo)
  i=mciSendString_("set MP3_"+Str(Nb)+" Speed "+Str(Tempo),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MP3_GetSpeed(Nb)
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MP3_"+Str(Nb)+" Speed",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure MP3_GetLength(Nb)
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MP3_"+Str(Nb)+" length",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure MP3_GetPosition(Nb)
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MP3_"+Str(Nb)+" position",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure MP3_Seek(Nb,pos)
  i=mciSendString_("Seek MP3_"+Str(Nb)+" to "+Str(pos),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure.s MP3_TimeString(time)
  time/1000
  sek=time%60:time/60
  min=time%60:time/60
  ProcedureReturn RSet(Str(time),2,"0")+":"+RSet(Str(min),2,"0")+":"+RSet(Str(sek),2,"0")
EndProcedure
;Example

Enumeration 1
  #gadget_File
  #Gadget_VolumeTxt
  #Gadget_Volume
  #Gadget_SpeedTxt
  #Gadget_Speed
  #Gadget_PositionTxt
  #Gadget_Position
  #Gadget_Load
  #Gadget_Play
  #Gadget_Stop
  #Gadget_Pause
  #Gadget_Resume
EndEnumeration

Procedure SetVol(x)
  SetGadgetText(#Gadget_VolumeTxt,"Volume:"+Str(x))
  SetGadgetState(#Gadget_Volume,x)
EndProcedure
Procedure SetSpeed(x)
  SetGadgetText(#Gadget_SpeedTxt,"Speed:"+Str(x))
  SetGadgetState(#Gadget_Speed,x)
EndProcedure
Procedure SetPosition(x,max)
  SetGadgetText(#Gadget_PositionTxt,"Position:"+MP3_TimeString(x)+" : "+MP3_TimeString(max))
  If max>0
    SetGadgetState(#Gadget_Position,x*1000/max)
  Else
    SetGadgetState(#Gadget_Position,0)
  EndIf
EndProcedure

If OpenWindow(0, 100, 200, 310,310 , "Simple MP3-Player",#PB_Window_SystemMenu |#PB_Window_ScreenCentered)
    top=5
    TextGadget    (#gadget_File       ,5,top,300,20,"File:"):top+25
    TextGadget    (#Gadget_VolumeTxt,  5,top,300,20,"Volume"):top+20
    TrackBarGadget(#Gadget_Volume     ,5,top,300,25,0,100):top+30
    TextGadget    (#Gadget_SpeedTxt   ,5,top,300,20,"Speed"):top+20
    TrackBarGadget(#Gadget_Speed      ,5,top,300,25,0,200):top+30
    TextGadget    (#Gadget_PositionTxt,5,top,300,20,"Position"):top+20
    TrackBarGadget(#Gadget_Position   ,5,top,300,25,0,1000):top+30
    ButtonGadget  (#Gadget_Load       ,5,top,300,20,"Load"):top+25
    ButtonGadget  (#Gadget_Play       ,5,top,300,20,"Play"):top+25
    ButtonGadget  (#Gadget_Pause      ,5,top,300,20,"Pause"):top+25
    ButtonGadget  (#Gadget_Resume     ,5,top,300,20,"Resume"):top+25
    ButtonGadget  (#Gadget_Stop       ,5,top,300,20,"Stop"):top+25
    loaded=#False
    Quit=#False
    
    Repeat
      EventID.l = WindowEvent()
      
      Select EventID
        Case 0
          If loaded And max>0
            x=MP3_GetPosition(1)
            If GetGadgetState(#Gadget_Position)<>x*1000/max
              SetPosition(x,max)
            EndIf
          EndIf
          Delay(100)
        Case #PB_Event_CloseWindow ; If the user has pressed on the close button
          Quit=#True
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #Gadget_Load
              File$=OpenFileRequester("","","*.mp3|*.mp3|*.avi)|*.avi|All files (*.*)|*.*",0)
              If File$<>""
                If loaded
                  mp3_Free(1)
                  loaded=#False
                EndIf
                If MP3_Load(1,File$)
                  max=MP3_GetLength(1)
                  SetVol(MP3_GetVolume(1)/10)
                  SetSpeed(MP3_GetSpeed(1)/10)
                  SetPosition(0,max)
                  loaded=#True
                  SetGadgetText(#gadget_File,"File:"+File$)
                Else
                  SetGadgetText(#gadget_File,"File")
                EndIf
              EndIf
            Case #Gadget_Resume
              If loaded
                MP3_Resume(1)
              EndIf
            Case #Gadget_Pause
              If loaded
                MP3_Pause(1)
              EndIf
            Case #Gadget_Play
              If loaded
                MP3_Play(1)
              EndIf
            Case #Gadget_Stop
              If loaded
                MP3_Stop(1)
              EndIf
            Case #Gadget_Position
              If loaded And max>0
                x=GetGadgetState(#Gadget_Position)*max/1000
                SetPosition(x,max)
                MP3_Seek(1,x)
                MP3_Resume(1)
              EndIf
            Case #Gadget_Volume
              If loaded
                x=GetGadgetState(#Gadget_Volume)
                SetVol(x)
                MP3_SetVolume(1,x*10)
              EndIf
            Case #Gadget_Speed
              If loaded
                x=GetGadgetState(#Gadget_Speed)
                SetSpeed(x)
                MP3_SetSpeed(1,x*10)
              EndIf
          EndSelect
      EndSelect
      
    Until Quit
    If loaded
      MP3_Stop(1)
      mp3_Free(1)
    EndIf
EndIf

End
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
jak64
Messages : 89
Inscription : dim. 03/mai/2020 23:16

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par jak64 »

Bonjour,
Merci pour le code, je viens d'essayer, ça fonctionne super bien comme je le souhaitais.
Merci à vous pour ce partage.
Jacques
Avatar de l’utilisateur
jak64
Messages : 89
Inscription : dim. 03/mai/2020 23:16

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par jak64 »

Bonjour,
En fait, j'ai écrit trop vite, c'est la vitesse d'une VIDEO que je souhaite régler, pas la vitesse d'un fichier audio.
Merci tout de même
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par falsam »

@Jak : Bonjour. Désolé j'ai été un peu vite dans le test de ce code. Effectivement seul le son est impacté par le changement de vitesse. Je regarde si j'ai autre chose dans mes sauvegardes .....
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par Zorro »

falsam a écrit :Avec les commande MCI (Windows) c'est possible. Un code de GPI sur le forum Germanique. Je n'ai pas retrouvé le lien. ; Author: GPI
ça me desole que certains utilisent des codes qu'ils trouves (et je ne parle pas pour toi Falsam)

et qu'il s'empressent de virer le Tag de signature de l'auteur, pour mettre le leur ou l'effacer .... :roll:

j'ai la version original de ce code et voici l'entete qu'il avait

Code : Tout sélectionner

* Info: MCI-Commands (To play mp3s, And so on) _
;* Original from jaPBe IncludesPack _
;* change for PB4 by ts-soft _
j'ai mem quelques fois vu passer certains de mes codes, qui avaient été re-signés .....
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par Ollivier »

Avatar de l’utilisateur
jak64
Messages : 89
Inscription : dim. 03/mai/2020 23:16

Re: Peut-on régler la vitesse de lecture d'une vidéo ?

Message par jak64 »

Bonjour,
J'ai trouvé un lien sur le forum anglais avec les 2 programmes qui permettent de régler la vitesse d'une vidéo...
Pour celles et ceux que cela pourrait intéresser...
Je cherchais cela car mon idée est de faire un montage (bricolage avec une souris sans fil) ou électronique avec transmission USB.
Ce montage enverrait un signal (ou un clic de souris) à chaque tour de pédale sur mon vélo d'appartement. J'écrirais un programme qui récupérerait cette information et qui modifierait la vitesse de la vidéo en fonction de la vitesse de pédalage.
Il me suffirait ensuite de filmer un parcours avec un camera go sport et je verrais le parcours défiler sur ma télé (avec une hdmi ou autre) plus ou moins vite en fonction du pédalage...

https://www.purebasic.fr/english/viewto ... 12&t=75564
Répondre