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.
(Creata pagina con "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 Med...") |
|||
(5 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 21: | Riga 21: | ||
wav = New MediaControl(pl, "wavenc") | wav = New MediaControl(pl, "wavenc") | ||
snk = New MediaControl(pl, "filesink") | snk = New MediaControl(pl, "filesink") | ||
− | snk["location"] = "/tmp/ | + | snk["location"] = "/tmp/audio.wav" |
src.LinkTo(bin) | src.LinkTo(bin) | ||
Riga 82: | Riga 82: | ||
mp3 = New MediaControl(pl, "lamemp3enc") | mp3 = New MediaControl(pl, "lamemp3enc") | ||
snk = New MediaControl(pl, "filesink") | snk = New MediaControl(pl, "filesink") | ||
− | snk["location"] = "/tmp/ | + | snk["location"] = "/tmp/audio.mp3" |
src.LinkTo(bin) | src.LinkTo(bin) | ||
Riga 142: | Riga 142: | ||
ogg = New MediaControl(pl, "oggmux") | ogg = New MediaControl(pl, "oggmux") | ||
snk = New MediaControl(pl, "filesink") | snk = New MediaControl(pl, "filesink") | ||
− | snk["location"] = "/tmp/ | + | snk["location"] = "/tmp/audio.ogg" |
src.LinkTo(bin) | src.LinkTo(bin) | ||
Riga 169: | Riga 169: | ||
<FONT Color=gray>' ''Mostra il tempo trascorso dall'avvio del video:''</font> | <FONT Color=gray>' ''Mostra il tempo trascorso dall'avvio del video:''</font> | ||
+ | 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 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 = "<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") | ||
+ | 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() <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() | ||
+ | |||
+ | 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 | If pl.Position >= 1.0 Then | ||
Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) | Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) |
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.
Indice
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