Créer des vidéos

Programmation d'applications complexes
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Créer des vidéos

Message par Golfy »

j'ai trouvé de nombreuses fonctions pour lire des vidéos mais je voudrais enregistrer le résultat de plusieurs images dans un film AVI...
Existe-t'il un programme, une librairie, des fonctions me permettant d'enregistrer des images générées sous PB (texte défilant, etc.) dans un fichier vidéo ?

j'espère que oui :oops:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

regarde sur codearchiv, il me semble avoir vu dès code montrant comment faire un avi avec des images
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Non je ne crois pas, il y a AVI to BMP mais pas l'inverse mais une personne avait commencé un code non fonctionnel (en fait c'est une reprise d'un code existant en VB) . J'avais travaillé dessus mais sans résultat. Une personne comme le Soldat aurait plus de facilité à corriger les erreurs car personnellement je n'ai pas encore digéré le format BMP et c'est très utile dans le code.
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Message par Golfy »

*damned* je suis trop mauvais pour y arriver... je vais essayer de comprendre le fonctionnement de directshow et compagnie mais ça ne va pas aboutir tout de suite :oops:

en plus, je suis en train de rédiger mon mémoire CNAM de 100 pages (nombre de pages actuel : 1. Date de fin : 31 juin 2005) 8O
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Message par Golfy »

*Gotcha* j'ai trouvé un code fait par un allemand :

Code : Tout sélectionner

Structure AVI_INFO
  aviWidth.l
  aviHeight.l
  aviFirstFrame.l
  aviNumFrames.l
  aviFPS.b
  hwnd.l
EndStructure

Enumeration
  #Lib
EndEnumeration

UseJPEGImageDecoder()

Procedure AVI2BMP ()
  file.s = OpenFileRequester( "Open AVI", "D:\Database\Sources\ST_Soft\AVI\", "AVI Video|*.avi", 0 )
  *INF.AVI_INFO = CallFunction( #Lib, "OpenAVIforRead", file.s )
  If *INF
    MessageRequester( "AVI Stream Info", "Size: " + Str(*INF\aviWidth) + "x" + Str(*INF\aviHeight) + Chr(13) + "Frames: " + Str(*INF\aviNumFrames), 0 )
    hBmp = CreateImage ( 0, *INF\aviWidth, *INF\aviHeight )
    
    For a = *INF\aviFirstFrame To *INF\aviNumFrames - *INF\aviFirstFrame - 1
      If CallFunction( #Lib, "GetFrameFromAVI", hBmp, a )
        SaveImage(0, "Sequence_" + Right("000" + Str(a), 4 ) + ".bmp" )
      Else
        MessageRequester( "FrameGet error", "DIB class can only handle unpalletized memory DIBs - RGB 16 or 24bit color",  #MB_ICONEXCLAMATION | #MB_OK )
        a = *INF\aviNumFrames + 1
      EndIf
    Next
    CallFunction( #Lib, "CloseAVIStreams" )
    MessageRequester( "Done", "AVI splitted to bitmaps", 0 )
  Else
    MessageRequester( "Error", "Could not open avi", 0)
  EndIf
EndProcedure
Procedure BMP2AVI ()
  INF.AVI_INFO
  INF\hwnd = OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Images 2 AVI" )
  If INF\hwnd And CreateGadgetList( INF\hwnd )
    ListViewGadget( 0, 0, 0, 300, 200 )
  
    file.s = SaveFileRequester( "Save AVI", "", "AVI Video|*.avi", 0 )
    dir.s = PathRequester( "Select images directory", GetPathPart( file.s ))
    
    If ExamineDirectory( 0, dir.s, "*.*" )
      Repeat 
        Res = NextDirectoryEntry()
        If Res = 1
          img.s = DirectoryEntryName()
          ext.s = UCase(GetExtensionPart(img.s))
          
          If ext = "BMP" Or ext = "JPG" Or ext = "JPEG"
            
            hBmp = LoadImage(0, dir + img )
            If hBmp
              If INF\aviWidth <= 0
                INF\aviWidth  = ImageWidth()
                INF\aviHeight = ImageHeight()
                INF\aviFPS    = 1 ; Play 1 Frame per Second
                SetForegroundWindow_( INF\hwnd )
                If CallFunction( #Lib, "OpenAVIforWrite", file.s, @INF ) = #False : Res = 0 : EndIf
              EndIf
              
              If INF\aviWidth + INF\aviHeight <> ImageWidth() + ImageHeight()
                hBmp = ResizeImage( 0, INF\aviWidth, INF\aviHeight )
              EndIf
              
              If INF\aviWidth            
                StartDrawing( ImageOutput() )
                  ; Make some image effects ...
                  DrawingMode( 1|2 ) 
                  Locate (1, 1) : DrawText( "PureBasic RuLeS! :-)" )
                  Locate (INF\aviWidth - TextLength( img ) - 10, INF\aviHeight - 20 ) : DrawText( img )
                StopDrawing()
                If CallFunction( #Lib, "AddFrameToAVI", hBmp, -1 ) = #True ; -1 Autoincrement FrameNr
                  Frames + 1
                EndIf
              EndIf
            Else
              img + " failed"
            EndIf
            AddGadgetItem( 0, -1, img )
          EndIf
        EndIf
      Until Res = 0
      AddGadgetItem(0, -1, "Done. " + Str(Frames) + " Images." )
      CallFunction( #Lib, "CloseAVIStreams" )
      Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
    EndIf
  EndIf
EndProcedure

  If OpenLibrary( #Lib, "AVIServ.dll" )
    If CallFunction( #Lib, "AVI_Init" )
      
      ; AVI2BMP() ; Splitt AVI video into singel frames
      BMP2AVI() ; Create AVI and add *jpg, *bmp images

      CallFunction( #Lib, "AVI_Quit" )
    EndIf
    CloseLibrary( #Lib )
  Else
    MessageRequester( "Error", "Could not open AVIServ.dll", 0)
  EndIf
  
End   
et il faut charger une DLL de sa conception : AVIserv.dll
http://www.sunset-team.de/Download/AVIServ.zip

en revanche, je n'ai aucune idée de l'utilisation de sa DLL (gratuite ou non). Je l'ai contacté et attend sa réponse. Après test, c'est concluant ! :roll:
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Message par Golfy »

Voici la réponse :)

Code : Tout sélectionner

Dear Golfy,

AVIserv is freeware for every kind of use. But please remind,
this is only a experimental beta release.

Have fun,

dige

And translated with Google  ;-) 

Cher Golfy, AVIserv est freeware pour chaque genre d'utilisation.
Mais rappelez svp, ceci est seulement un bêta dégagement expérimental.

Ayez l'amusement,

dige
Répondre