簡體   English   中英

我找不到使用ffmpeg在vb.net中將多個jpg或png轉換為gif的任何方法

[英]I cannot find any way to convert multiple jpg or png to gif in vb.net using ffmpeg

無論如何,我可以使用vb.net中的ffmpeg將多張png或jpg圖像轉換為gif嗎?我已經啟動了一個新應用程序以捕獲視頻中的某些幀,但是現在我想使用ffmpeg獲取gif圖像中提取的所有幀。 到目前為止,這是我的代碼:實際上,我已經准備好像這樣嘗試但沒有成功,我進行了一些更改,我得到了gif文件,但是處於空狀態,這是到目前為止的代碼

Imports System.Diagnostics
Imports System.ComponentModel
Imports System
Imports System.IO
Public Class Form1
Dim video = ""
Dim startInfo As New ProcessStartInfo("ffmpeg.exe")
Dim frame As Long 'individual frames
Dim tempdir As String = "C:\avitogifconverter\" ' images temp directory
Dim DestPath As String = "C:\avitogifconverter\"
Public Declare Auto Function FindWindowNullClassName Lib "user32.dll" Alias "FindWindow" (ByVal lpClassname As Integer, ByVal lpWindownName As String) As Integer
Dim Counter As Integer = 0

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    My.Computer.FileSystem.CreateDirectory(tempdir)
    TextBox1.Text = "exp:-->video.avi or webm or flv"
    TextBox1.Clear()



End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim p As Process = Process.Start("cmd", "/k ffmpeg.exe -i " + TextBox1.Text + " -filter:v fps=1/15 C:\avitogifconverter\out%02d.jpg")
    p.WaitForExit()

    If p.HasExited Then
        MsgBox("The Extraction Are Finish...")
    End If

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Label3.Text = "cmd" + "/k ffmpeg.exe -i " + TextBox1.Text + " -filter:v fps=1/15 C:\avi to gif converter\out%02d.jpg"
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click


    If (OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK) Then
        'TextBox1.Text = OpenFileDialog1.FileName
        TextBox1.Text = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
    End If
    If TextBox1.Text = Nothing Then
        Return
    End If
    If TextBox1.Text <> Nothing Then
        'My.Computer.FileSystem.CopyFile(TextBox1.Text, DestPath)
    End If

End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Dim args As String 'declare args
    args = " -framerate 1/5 -i C:\avitogifconverter\out%02d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p C:\avitogifconverter\out.gif "
    Dim proc As New Process
    Dim proci As New ProcessStartInfo
    proci.FileName = My.Application.Info.DirectoryPath & "\ffmpeg.exe"
    proci.Arguments = args
    proci.WindowStyle = ProcessWindowStyle.Hidden
    proci.CreateNoWindow = True
    proci.UseShellExecute = False
    proc.StartInfo = proci
    proc.Start()
    Do Until proc.HasExited = True
        Me.Text = "Saving"
    Loop
    Me.Text = "your video done"

    MsgBox("Done")

    'IO.Directory.Delete(tempdir, True)
End Sub
End Class

實際上,我剛完成代碼,最后發現了錯誤所在。 這是將mp4轉換為gif的工作代碼,所以我決定先將圖像轉換為mp4,然后將mp4轉換為gif。

我已經嘗試將文件移動到其他位置,但是我嘗試將文件移動到其他位置,它說我找不到目錄,但是目錄存在。 我在這里想念的是代碼

Imports System.Diagnostics
Imports System.ComponentModel
Imports System
Imports System.IO
Imports System.IO.Compression
Imports System.Windows.Forms
Imports System.Net

Public Class Form1
Dim fpsx = 10
Dim video = ""
Dim startInfo As New ProcessStartInfo("ffmpeg.exe")
Dim frame As Long 'individual frames
Dim tempdir As String = "C:\avitogifconverter\" ' images temp directory
Dim DestPath As String = "C:\avitogifconverter\"
Public Declare Auto Function FindWindowNullClassName Lib "user32.dll" Alias "FindWindow" (ByVal lpClassname As Integer, ByVal lpWindownName As String) As Integer
Dim Counter As Integer = 0

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    My.Computer.FileSystem.CreateDirectory(tempdir)
    TextBox1.Text = "exp:-->video.avi or webm or flv"
    TextBox1.Clear()
    TextBox2.Text = fpsx


End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    fpsx = TextBox2.Text
    TextBox2.Text = fpsx

    Dim p As Process = Process.Start("cmd", "/k ffmpeg.exe -i " + TextBox1.Text + " -framerate 5/1 -filter:v fps=" + TextBox2.Text + " C:\avitogifconverter\out%02d.jpg")
    p.WaitForExit()

    If p.HasExited Then
        MsgBox("The Extraction Are Finish...")
    End If

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs)

End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click


    If (OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK) Then
        'TextBox1.Text = OpenFileDialog1.FileName
        'TextBox1.Text = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
        TextBox1.Text = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName)
        Dim newdialog As New OpenFileDialog()
        If newdialog.ShowDialog() = DialogResult.OK Then
            System.IO.File.Copy(newdialog.FileName, tempdir)
            MessageBox.Show(System.IO.Path.GetDirectoryName(newdialog.FileName) & "\" & System.IO.Path.GetFileName(newdialog.FileName))
        End If
    End If
    If TextBox1.Text = Nothing Then
        Return
    End If
    If TextBox1.Text <> Nothing Then
        'My.Computer.FileSystem.CopyFile(TextBox1.Text, DestPath)
    End If

End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Dim args As String 'declare args
    args = " -i C:\avitogifconverter\out%02d.jpg -r 10 C:\avitogifconverter\out.gif "
    'args = " -i C:\avitogifconverter\out%02d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p C:\avitogifconverter\out.mp4 "
    Dim proc As New Process
    Dim proci As New ProcessStartInfo
    proci.FileName = My.Application.Info.DirectoryPath & "\ffmpeg.exe"
    proci.Arguments = args
    proci.WindowStyle = ProcessWindowStyle.Hidden
    proci.CreateNoWindow = True
    proci.UseShellExecute = False
    proc.StartInfo = proci
    proc.Start()
    Do Until proc.HasExited = True
        Me.Text = "Saving"
    Loop
    Me.Text = "your video done"

    MsgBox("Done")
    Dim directoryName As String = "C:\avitogifconverter\"
    For Each deleteFile In Directory.GetFiles(directoryName, "*.jpg", SearchOption.TopDirectoryOnly)
        File.Delete(deleteFile)
    Next

    'IO.Directory.Delete(tempdir, True)
End Sub

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    Form2.Show()

End Sub
End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM