Differenze tra le versioni di "Salvare in un file video con il Componente gb.media quanto mostrato sullo schermo"
Da Gambas-it.org - Wikipedia.
(4 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Usando le Classi | + | 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"== | ==Salvare in un file video del formato "Matroska"== | ||
Mostriamo un esempio per salvare in un file video - <SPAN Style="text-decoration:underline">senza audio</span> - del formato "Matroska" quanto mostrato sullo schermo. | Mostriamo un esempio per salvare in un file video - <SPAN Style="text-decoration:underline">senza audio</span> - del formato "Matroska" quanto mostrato sullo schermo. | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 51: | Riga 51: | ||
Print "\nRegistrazione terminata !" | Print "\nRegistrazione terminata !" | ||
− | '''End''' | + | 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 | ||
==Salvare in un file video del formato "MP4"== | ==Salvare in un file video del formato "MP4"== | ||
Mostriamo un esempio per salvare in un file video - <SPAN Style="text-decoration:underline">senza audio</span> - del formato "MP4" quanto mostrato sullo schermo. | Mostriamo un esempio per salvare in un file video - <SPAN Style="text-decoration:underline">senza audio</span> - del formato "MP4" quanto mostrato sullo schermo. | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 103: | Riga 170: | ||
Print "\nRegistrazione terminata !" | Print "\nRegistrazione terminata !" | ||
− | + | End |
Versione attuale delle 15:12, 20 giu 2024
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