Manipolare video con FFMpeg e VB.NET
FFMpeg lo conosciamo bene; non conoscevo invece FFMpegCore, una librerie per .NET che ci permette di usare FFMpeg nei nostri programmi.
Quindi la prima cosa da fare è installare FFMpeg:
- metodo 1 -> scaricare i binari da qui
- usare il terminale
In questo secondo caso:
choco install ffmpeg -Y
Ovviament parlo di ambito Windows, non prendo in considerazione gli altri OS.
Fatto questo, installate la libreria nella vostra soluzione con NuGet:
Install-Package FFMpegCore
A questo punto un codice in VB.NET di esempio:
Imports System.Drawing
Imports FFMpegCore
Imports FFMpegCore.Enums
Module Module1
Sub Main(ByVal args As String())
Dim inputFile As String = "test.mp4"
Dim audioFile As String = "test.mp3"
Dim imgFile As String = "img.png"
Dim outputFile As String = "test_convert.mp4"
GetInfo(inputFile)
Console.WriteLine("ESTRAGGO AUDIO")
FFMpeg.ExtractAudio(inputFile, audioFile)
Console.WriteLine("ESTRAGGO IMMAGINE")
GetScreenshot(inputFile, imgFile)
Console.WriteLine("CONVERTO VIDEO")
Converto(inputFile, outputFile)
End Sub
Sub GetInfo(inputFile As String)
Dim mediaInfo = FFProbe.Analyse(inputFile)
For Each audioStream As AudioStream In mediaInfo.AudioStreams
Console.WriteLine(audioStream.CodecName)
Console.WriteLine(audioStream.CodecLongName)
Console.WriteLine(audioStream.Duration)
Console.WriteLine(audioStream.BitRate)
Console.WriteLine(audioStream.ChannelLayout)
Next
End Sub
Sub GetScreenshot(inputFile As String, imgFile As String)
Dim mediaFileAnalysis = FFProbe.Analyse(inputFile)
Dim s = FFMpeg.Snapshot(mediaFileAnalysis, imgFile, New Size(200, 400), TimeSpan.FromMinutes(1))
End Sub
Sub Converto(inputFile As String, outputFile As String)
Dim options As Action(Of FFMpegArgumentOptions) = Sub(x) x.WithVideoCodec(VideoCodec.LibX264).WithConstantRateFactor(21).WithAudioCodec(AudioCodec.Aac).WithVariableBitrate(4).WithFastStart()
FFMpegArguments.FromFileInput(inputFile).OutputToFile(outputFile, True, options).ProcessSynchronously()
End Sub
End Module
Queste le operazioni che facciamo:
- visualiziamo un pò di info sul video
- estriamo l'audio
- estraiamo un frame
- convertiamo il video in un formato più leggero per il web (confrontate le dimensioni dei due video)
Enjoy!
vbnet nuget ffmpeg ffmpegcore
Commentami!