Files
2024-05-10 17:53:27 +02:00

183 lines
8.1 KiB
VB.net

Imports System.Text
Public Class Animation
Shared Sub GIF(inputFile As String, proj As Project)
If Not File.Exists(inputFile) Then Exit Sub
If Not Package.ffmpeg.VerifyOK(True) Then Exit Sub
If proj Is Nothing Then
proj = New Project
proj.Init()
proj.SourceFile = inputFile
End If
Dim Rate = s.Storage.GetInt("GifFrameRate", 15)
Dim cachePath = Path.Combine(Folder.Temp, "Palette.png")
Dim OutPutPath = inputFile.ChangeExt("gif")
Dim Seek = s.Storage.GetDouble("GifTime", 15.0).ToInvariantString()
Dim Duration = s.Storage.GetDouble("GifLength", 4.2).ToInvariantString()
Dim Size = s.Storage.GetInt("GifScale", 480)
Dim Mode = s.Storage.GetString("PaletteGen", "diff")
Dim SecondMode = s.Storage.GetString("PaletteUse", "rectangle")
Dim Dither = s.Storage.GetString("GifDither", "dither=floyd_steinberg")
Dim DirectoryStatus = s.Storage.GetBool("GifOutput", False)
Dim DirectoryLocation = s.Storage.GetString("GifDirectory", p.DefaultTargetFolder)
Dim Export = Path.Combine(DirectoryLocation, inputFile.Base.ChangeExt("gif"))
Using Proc As New Proc
Proc.Header = "Creating Gif"
Proc.SkipStrings = {"frame=", "size="}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.ffmpeg
Proc.Arguments = " -ss " & Seek & " -t " & Duration & " -i " + """" + inputFile + """" +
" -vf " + """" + "fps=" & Rate & ",scale=" & Size & ":-1:flags=spline,palettegen=stats_mode=" &
Mode & """ -loglevel quiet -an -y " + cachePath
Proc.Start()
End Using
If DirectoryStatus = True Then
Using Proc As New Proc
Proc.Header = "Creating Gif"
Proc.SkipStrings = {"frame=", "size="}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.ffmpeg
Proc.Arguments = " -ss " & Seek & " -t " & Duration & " -i " + """" + inputFile + """" +
" -i " + cachePath + " -lavfi " + """" + "fps=" & Rate & ",scale=" & Size &
":-1:flags=spline [x]; [x][1:v] paletteuse=" & Dither & ":diff_mode=" & SecondMode &
""" -loglevel quiet -an -y " + """" + Export + """"
Proc.Start()
End Using
Else
Using Proc As New Proc
Proc.Header = "Creating Gif"
Proc.SkipStrings = {"frame=", "size="}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.ffmpeg
Proc.Arguments = " -ss " & Seek & " -t " & Duration & " -i " + """" + inputFile + """" +
" -i " + cachePath + " -lavfi " + """" + "fps=" & Rate & ",scale=" & Size &
":-1:flags=spline [x]; [x][1:v] paletteuse=" & Dither & ":diff_mode=" & SecondMode &
""" -loglevel quiet -an -y " + """" + OutPutPath + """"
Proc.Start()
End Using
End If
Try
FileHelp.Delete(cachePath)
Catch
End Try
End Sub
Shared Sub aPNG(inputFile As String, proj As Project)
If Not File.Exists(inputFile) Then Exit Sub
If Not Package.ffmpeg.VerifyOK(True) Then Exit Sub
If Not Package.PNGopt.VerifyOK(True) Then Exit Sub
If proj Is Nothing Then
proj = New Project
proj.Init()
proj.SourceFile = inputFile
End If
Dim Rate = s.Storage.GetInt("PNGFrameRate", 15)
Dim Path = inputFile.ChangeExt("apng")
Dim OptOut = inputFile.ChangeExt(".png").Replace(".png", "_opt.png")
Dim Seek = s.Storage.GetString("PNGTime", "15.0")
Dim Duration = s.Storage.GetString("PNGLength", "3.8")
Dim Size = s.Storage.GetInt("PNGScale", 480)
Dim OptSettings = s.Storage.GetString("PNGopt", "-z1")
Dim Opt = s.Storage.GetBool("OptSetting", False)
Dim DirectoryStatus = s.Storage.GetBool("PNGOutput", False)
Dim DirectoryLocation = s.Storage.GetString("PNGDirectory", p.DefaultTargetFolder)
Dim Export = IO.Path.Combine(DirectoryLocation, inputFile.Base.ChangeExt("png"))
Dim NewFile = inputFile.ChangeExt("png")
Using Proc As New Proc
Proc.Header = "Encoding PNG"
Proc.SkipStrings = {"frame=", "size="}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.ffmpeg
Proc.Arguments = " -ss " & Seek & " -t " & Duration & " -i " + """" + inputFile + """" +
" -lavfi " + """" + "fps=" & Rate & ",scale=" & Size & ":-1:flags=spline" +
""" -plays 0 -loglevel quiet -an -y " + """" + Path + """"
Proc.Start()
End Using
If File.Exists(NewFile) = True Then
File.Delete(NewFile)
End If
If Opt = True Then
If File.Exists(OptOut) = True Then
File.Delete(OptOut)
End If
If DirectoryStatus = True Then
Using Proc As New Proc
Proc.Header = "Optimizing PNG"
Proc.SkipStrings = {"saving", "Reading", "all done", "APNG"}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.PNGopt
Proc.Arguments = OptSettings + " " + """" + Path + """" + " " + """" + Export + """"
Proc.Start()
End Using
Else
Using Proc As New Proc
Proc.Header = "Optimizing PNG"
Proc.SkipStrings = {"saving", "Reading", "all done", "APNG"}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.PNGopt
Proc.Arguments = OptSettings + " " + """" + Path + """" + " " + """" + OptOut + """"
Proc.Start()
End Using
End If
Try
File.Delete(Path)
Catch ex As Exception
End Try
Else
File.Move(Path, NewFile)
End If
End Sub
End Class
Public Class MKVInfo
Shared Sub MetadataHDR(inputFile As String, proj As Project)
If Not File.Exists(inputFile) Then
Exit Sub
End If
Dim hdr = MediaInfo.GetVideo(inputFile, "transfer_characteristics")
If hdr = "PQ" Then
Using Proc As New Proc
Proc.Header = "Adding HDR Metadata"
Proc.SkipStrings = {"Progress", "The file", "The cue", "Multiplexing"}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.mkvmerge
Proc.Arguments = "-o " + (inputFile + "_HDR10.mkv").Escape + " --colour-matrix 0:9 " +
"--colour-range 0:1 --colour-transfer-characteristics 0:16 --colour-primaries 0:9 " +
"--max-content-light 0:1000 --max-frame-light 0:300 --max-luminance 0:1000 " +
"--min-luminance 0:0.01 --chromaticity-coordinates 0:0.68,0.32,0.265,0.690,0.15,0.06 " +
"--white-colour-coordinates 0:0.3127,0.3290 " + inputFile.Escape
Proc.Start()
End Using
ElseIf hdr = "HLG" Then
Using Proc As New Proc
Proc.Header = "Adding HDR Metadata"
Proc.SkipStrings = {"Progress", "The file", "The cue", "Multiplexing"}
Proc.Encoding = Encoding.UTF8
Proc.Package = Package.mkvmerge
Proc.Arguments = "-o " + (inputFile + "_HLG.mkv").Escape + " --colour-matrix 0:9 " +
"--colour-range 0:1 --colour-transfer-characteristics 0:18 --colour-primaries 0:9 " +
"--max-content-light 0:1000 --max-frame-light 0:300 --max-luminance 0:1000 " +
"--min-luminance 0:0.01 --chromaticity-coordinates 0:0.68,0.32,0.265,0.690,0.15,0.06 " +
"--white-colour-coordinates 0:0.3127,0.3290 " + (inputFile).Escape
Proc.Start()
End Using
Else
MsgInfo("No HDR Metadata Key was Found")
End If
End Sub
End Class