Manipolare video con FFMpeg e VB.NET

Mattepuffo's logo
Manipolare video con FFMpeg e VB.NET

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!


Condividi

Commentami!