Page 2 sur 2

Re: Vidéo via images!!!!

Publié : dim. 21/nov./2010 13:08
par G-Rom
y a plus simple quand même ( et portable au passage ;) ) avec ffmpeg.

Linux :

Code : Tout sélectionner

InitSprite() : InitKeyboard()

FFMPEG_PROGRAM$ = "ffmpeg"

CreateDirectory("./Cache")
DeleteFile("./Cache/video_output.mpg")

wnd = OpenWindow(#PB_Any,0,0,640,480,"Please wait...")
OpenWindowedScreen(WindowID(wnd),0,0,640,480,1,0,0)
UsePNGImageEncoder()


Repeat
  WindowEvent()
  
  ClearScreen(0)
  
    x   = 320 + 100 * Cos(ElapsedMilliseconds()/1000)
    y   = 240 + 50  * Sin(ElapsedMilliseconds()/500)
    col = 128 + 127 * Cos(ElapsedMilliseconds()/10)
  
    StartDrawing(ScreenOutput())
    Circle(x-10,y-10,10,RGB(col/4,col/2,col))
    
    DrawText(10,10,"Created with purebasic !")
    
    StopDrawing()
      
FlipBuffers()

Sprite = GrabSprite(#PB_Any,0,0,640,480)
SaveSprite(Sprite,"./Cache/Image_"+Str(Frame)+".png",#PB_ImagePlugin_PNG)
Frame + 1  
Until Frame = 400


program = RunProgram(FFMPEG_PROGRAM$,"-f image2 -i Image_%d.png video_output.mpg","./Cache",#PB_Program_Wait)

For i = 0 To 399
  DeleteFile("./Cache/Image_"+Str(i)+".png")
Next 

CopyFile("./Cache/video_output.mpg","./video_output.mpg")
DeleteFile("./Cache/video_output.mpg")

Pour ceux qui sont sous windows , modifier la ligne 3 ( il faut ffmpeg )

Re: Vidéo via images!!!!

Publié : dim. 21/nov./2010 17:02
par Backup
G-Rom a écrit :y a plus simple quand même ( et portable au passage ;) ) avec ffmpeg.
certes , nous avions fait un sujet la dessus, il y a pas mal de temps
http://www.purebasic.fr/french/viewtopi ... +converter

c'est tres bien, mais oblige a avoir une Dll externe
et qu'en est t'il des droits d'utilisation en usage commercial ? :wink:

Re: Vidéo via images!!!!

Publié : dim. 21/nov./2010 17:27
par G-Rom
qu'en est t'il des droits d'utilisation en usage commercial ?
http://fr.wikipedia.org/wiki/Licence_pu ... C3%A9e_GNU
c'est tres bien, mais oblige a avoir une Dll externe
ffmpeg.exe sous windows ca existe a mon avis ?
ca te permet d'avoir un code relativement leger , et surtout tu as plus d'options d'encodage ( suffit de lire la doc de ffmpeg )
et en plus portable , pas besoin d'apprendre une api particulière.

Re: Vidéo via images!!!!

Publié : dim. 21/nov./2010 18:27
par Backup
G-Rom a écrit : ffmpeg.exe sous windows ca existe a mon avis ?
ca te permet d'avoir un code relativement leger , et surtout tu as plus d'options d'encodage ( suffit de lire la doc de ffmpeg )
et en plus portable , pas besoin d'apprendre une api particulière.
Dobro a écrit : certes , nous avions fait un sujet la dessus, il y a pas mal de temps
http://www.purebasic.fr/french/viewtopi ... +converter
j'ajoute que j'ai programmé "PureConverter" basé sur cette Dll ;)
Image

je connais tres bien :)

mais il me semblait qu'il y avait des restrictions d'utilisations ...(licence)
je vais allez lire le lien que tu donne....

quoiqu'il en soit la routine de Nico (que j'ai posté)
ne représente rien de plus qu'une procédure , bien sur l'appel au API gene l'utilisateur Linux
mais répond tres tres bien a la question posé dans ce topic :)

Re: Vidéo via images!!!!

Publié : dim. 21/nov./2010 18:36
par Fortix
nico a écrit :Je savais bien que j'avais posté un code (en 2005,ça date :wink: ) : vidéo+audio
http://www.purebasic.fr/french/viewtopic.php?f=6&t=2936

j'y suis depuis 2004, suis-je un ancien @Nico?
je plaisante :lol:

Effectivement, le code de @Nico semble être "une mecanique bien huilée"
je bricole là-dessus actuellement car avant la phase de "création vidéo" je dois faire passé
chaques images par un filtre de "Redimentionnement" et là sa coince :lol:

Code : Tout sélectionner

Procedure Add_bmp_avi(bmp.s)
    If ReadFile(0, bmp)
        FileSeek(0,SizeOf(BITMAPFILEHEADER)) 
        ReadData(0,@bmi, SizeOf(bitmap24))
      
        If  bmi\bmiHeader\biWidth
            If  bmi\bmiHeader\biHeight
                If  bmi\bmiHeader\biBitCount=24
                    If  bmi\bmiHeader\biSizeImage=0
                        bmi\bmiHeader\biSizeImage=Lof(0)-54
                    EndIf

                    FileSeek(0,54)
                    AddElement(memoire())
                    memoire() =GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, bmi\bmiHeader\biSizeImage)
                    ReadData(0,memoire(), bmi\bmiHeader\biSizeImage)
                EndIf
            EndIf
        EndIf
      
        CloseFile(0)
    EndIf
EndProcedure
la parti "ReadFile","Fileseek","ReadData" me posent problème étant donné que je dois me servir des "ImageId()"

Code : Tout sélectionner

...........
If ReadFile(0, bmp)
        FileSeek(0,SizeOf(BITMAPFILEHEADER)) 
        ReadData(0,@bmi, SizeOf(bitmap24))
................
j'y travails en ce moment :D

Re: Vidéo via images!!!!

Publié : dim. 21/nov./2010 23:25
par Backup
Fortix a écrit : la parti "ReadFile","Fileseek","ReadData" me posent problème étant donné que je dois me servir des "ImageId()"
les id se trouvent dans memoire() ... donc tu redimenssione avant la partie qui ecrit !! ;)

et puis qu'est ce qui t'empeche de redimentionner tes images avant l'encodage video ? 8O

Re: Vidéo via images!!!!

Publié : lun. 22/nov./2010 12:25
par Fortix
En fait il n'y a pas que le redimentionnement, mais aussi un filtre qui modifit les couleurs (grossomodo) de chaques images

en réalité, mon projet a pour but final:

1)Chargement d'une vidéo
2)découpage image par image (étape manquante!)
3)modifications image par image par filtre (en cours...)
4)reconstitution de la vidéo ainsi modifié (en cours...)

projet ambitieux non? :lol: