Differenze tra le versioni di "Salvare in un file OGV una ripresa video mediante una WebCam con il Componente gb.media"
(20 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Il Componente ''gb.media'', utilizzando particolari plugin di ''GStreamer'', consente di salvare una ripresa video mediante una WebCam in un file di formato OGV. | Il Componente ''gb.media'', utilizzando particolari plugin di ''GStreamer'', consente di salvare una ripresa video mediante una WebCam in un file di formato OGV. | ||
− | Vediamo un esempio | + | ==Ripresa video "senza" audio== |
+ | Vediamo un esempio di ripresa video ''priva di audio'' con un'applicazione ''a riga di comando'': | ||
Private bo As Boolean | Private bo As Boolean | ||
Riga 8: | Riga 9: | ||
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
− | Dim src, the, ogg, snk As MediaControl | + | Dim src, cnv, the, ogg, snk As MediaControl |
Dim ftr As MediaFilter | Dim ftr As MediaFilter | ||
− | Dim | + | Dim temporaneo As String |
− | + | temporaneo = Temp | |
− | + | ||
− | + | pl = New MediaPipeline | |
− | + | ||
− | + | src = New MediaControl(pl, "v4l2src") | |
− | + | src["device"] = "/dev/video0" | |
− | + | ftr = New MediaFilter(pl, "video/x-raw,width=640,height=480,framerate=30/1") | |
− | + | 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"] = temporaneo | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font> |
− | + | src.LinkTo(ftr) | |
− | + | ftr.LinkTo(cnv) | |
− | + | cnv.LinkTo(the) | |
− | + | the.LinkTo(ogg) | |
+ | ogg.LinkTo(snk) | ||
<FONT Color=gray>' ''Avvia la ripresa video:''</font> | <FONT Color=gray>' ''Avvia la ripresa video:''</font> | ||
− | + | pl.Play() | |
− | + | While Not bo | |
<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)) | |
− | + | Flush | |
− | + | Wait 0.01 | |
+ | Wend | ||
− | + | Copy temporaneo To "/tmp/file.ogv" | |
− | + | pl.Stop() | |
− | + | pl.Close | |
− | + | Print "\nTermine registrazione" | |
− | + | ||
+ | <FONT Color=gray>' ''Avendo usato l'Evento "Application_Read(),", per terminale il programma si dovrà invocare il comando "Quit":''</font> | ||
+ | Quit | ||
'''End''' | '''End''' | ||
+ | '''Public''' Sub Application_Read() <FONT Color=gray>' ''Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento:''</font> | ||
+ | |||
+ | bo = True | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | Per mostrare eventualmente all'interno della finestra del video anche il tempo trascorso dall'inizio della ripresa video, è necessario utilizzare il plugin "''timeoverlay''" | ||
+ | |||
+ | ==Ripresa video comprensiva di traccia audio== | ||
+ | Vediamo un esempio di ripresa video comprensiva di traccia audio con un'applicazione ''a riga di comando''. | ||
+ | <BR>In tal caso bisognerà utilizzare ovviamente Elementi di ''Gstremaer'' adatti per il video ed altri adatti per l'audio. Essi all'interno della ''pipeline'' assumono 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. | ||
+ | |||
+ | Va anche sottolineato che il valore del rapporto assegnato alla Proprietà "framerate" dell'elemento ''MediaFilter'', relativo al blocco del video, è opportuno impostare molto basso il valore, pena un'interruzione dell'audio. | ||
+ | |||
+ | Mostriamo un esempio pratico: | ||
+ | Private bo As Boolean | ||
− | '''Public''' Sub | + | |
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim pl As MediaPipeline | ||
+ | Dim srcv, rat, que1, vcon, the, que2, srca, que3, acon, vor, que4, ogg, snk As MediaControl | ||
+ | Dim flv, fla As MediaFilter | ||
+ | Dim temporaneo As String | ||
+ | |||
+ | temporaneo = Temp | ||
+ | |||
+ | pl = New MediaPipeline | ||
+ | |||
+ | srcv = New MediaControl(pl, "v4l2src") | ||
+ | rat = New MediaControl(pl, "videorate") | ||
+ | flv = New MediaFilter(pl, "video/x-raw,framerate=2/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"] = temporaneo | ||
− | + | <FONT Color=gray>' ''Parte video:''</font> | |
+ | srcv.LinkTo(rat) | ||
+ | rat.LinkTo(flv) | ||
+ | flv.LinkTo(que1) | ||
+ | que1.LinkTo(vcon) | ||
+ | vcon.LinkTo(the) | ||
+ | the.LinkTo(que2) | ||
+ | que2.LinkTo(ogg) | ||
+ | <FONT Color=gray>' ''Parte audio:''</font> | ||
+ | srca.LinkTo(fla) | ||
+ | fla.LinkTo(que3) | ||
+ | que3.LinkTo(acon) | ||
+ | acon.LinkTo(vor) | ||
+ | vor.LinkTo(que4) | ||
+ | <FONT Color=gray>' ''Combinazione dei dati audio e video:''</font> | ||
+ | que4.LinkTo(ogg) | ||
+ | <FONT Color=gray>' ''Creazione del file .ogv finale:''</font> | ||
+ | ogg.LinkTo(snk) | ||
+ | |||
+ | <FONT Color=gray>' ''Avvia la ripresa audio-video:''</font> | ||
+ | pl.Play() | ||
+ | |||
+ | While Not bo | ||
+ | <FONT Color=gray>' ''Mostra in console/terminale il tempo trascorso dall'inizio della ripresa audio-video:''</font> | ||
+ | Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) | ||
+ | Flush | ||
+ | Wait 0.01 | ||
+ | Wend | ||
+ | |||
+ | Copy temporaneo To "/tmp/file.ogv" | ||
+ | pl.Stop() | ||
+ | pl.Close() | ||
+ | Print "\nTermine registrazione" | ||
+ | Quit | ||
− | + | '''End''' | |
+ | |||
+ | '''Public''' Sub Application_Read() <FONT Color=gray>' ''Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento:''</font> | ||
− | + | bo = True | |
'''End''' | '''End''' | ||
− | |||
− |
Versione attuale delle 10:50, 17 mag 2023
Il Componente gb.media, utilizzando particolari plugin di GStreamer, consente di salvare una ripresa video mediante una WebCam in un file di formato OGV.
Ripresa video "senza" audio
Vediamo un esempio di ripresa video priva di audio con un'applicazione a riga di comando:
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, the, ogg, snk As MediaControl Dim ftr As MediaFilter Dim temporaneo As String temporaneo = Temp pl = New MediaPipeline src = New MediaControl(pl, "v4l2src") src["device"] = "/dev/video0" ftr = New MediaFilter(pl, "video/x-raw,width=640,height=480,framerate=30/1") 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"] = temporaneo ' Collega fra loro i plugin di "GStreamer": src.LinkTo(ftr) ftr.LinkTo(cnv) cnv.LinkTo(the) the.LinkTo(ogg) ogg.LinkTo(snk) ' Avvia la ripresa video: pl.Play() While Not bo ' 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 Copy temporaneo To "/tmp/file.ogv" pl.Stop() 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: bo = True End
Per mostrare eventualmente all'interno della finestra del video anche il tempo trascorso dall'inizio della ripresa video, è necessario utilizzare il plugin "timeoverlay"
Ripresa video comprensiva di traccia audio
Vediamo un esempio di ripresa video comprensiva di traccia audio con un'applicazione a riga di comando.
In tal caso bisognerà utilizzare ovviamente Elementi di Gstremaer adatti per il video ed altri adatti per l'audio. Essi all'interno della pipeline assumono 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.
Va anche sottolineato che il valore del rapporto assegnato alla Proprietà "framerate" dell'elemento MediaFilter, relativo al blocco del video, è opportuno impostare molto basso il valore, pena un'interruzione dell'audio.
Mostriamo un esempio pratico:
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim srcv, rat, que1, vcon, the, que2, srca, que3, acon, vor, que4, ogg, snk As MediaControl Dim flv, fla As MediaFilter Dim temporaneo As String temporaneo = Temp pl = New MediaPipeline srcv = New MediaControl(pl, "v4l2src") rat = New MediaControl(pl, "videorate") flv = New MediaFilter(pl, "video/x-raw,framerate=2/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"] = temporaneo ' 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 .ogv finale: ogg.LinkTo(snk) ' Avvia la ripresa audio-video: pl.Play() While Not bo ' Mostra in console/terminale il tempo trascorso dall'inizio della ripresa audio-video: Write "\rTempo: " & Str(Time(0, 0, 0, pl.Position * 1000)) Flush Wait 0.01 Wend Copy temporaneo To "/tmp/file.ogv" pl.Stop() pl.Close() Print "\nTermine registrazione" Quit End Public Sub Application_Read() ' Cliccando sul tasto "Invio" della tastiera, si solleverà questo Evento: bo = True End