Vidéo via images!!!!

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Vidéo via images!!!!

Message 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 )
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Vidéo via images!!!!

Message 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:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Vidéo via images!!!!

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Vidéo via images!!!!

Message 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 :)
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Re: Vidéo via images!!!!

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Vidéo via images!!!!

Message 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
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Re: Vidéo via images!!!!

Message 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:
Répondre