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...")
 
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
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 !"
 +
 +
'''End'''
 +
 +
==Salvare in un file video del formato "Ogg-Theora"==
 +
Mostriamo un esempio per salvare in un file video - <SPAN Style="text-decoration:underline">senza audio</span> - del formato "Ogg-Theora" quanto mostrato sullo schermo.
 +
Private bo As Boolean
 +
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim pl As MediaPipeline
 +
  Dim src, cnv, enc, mux, snk As MediaControl
 +
  Dim flt As MediaFilter
 +
  Dim tm As Date
 +
  Dim i As Integer
 +
  Dim temporaneo As String
 +
 +
  If Exist("/tmp/video.ogg") Then Kill "/tmp/video.ogg"
 +
 +
  temporaneo = Temp
 +
 +
  pl = New MediaPipeline
 +
 +
  src = New MediaControl(pl, "ximagesrc")
 +
<FONT Color=gray>' ''Assegna alla proprietà "xid" il numero identificativo della finestra da registrare (0 è lo schermo):''</font>
 +
  src["xid"] = 0
 +
  cnv = New MediaControl(pl, "videoconvert")
 +
  flt = New MediaFilter(pl, "video/x-raw,framerate=5/1")
 +
  enc = New MediaControl(pl, "theoraenc")
 +
  mux = New MediaControl(pl, "oggmux")
 +
  snk = New MediaControl(pl, "filesink")
 +
  snk["location"] = temporaneo
 +
  snk["sync"] = False
 +
 
 +
<FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
 +
  src.LinkTo(cnv)
 +
  cnv.LinkTo(flt)
 +
  flt.LinkTo(enc)
 +
  enc.LinkTo(mux)
 +
  mux.LinkTo(snk)
 +
 
 +
<FONT Color=gray>' ''Avvia la registrazione video:''</font>
 +
  pl.Play()
 +
 +
  tm = Now
 +
 +
  Repeat
 +
    i = DateDiff(tm, Now, gb.Millisecond)
 +
<FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font>
 +
    Write "\rTempo: " & Str(Time(0, 0, 0, i))
 +
    Wait 0.01
 +
  Until bo
 +
 +
  pl.Stop()
 +
  pl.Close()
 +
  Copy temporaneo To "/tmp/video.ogg"
 +
  Print "\nRegistrazione terminata !"
 +
 +
<FONT Color=gray>' ''Avendo usato l'Evento "Application_Read()", per terminare l'applicazione, è necessario usare il comando "Quit" :''</font>
 +
  Quit
 +
 +
'''End'''
 +
 +
'''Public''' Sub Application_Read()  <FONT Color=gray>' ''Cliccando sui tasti "Invio" dela tastiera, viene sollevato questo Evento''</font>
 +
 +
  bo = True
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 61: Riga 127:
 
   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 143:
 
   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 166:
 
   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 attuale delle 16:40, 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 "Ogg-Theora"

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

Private bo As Boolean


Public Sub Main()

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

 If Exist("/tmp/video.ogg") Then Kill "/tmp/video.ogg"

 temporaneo = Temp

 pl = New MediaPipeline 

 src = New MediaControl(pl, "ximagesrc")
' Assegna alla proprietà "xid" il numero identificativo della finestra da registrare (0 è lo schermo):
 src["xid"] = 0
 cnv = New MediaControl(pl, "videoconvert")
 flt = New MediaFilter(pl, "video/x-raw,framerate=5/1")
 enc = New MediaControl(pl, "theoraenc")
 mux = New MediaControl(pl, "oggmux")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = temporaneo
 snk["sync"] = False
  
' Collega fra loro i plugin di "GStreamer":
 src.LinkTo(cnv)
 cnv.LinkTo(flt)
 flt.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: " & Str(Time(0, 0, 0, i))
   Wait 0.01
 Until bo

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

' Avendo usato l'Evento "Application_Read()", per terminare l'applicazione, è necessario usare il comando "Quit" :
 Quit

End

Public Sub Application_Read()  ' Cliccando sui tasti "Invio" dela tastiera, viene sollevato questo Evento

 bo = True

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