Differenze tra le versioni di "Salvare in un file video con il Componente gb.media quanto mostrato sullo schermo"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Usando le Classi "MediaPipeline" e "MediaControl" del Componente "gb.media" unitamente ad alcuni ''plugin'' di GStreamer, è possibile salvare in un file video quanto mostrato...")
 
Riga 9: Riga 9:
 
   Dim tm As Date
 
   Dim tm As Date
 
   Dim dur, eff, i As Integer
 
   Dim dur, eff, i As Integer
   Dim primofile As String
+
   Dim temporaneo As String
 
   
 
   
   primofile = "/tmp/primofile"
+
   temporaneo = Temp
 
   
 
   
 
  <FONT Color=gray>' ''Imposta il numero di fotogrammi di cui sarà composto il video, tenendo presente che la durata del video in secondi sarà approssimativamente uguale a 1/4 del valore immesso:''</font>
 
  <FONT Color=gray>' ''Imposta il numero di fotogrammi di cui sarà composto il video, tenendo presente che la durata del video in secondi sarà approssimativamente uguale a 1/4 del valore immesso:''</font>
Riga 25: Riga 25:
 
   mux = New MediaControl(pl, "matroskamux")
 
   mux = New MediaControl(pl, "matroskamux")
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
   snk["location"] = primofile
+
   snk["location"] = temporaneo
 
   snk["sync"] = False
 
   snk["sync"] = False
 
    
 
    
Riga 48: Riga 48:
 
   pl.Stop()
 
   pl.Stop()
 
   pl.Close()
 
   pl.Close()
   Copy primofile To "/tmp/file.mkv"
+
   Copy temporaneo To "/tmp/file.mkv"
 
   Print "\nRegistrazione terminata !"
 
   Print "\nRegistrazione terminata !"
 
   
 
   
Riga 61: Riga 61:
 
   Dim tm As Date
 
   Dim tm As Date
 
   Dim dur, eff, i As Integer
 
   Dim dur, eff, i As Integer
   Dim primofile As String
+
   Dim temporaneo As String
 
   
 
   
   primofile = "/tmp/primofile"
+
   temporaneo = Temp
 
   
 
   
 
  <FONT Color=gray>' ''Imposta il numero di fotogrammi di cui sarà composto il video, tenendo presente che la durata del video in secondi sarà approssimativamente uguale a 1/4 del valore immesso:''</font>
 
  <FONT Color=gray>' ''Imposta il numero di fotogrammi di cui sarà composto il video, tenendo presente che la durata del video in secondi sarà approssimativamente uguale a 1/4 del valore immesso:''</font>
Riga 77: Riga 77:
 
   mux = New MediaControl(pl, "mp4mux")
 
   mux = New MediaControl(pl, "mp4mux")
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
   snk["location"] = primofile
+
   snk["location"] = temporaneo
 
   snk["sync"] = False
 
   snk["sync"] = False
 
   
 
   
Riga 100: Riga 100:
 
   pl.Stop()
 
   pl.Stop()
 
   pl.Close()
 
   pl.Close()
   Copy primofile To "/tmp/file.mp4"
+
   Copy temporaneo To "/tmp/file.mp4"
 
   Print "\nRegistrazione terminata !"
 
   Print "\nRegistrazione terminata !"
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 02:08, 15 mag 2023

Usando le Classi "MediaPipeline" e "MediaControl" del Componente "gb.media" unitamente ad alcuni plugin di GStreamer, è possibile salvare in un file video quanto mostrato sullo schermo.

Salvare in un file video del formato "Matroska"

Mostriamo un esempio per salvare in un file video - senza audio - del formato "Matroska" quanto mostrato sullo schermo.

Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, cnv, enc, mux, snk As MediaControl
 Dim tm As Date
 Dim dur, eff, i As Integer
 Dim temporaneo As String

 temporaneo = Temp

' Imposta il numero di fotogrammi di cui sarà composto il video, tenendo presente che la durata del video in secondi sarà approssimativamente uguale a 1/4 del valore immesso:
 dur = 60
 eff = (dur * 1000) / 2

 pl = New MediaPipeline 

 src = New MediaControl(pl, "ximagesrc")
 src["num-buffers"] = dur
 cnv = New MediaControl(pl, "videoconvert")
 enc = New MediaControl(pl, "x264enc")
 mux = New MediaControl(pl, "matroskamux")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = temporaneo
 snk["sync"] = False
  
' Collega fra loro i plugin di "GStreamer":
 src.LinkTo(cnv)
 cnv.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk) 
 
' Avvia la registrazione video:
 pl.Play()

 tm = Now

 Repeat
   i = DateDiff(tm, Now, gb.Millisecond)
' Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:
   Write "\rTempo: " & Time(0, 0, 0, i)
   Wait 0.01
 Until i >= eff

 pl.Stop()
 pl.Close()
 Copy temporaneo To "/tmp/file.mkv"
 Print "\nRegistrazione terminata !"

End

Salvare in un file video del formato "MP4"

Mostriamo un esempio per salvare in un file video - senza audio - del formato "MP4" quanto mostrato sullo schermo.

Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, cnv, enc, mux, snk As MediaControl
 Dim tm As Date
 Dim dur, eff, i As Integer
 Dim temporaneo As String

 temporaneo = Temp

' Imposta il numero di fotogrammi di cui sarà composto il video, tenendo presente che la durata del video in secondi sarà approssimativamente uguale a 1/4 del valore immesso:
 dur = 60
 eff = (dur * 1000) / 2

 pl = New MediaPipeline 

 src = New MediaControl(pl, "ximagesrc")
 src["num-buffers"] = dur
 cnv = New MediaControl(pl, "videoconvert")
 enc = New MediaControl(pl, "x264enc")
 mux = New MediaControl(pl, "mp4mux")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = temporaneo
 snk["sync"] = False

' Collega fra loro i plugin di "GStreamer":
 src.LinkTo(cnv)
 cnv.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk) 

' Avvia la registrazione video:
 pl.Play()

 tm = Now

 Repeat
   i = DateDiff(tm, Now, gb.Millisecond)
' Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:
   Write "\rTempo: " & Time(0, 0, 0, i)
   Wait 0.01
 Until i >= eff

 pl.Stop()
 pl.Close()
 Copy temporaneo To "/tmp/file.mp4"
 Print "\nRegistrazione terminata !"

End