Differenze tra le versioni di "Estrarre e salvare soltanto l'audio da un file video mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 212: Riga 212:
 
   con.LinkTo(flt)
 
   con.LinkTo(flt)
 
   flt.LinkTo(snk)
 
   flt.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() <FONT Color=gray>' ''Questo Evento viene sollevato, quando l'estrazione è terminata''</font>
 +
 +
  Print "\nEstrazione audio terminata !"
 +
  bo = True
 +
 
 +
End
 +
 +
 +
===Salvare l'audio in un file di formato AAC===
 +
Private Const GST_AUDIO_FORMAT_S16LE As Integer = 4
 +
Private pl As MediaPipeline
 +
Private bo As Boolean
 +
 +
 +
Public Sub Main()
 +
 +
  Dim src, bin, con, raw, aac, snk As MediaControl
 +
  Dim flt1, flt2 As MediaFilter
 +
  Dim filevideo As String
 +
 +
  pl = New MediaPipeline As "PLine"
 +
 +
  filevideo = "<FONT Color=darkgreen>''/percorso/del/file/video''</font>"
 +
 
 +
  src = New MediaControl(pl, "filesrc")
 +
  src["location"] = filevideo
 +
  bin = New MediaControl(pl, "decodebin")
 +
  con = New MediaControl(pl, "audioconvert")
 +
  src = New MediaControl(pl, "filesrc")
 +
  src["location"] = filevideo
 +
  bin = New MediaControl(pl, "decodebin")
 +
  con = New MediaControl(pl, "audioconvert")
 +
  flt1 = New MediaFilter(pl, "audio/x-raw, format=S16LE, rate=44100, channels=2, endianness=1234, width=16, depth=16")
 +
  raw = New MediaControl(pl, "rawaudioparse")
 +
  raw["interleaved"] = True
 +
  raw["num-channels"] = 2
 +
  raw["pcm-format"] = GST_AUDIO_FORMAT_S16LE
 +
  raw["sample-rate"] = 44100
 +
  aac = New MediaControl(pl, "faac")  <FONT Color=gray>' ''oppure anche "voaacenc"''</font>
 +
  flt2 = New MediaFilter(pl, "audio/mpeg,stream-format=adts,channels=2,rate=44100")
 +
  snk = New MediaControl(pl, "filesink")
 +
  snk["location"] = "/tmp/file.aac"
 +
 +
  src.LinkTo(bin)
 +
  bin.LinkLaterTo(con)
 +
  con.LinkTo(flt1)
 +
  flt1.LinkTo(raw)
 +
  raw.LinkTo(aac)
 +
  aac.LinkTo(flt2)
 +
  flt2.LinkTo(snk)
 
   
 
   
 
   pl.Play()
 
   pl.Play()

Versione attuale delle 06:46, 25 lug 2024

Mostriamo alcuni esempi pratici per estrarre soltanto l'audio da un file video e salvarlo 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/audio.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/audio.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/audio.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


Salvare l'audio in un file di formato RAW

Private pl As MediaPipeline
Private bo As Boolean


Public Sub Main()

 Dim src, bin, con, snk As MediaControl
 Dim flt As MediaFilter
 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")
 flt = New MediaFilter(pl, "audio/x-raw, format=S16LE, channels=2, endianness=1234, width=16, depth=16")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/audio.raw"

 src.LinkTo(bin)
 bin.LinkLaterTo(con)
 con.LinkTo(flt)
 flt.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 AAC

Private Const GST_AUDIO_FORMAT_S16LE As Integer = 4
Private pl As MediaPipeline
Private bo As Boolean


Public Sub Main()

 Dim src, bin, con, raw, aac, snk As MediaControl
 Dim flt1, flt2 As MediaFilter
 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")
 src = New MediaControl(pl, "filesrc")
 src["location"] = filevideo
 bin = New MediaControl(pl, "decodebin")
 con = New MediaControl(pl, "audioconvert")
 flt1 = New MediaFilter(pl, "audio/x-raw, format=S16LE, rate=44100, channels=2, endianness=1234, width=16, depth=16")
 raw = New MediaControl(pl, "rawaudioparse")
 raw["interleaved"] = True
 raw["num-channels"] = 2
 raw["pcm-format"] = GST_AUDIO_FORMAT_S16LE
 raw["sample-rate"] = 44100
 aac = New MediaControl(pl, "faac")   ' oppure anche "voaacenc"
 flt2 = New MediaFilter(pl, "audio/mpeg,stream-format=adts,channels=2,rate=44100")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/file.aac"

 src.LinkTo(bin)
 bin.LinkLaterTo(con)
 con.LinkTo(flt1)
 flt1.LinkTo(raw)
 raw.LinkTo(aac)
 aac.LinkTo(flt2)
 flt2.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