mirror of
https://github.com/staxrip/staxrip.git
synced 2026-10-18 14:40:32 +08:00
183 lines
8.1 KiB
VB.net
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
|