Estrarre e salvare l'audio da un file video mediante il Componente gb.media

Da Gambas-it.org - Wikipedia.
Versione del 3 lug 2024 alle 05:54 di Vuott (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Mostriamo alcuni esempi pratici per estrarre l'audio da un file video esalvarlo in un file audio.

Salvare l'audio in un file di formato WAV

Private pl As MediaPipeline
Private bo As Boolean


Public Sub Main()

 Dim src, bin, con, wav, snk As MediaControl
 Dim filevideo As String

 pl = New MediaPipeline As "PLine"

 filevideo = "/percorso/del/file/video"
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = filevideo
 bin = New MediaControl(pl, "decodebin")
 con = New MediaControl(pl, "audioconvert")
 wav = New MediaControl(pl, "wavenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/file.wav"

 src.LinkTo(bin)
 bin.LinkLaterTo(con)
 con.LinkTo(wav)
 wav.LinkTo(snk)

 pl.Play()
 
 While pl.Duration < 1 
   Wait 0.01
 Wend
  Print "Durata dell'audio: "; Str(Time(0, 0, 0, pl.Duration * 1000))
 While Not bo
   Wait 0.01
 Wend

 pl.Close
 Quit

End


Public Sub PLine_Position()

 If pl.Position >= 1.0 Then 
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Flush
 Endif 

End


Public Sub PLine_End() ' Questo Evento viene sollevato, quando l'estrazione è terminata

 Print "\nEstrazione audio terminata !"
 bo = True
 
End


Salvare l'audio in un file di formato MP3

Private pl As MediaPipeline
Private bo As Boolean


Public Sub Main()

 Dim src, bin, con, mp3, snk As MediaControl
 Dim filevideo As String

 pl = New MediaPipeline As "PLine"

 filevideo = "/percorso/del/file/video"
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = filevideo
 bin = New MediaControl(pl, "decodebin")
 con = New MediaControl(pl, "audioconvert")
 mp3 = New MediaControl(pl, "lamemp3enc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/file.mp3"

 src.LinkTo(bin)
 bin.LinkLaterTo(con)
 con.LinkTo(mp3)
 mp3.LinkTo(snk)

 pl.Play()

 Print "Durata dell'audio: "; Str(Time(0, 0, 0, pl.Duration * 1000))

 While Not bo
   Wait 0.01
 Wend

 pl.Close
 Quit

End


Public Sub PLine_Position()

 If pl.Position >= 1.0 Then 
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Flush
 Endif 

End


Public Sub PLine_End() ' Questo Evento viene sollevato, quando l'estrazione è terminata

 Print "\nEstrazione audio terminata !"
 bo = True
 
End


Salvare l'audio in un file di formato OGG

Private pl As MediaPipeline
Private bo As Boolean


Public Sub Main()

 Dim src, bin, con, vor, ogg, snk As MediaControl
 Dim filevideo As String

 pl = New MediaPipeline As "PLine"

 filevideo = "/percorso/del/file/video"
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = filevideo
 bin = New MediaControl(pl, "decodebin")
 con = New MediaControl(pl, "audioconvert")
 vor = New MediaControl(pl, "vorbisenc")
 ogg = New MediaControl(pl, "oggmux")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/file.ogg"

 src.LinkTo(bin)
 bin.LinkLaterTo(con)
 con.LinkTo(vor)
 vor.LinkTo(ogg)
 ogg.LinkTo(snk)

 pl.Play()
 
 While pl.Duration < 1 
   Wait 0.01
 Wend
  Print "Durata dell'audio: "; Str(Time(0, 0, 0, pl.Duration * 1000))
 While Not bo
   Wait 0.01
 Wend

 pl.Close
 Quit

End


Public Sub PLine_Position()

' Mostra il tempo trascorso dall'avvio del video:
 If pl.Position >= 1.0 Then 
   Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000))
   Flush
 Endif 

End


Public Sub PLine_End() ' Questo Evento viene sollevato, quando l'estrazione è terminata

 Print "\nEstrazione audio terminata !"
 bo = True
 
End