Differenze tra le versioni di "Salvare in un file video con il Componente gb.media una ripresa video effettuata da una WebCam"
Riga 5: | Riga 5: | ||
==Salvare in un file video di formato "AVI"== | ==Salvare in un file video di formato "AVI"== | ||
− | Private | + | Private pl As MediaPipeline |
Public Sub Main() | Public Sub Main() | ||
− | + | ||
− | |||
Dim src, cnv, mux, snk As MediaControl | Dim src, cnv, mux, snk As MediaControl | ||
Dim tm As Date | Dim tm As Date | ||
Riga 16: | Riga 15: | ||
pl = New MediaPipeline | pl = New MediaPipeline | ||
− | + | ||
src = New MediaControl(pl, "v4l2src") | src = New MediaControl(pl, "v4l2src") | ||
src["device"] = "/dev/video0" | src["device"] = "/dev/video0" | ||
Riga 23: | Riga 22: | ||
snk = New MediaControl(pl, "filesink") | snk = New MediaControl(pl, "filesink") | ||
snk["location"] = "/tmp/video.avi" | snk["location"] = "/tmp/video.avi" | ||
− | + | ||
<FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font> | <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font> | ||
src.LinkTo(cnv) | src.LinkTo(cnv) | ||
cnv.LinkTo(mux) | cnv.LinkTo(mux) | ||
mux.LinkTo(snk) | mux.LinkTo(snk) | ||
− | + | ||
<FONT Color=gray>' ''Avvia la ripresa video:''</font> | <FONT Color=gray>' ''Avvia la ripresa video:''</font> | ||
pl.Play() | pl.Play() | ||
− | + | ||
+ | <FONT Color=gray>' ''Attende che l'Oggetto "MediaPipeline" avvii effettivamente la ripresa video:''</font> | ||
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Until pl.Position > 0.0 | ||
+ | |||
tm = Now | tm = Now | ||
− | + | ||
− | While | + | While pl.State = Media.Playing |
i = DateDiff(tm, Now, gb.Millisecond) | i = DateDiff(tm, Now, gb.Millisecond) | ||
<FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | <FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | ||
Riga 41: | Riga 45: | ||
Wait 0.01 | Wait 0.01 | ||
Wend | Wend | ||
− | + | ||
− | |||
pl.Close() | pl.Close() | ||
Print "\nRegistrazione terminata !" | Print "\nRegistrazione terminata !" | ||
Riga 53: | Riga 56: | ||
Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | ||
− | + | pl.Stop | |
End | End | ||
Riga 59: | Riga 62: | ||
==Salvare in un file video di formato "FLV"== | ==Salvare in un file video di formato "FLV"== | ||
− | Private | + | Private pl As MediaPipeline |
Public Sub Main() | Public Sub Main() | ||
− | |||
Dim src, cnv, enc, mux, snk As MediaControl | Dim src, cnv, enc, mux, snk As MediaControl | ||
Dim tm As Date | Dim tm As Date | ||
Riga 90: | Riga 92: | ||
<FONT Color=gray>' ''Avvia la ripresa video:''</font> | <FONT Color=gray>' ''Avvia la ripresa video:''</font> | ||
pl.Play() | pl.Play() | ||
− | + | ||
+ | <FONT Color=gray>' ''Attende che la "Pipeline" avvii effetttivamente la ripresa video:''</font> | ||
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Until pl.Position > 0.0 | ||
+ | |||
tm = Now | tm = Now | ||
− | + | ||
− | While | + | While pl.State = Media.Playing |
i = DateDiff(tm, Now, gb.Millisecond) | i = DateDiff(tm, Now, gb.Millisecond) | ||
<FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | <FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | ||
Riga 100: | Riga 107: | ||
Wait 0.01 | Wait 0.01 | ||
Wend | Wend | ||
− | + | ||
− | |||
pl.Close() | pl.Close() | ||
Print "\nRegistrazione terminata !" | Print "\nRegistrazione terminata !" | ||
Riga 112: | Riga 118: | ||
Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | ||
− | + | pl.Stop | |
End | End | ||
Riga 118: | Riga 124: | ||
==Salvare in un file video di formato "MKV" (Matroska)== | ==Salvare in un file video di formato "MKV" (Matroska)== | ||
− | Private | + | Private pl As MediaPipeline |
Public Sub Main() | Public Sub Main() | ||
− | + | ||
− | |||
Dim src, cnv, enc, mux, snk As MediaControl | Dim src, cnv, enc, mux, snk As MediaControl | ||
Dim ftr As MediaFilter | Dim ftr As MediaFilter | ||
Riga 150: | Riga 155: | ||
pl.Play() | pl.Play() | ||
− | tm = Now | + | <FONT Color=gray>' ''Attende che la "Pipeline" avvii effetttivamente la ripresa video:''</font> |
− | + | Repeat | |
− | While | + | Wait 0.01 |
+ | Until pl.Position > 0.0 | ||
+ | |||
+ | tm = Now | ||
+ | |||
+ | While pl.State = Media.Playing | ||
i = DateDiff(tm, Now, gb.Millisecond) | i = DateDiff(tm, Now, gb.Millisecond) | ||
<FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | <FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | ||
Riga 160: | Riga 170: | ||
Wend | Wend | ||
− | |||
pl.Close() | pl.Close() | ||
Print "\nRegistrazione terminata !" | Print "\nRegistrazione terminata !" | ||
Riga 171: | Riga 180: | ||
Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | ||
− | + | pl.Stop | |
End | End | ||
Riga 177: | Riga 186: | ||
==Salvare in un file video di formato "MP4"== | ==Salvare in un file video di formato "MP4"== | ||
− | Private | + | Private pl As MediaPipeline |
Public Sub Main() | Public Sub Main() | ||
− | + | ||
− | |||
Dim src, cnv, enc, mux, snk As MediaControl | Dim src, cnv, enc, mux, snk As MediaControl | ||
Dim tm As Date | Dim tm As Date | ||
Riga 188: | Riga 196: | ||
pl = New MediaPipeline | pl = New MediaPipeline | ||
− | + | ||
src = New MediaControl(pl, "v4l2src") | src = New MediaControl(pl, "v4l2src") | ||
src["device"] = "/dev/video0" | src["device"] = "/dev/video0" | ||
Riga 209: | Riga 217: | ||
pl.Play() | pl.Play() | ||
+ | <FONT Color=gray>' ''Attende che la "Pipeline" avvii effettivamente la ripresa video:''</font> | ||
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Until pl.Position > 0.0 | ||
+ | |||
tm = Now | tm = Now | ||
− | + | ||
− | While | + | While pl.State = Media.Playing |
i = DateDiff(tm, Now, gb.Millisecond) | i = DateDiff(tm, Now, gb.Millisecond) | ||
<FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | <FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | ||
Riga 218: | Riga 231: | ||
Wait 0.01 | Wait 0.01 | ||
Wend | Wend | ||
− | + | ||
− | |||
pl.Close() | pl.Close() | ||
Print "\nRegistrazione terminata !" | Print "\nRegistrazione terminata !" | ||
Riga 230: | Riga 242: | ||
Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma''</font> | ||
− | + | pl.Stop | |
End | End | ||
Riga 236: | Riga 248: | ||
==Salvare in un file video di formato "OGG-Theora"== | ==Salvare in un file video di formato "OGG-Theora"== | ||
− | Private | + | Private pl As MediaPipeline |
Public Sub Main() | Public Sub Main() | ||
− | + | ||
− | |||
Dim src, cnv, the, ogg, snk As MediaControl | Dim src, cnv, the, ogg, snk As MediaControl | ||
pl = New MediaPipeline | pl = New MediaPipeline | ||
− | + | ||
src = New MediaControl(pl, "v4l2src") | src = New MediaControl(pl, "v4l2src") | ||
src["device"] = "/dev/video0" | src["device"] = "/dev/video0" | ||
Riga 263: | Riga 274: | ||
<FONT Color=gray>' ''Avvia la ripresa video:''</font> | <FONT Color=gray>' ''Avvia la ripresa video:''</font> | ||
pl.Play() | pl.Play() | ||
− | + | ||
− | While | + | <FONT Color=gray>' ''Attende che la "Pipeline" avvii effettivamente la ripresa video:''</font> |
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Until pl.Position > 0.0 | ||
+ | |||
+ | While pl.State = Media.Playing | ||
<FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | <FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | ||
Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) | Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) | ||
Riga 271: | Riga 287: | ||
Wend | Wend | ||
− | |||
pl.Close | pl.Close | ||
− | |||
Print "\nTermine registrazione" | Print "\nTermine registrazione" | ||
Riga 283: | Riga 297: | ||
Public Sub Application_Read() <FONT Color=gray>' ''Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento''</font> | Public Sub Application_Read() <FONT Color=gray>' ''Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento''</font> | ||
− | + | ||
− | + | pl.Stop() | |
− | + | ||
End | End | ||
Riga 356: | Riga 370: | ||
Mostriamo un esempio pratico: | Mostriamo un esempio pratico: | ||
− | Private | + | Private pl As MediaPipeline |
Public Sub Main() | Public Sub Main() | ||
− | + | ||
− | |||
Dim srcv, rat, que1, vcon, the, que2, srca, que3, acon, vor, que4, ogg, snk As MediaControl | Dim srcv, rat, que1, vcon, the, que2, srca, que3, acon, vor, que4, ogg, snk As MediaControl | ||
Dim flv, fla As MediaFilter | Dim flv, fla As MediaFilter | ||
Riga 406: | Riga 419: | ||
pl.Play() | pl.Play() | ||
− | While | + | <FONT Color=gray>' ''Attende che la "Pipeline" avvii effettivamente la ripresa video:''</font> |
− | <FONT Color=gray>' '' | + | Repeat |
+ | Wait 0.01 | ||
+ | Until pl.Position > 0.0 | ||
+ | |||
+ | While pl.State = Media.Playing | ||
+ | <FONT Color=gray>' ''Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale:''</font> | ||
Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) | Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) | ||
Flush | Flush | ||
Riga 413: | Riga 431: | ||
Wend | Wend | ||
− | |||
pl.Close() | pl.Close() | ||
Print "\nTermine registrazione" | Print "\nTermine registrazione" | ||
Riga 424: | Riga 441: | ||
Public Sub Application_Read() <FONT Color=gray>' ''Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento''</font> | Public Sub Application_Read() <FONT Color=gray>' ''Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento''</font> | ||
− | + | pl.Stop | |
End | End |
Versione delle 08:25, 18 lug 2024
Il Componente gb.media, utilizzando particolari plugin di GStreamer, consente di salvare una ripresa video mediante una WebCam in un file video.
Indice
Registrazione video priva di audio
Vediamo alcuni casi di registrazione priva di audio con un'applicazione a riga di comando di una ripresa video effettuata con WebCam.
Salvare in un file video di formato "AVI"
Private pl As MediaPipeline Public Sub Main() Dim src, cnv, mux, snk As MediaControl Dim tm As Date Dim i As Integer pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" cnv = New MediaControl(pl, "videoconvert") mux = New MediaControl(pl, "avimux") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.avi" ' Collega fra loro i plugin di "GStreamer": src.LinkTo(cnv) cnv.LinkTo(mux) mux.LinkTo(snk) ' Avvia la ripresa video: pl.Play() ' Attende che l'Oggetto "MediaPipeline" avvii effettivamente la ripresa video: Repeat Wait 0.01 Until pl.Position > 0.0 tm = Now While pl.State = Media.Playing 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)) Flush Wait 0.01 Wend pl.Close() Print "\nRegistrazione terminata !" ' Essendo stato utilizzato l'Evento "Application_Read()", è necessario usare l'istruzione "Quit" per terminare il programma e così per poter creare il file video: Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma pl.Stop End
Salvare in un file video di formato "FLV"
Private pl As MediaPipeline Public Sub Main() Dim src, cnv, enc, mux, snk As MediaControl Dim tm As Date Dim i As Integer pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" cnv = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "x264enc") enc["pass"] = 5 enc["quantizer"] = 26 enc["speed-preset"] = 6 mux = New MediaControl(pl, "flvmux") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.flv" ' Collega fra loro i plugin di "GStreamer": src.LinkTo(cnv) cnv.LinkTo(enc) enc.LinkTo(mux) mux.LinkTo(snk) ' Avvia la ripresa video: pl.Play() ' Attende che la "Pipeline" avvii effetttivamente la ripresa video: Repeat Wait 0.01 Until pl.Position > 0.0 tm = Now While pl.State = Media.Playing 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)) Flush Wait 0.01 Wend pl.Close() Print "\nRegistrazione terminata !" ' Essendo stato utilizzato l'Evento "Application_Read()", è necessario usare l'istruzione "Quit" per terminare il programma e così per poter creare il file video: Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma pl.Stop End
Salvare in un file video di formato "MKV" (Matroska)
Private pl As MediaPipeline Public Sub Main() Dim src, cnv, enc, mux, snk As MediaControl Dim ftr As MediaFilter Dim tm As Date Dim i As Integer pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" ftr = New MediaFilter(pl, "video/x-raw,width=640,height=480") cnv = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "x264enc") mux = New MediaControl(pl, "matroskamux") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.mkv" ' Colleghiamo fra loro i plugin di "GStreamer": src.LinkTo(ftr) ftr.LinkTo(cnv) cnv.LinkTo(enc) enc.LinkTo(mux) mux.LinkTo(snk) ' Avvia la ripresa video: pl.Play() ' Attende che la "Pipeline" avvii effetttivamente la ripresa video: Repeat Wait 0.01 Until pl.Position > 0.0 tm = Now While pl.State = Media.Playing 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)) Flush Wait 0.01 Wend pl.Close() Print "\nRegistrazione terminata !" ' Essendo stato utilizzato l'Evento "Application_Read()", è necessario usare l'istruzione "Quit" per terminare il programma e così per poter creare il file video: Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma pl.Stop End
Salvare in un file video di formato "MP4"
Private pl As MediaPipeline Public Sub Main() Dim src, cnv, enc, mux, snk As MediaControl Dim tm As Date Dim i As Integer pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" cnv = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "x264enc") enc["pass"] = 5 enc["quantizer"] = 26 enc["speed-preset"] = 6 mux = New MediaControl(pl, "mp4mux") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.mp4" ' Collega fra loro i plugin di "GStreamer": src.LinkTo(cnv) cnv.LinkTo(enc) enc.LinkTo(mux) mux.LinkTo(snk) ' Avvia la ripresa video: pl.Play() ' Attende che la "Pipeline" avvii effettivamente la ripresa video: Repeat Wait 0.01 Until pl.Position > 0.0 tm = Now While pl.State = Media.Playing 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)) Flush Wait 0.01 Wend pl.Close() Print "\nRegistrazione terminata !" ' Essendo stato utilizzato l'Evento "Application_Read()", è necessario usare l'istruzione "Quit" per terminare il programma e così per poter creare il file video: Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma pl.Stop End
Salvare in un file video di formato "OGG-Theora"
Private pl As MediaPipeline Public Sub Main() Dim src, cnv, the, ogg, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" cnv = New MediaControl(pl, "videoconvert") the = New MediaControl(pl, "theoraenc") ogg = New MediaControl(pl, "oggmux") ogg["name"] = "mux" snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.ogg" ' Collega fra loro i plugin di "GStreamer": src.LinkTo(cnv) cnv.LinkTo(the) the.LinkTo(ogg) ogg.LinkTo(snk) ' Avvia la ripresa video: pl.Play() ' Attende che la "Pipeline" avvii effettivamente la ripresa video: Repeat Wait 0.01 Until pl.Position > 0.0 While pl.State = Media.Playing ' Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale: Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) Flush Wait 0.01 Wend pl.Close Print "\nTermine registrazione" ' Avendo usato l'Evento "Application_Read(),", per terminale il programma si dovrà invocare il comando "Quit": Quit End Public Sub Application_Read() ' Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento pl.Stop() End
Salvare in un file video di formato "RAW"
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, enc, mux, snk As MediaControl Dim tm As Date Dim i As Integer pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" cnv = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "x264enc") enc["speed-preset"] = 6 enc["bitrate"] = 1024 mux = New MediaControl(pl, "mpegtsmux") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.raw" ' Collega fra loro i plugin di "GStreamer": src.LinkTo(cnv) cnv.LinkTo(enc) enc.LinkTo(mux) mux.LinkTo(snk) ' Avvia la ripresa video: pl.Play() tm = Now While Not bo 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)) Flush Wait 0.01 Wend pl.Stop() pl.Close() Print "\nRegistrazione terminata !" ' Essendo stato utilizzato l'Evento "Application_Read()", è necessario usare l'istruzione "Quit" per terminare il programma e così per poter creare il file video: Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera si arresta la ripresa video e si chiude il programma bo = True End
Registrazione e creazione di un file video comprensivo di audio
Per la creazione di un file video comprensivo di traccia audio da una ripresa video, effettuata con WebCam, bisognerà utilizzare ovviamente Elementi di Gstremaer adatti per il video ed altri adatti per l'audio.
Vediamo un esempio di creazione di un file video comprensivo di traccia audio mediante un'applicazione a riga di comando.
Salvare in un file audio/video di formato "OGG-Theora"
In questo caso gli Elementi (plugin) di Gstremaer, adatti per il video, e quelli adatti per l'audio assumono all'interno della pipeline un'organizzazione, per cui dopo l'Elemento iniziale di GStreamer per la ripresa video con la webcam, vi è un primo blocco attinente alla gestione del video, l'ultimo Elemento del quale si collegherà direttamente al penultimo Elemento della pipeline preposto alla miscelazione dei dati audio e video. Il secondo blocco è afferente alla gestione dell'audio; ed anche per questo l'ultimo suo Elemento si collegherà direttamente all'ultimo Elemento della pipeline preposto alla dei dati audio e video.
Mostriamo un esempio pratico:
Private pl As MediaPipeline Public Sub Main() Dim srcv, rat, que1, vcon, the, que2, srca, que3, acon, vor, que4, ogg, snk As MediaControl Dim flv, fla As MediaFilter pl = New MediaPipeline srcv = New MediaControl(pl, "v4l2src") rat = New MediaControl(pl, "videorate") flv = New MediaFilter(pl, "video/x-raw,framerate=32/1") que1 = New MediaControl(pl, "queue") vcon = New MediaControl(pl, "videoconvert") the = New MediaControl(pl, "theoraenc") que2 = New MediaControl(pl, "queue") srca = New MediaControl(pl, "alsasrc") fla = New MediaFilter(pl, "audio/x-raw,rate=44100,channels=2,width=16,depth=16") que3 = New MediaControl(pl, "queue") acon = New MediaControl(pl, "audioconvert") vor = New MediaControl(pl, "vorbisenc") que4 = New MediaControl(pl, "queue") ogg = New MediaControl(pl, "oggmux") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/video.ogg" ' Parte video: srcv.LinkTo(rat) rat.LinkTo(flv) flv.LinkTo(que1) que1.LinkTo(vcon) vcon.LinkTo(the) the.LinkTo(que2) que2.LinkTo(ogg) ' Parte audio: srca.LinkTo(fla) fla.LinkTo(que3) que3.LinkTo(acon) acon.LinkTo(vor) vor.LinkTo(que4) ' Combinazione dei dati audio e video: que4.LinkTo(ogg) ' Creazione del file "OGG" finale: ogg.LinkTo(snk) ' Avvia la ripresa audio-video: pl.Play() ' Attende che la "Pipeline" avvii effettivamente la ripresa video: Repeat Wait 0.01 Until pl.Position > 0.0 While pl.State = Media.Playing ' Il tempo trascorso dall'inizio della ripresa video viene mostrato in console/Terminale: Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) Flush Wait 0.01 Wend pl.Close() Print "\nTermine registrazione" ' Essendo stato utilizzato l'Evento "Application_Read()", è necessario usare l'istruzione "Quit" per terminare il programma e così per poter creare il file video: Quit End Public Sub Application_Read() ' Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento pl.Stop End
Inserire un testo nel video
Per inserire nel video registrato anche un testo qualsiasi, si imposterà il plugin di GStreamer textoverlay.
Esempio:
Private Enum left = 0, hcenter, right Private Enum baseline = 0, bottom, top, position, vcenter, absolute ...... cnv = New MediaControl(pl, "videoconvert") tol = New MediaControl(pl, "textoverlay") tol["text"] = "Testo quasiasi nel Video" tol["halignment"] = left tol["valignment"] = bottom tol["shaded-background"] = True the = New MediaControl(pl, "theoraenc") ......
Quindi procedere ai conseguenti necessari collegamenti dei plugin.
Inserire nel video il tempo trascorso dall'inizio della ripresa video
Per inserire - in forma testuale - nel video registrato anche il tempo trascorso dall'inizio della ripresa video, si imposterà il plugin di GStreamer timeoverlay.
Esempio:
Private Enum left = 0, hcenter, right Private Enum baseline = 0, bottom, top, position, vcenter, absolute ...... cnv = New MediaControl(pl, "videoconvert") tol = New MediaControl(pl, "timeoverlay") tol["text"] = "Tempo trascorso: " tol["halignment"] = left tol["valignment"] = bottom tol["shaded-background"] = True the = New MediaControl(pl, "theoraenc") ......
Quindi procedere ai conseguenti necessari collegamenti dei plugin.