Imports System.IO
Imports System.Diagnostics
Imports System
Public Class VideoEditorForm
Private ffmpegPath As String = "C:\ffmpeg-master-latest-win64-gpl-shared\bin\ffmpeg.exe" '将此路径更改为您的 FFmpeg 实际安装路径
'储选中的视频文件路径
Private selectedVideoPath As String
'剪的起始时间(以秒为单位)
Private cropStartTime As Integer
'剪的结束时间(以秒为单位)
Private cropEndTime As Integer
' 存储选中的文件路径列表
Private selectedFilePaths As New List(Of String)
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "Video Files (*.mp4;*.avi;*.mkv; *.wmv)|*.mp4;*.avi;*.mkv; *.wmv"
If openFileDialog.ShowDialog() = DialogResult.OK Then
selectedVideoPath = openFileDialog.FileName
End If
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
If String.IsNullOrEmpty(selectedVideoPath) Then
MessageBox.Show("请先选择要保存的视频文件!")
Exit Sub
End If
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.Filter = "MP4 Video (*.mp4)|*.mp4|AVI Video (*.avi)|*.avi|MKV Video (*.mkv)|*.mkv"
If saveFileDialog.ShowDialog() = DialogResult.OK Then
Dim outputPath As String = saveFileDialog.FileName
Dim fileExtension As String = Path.GetExtension(outputPath)
Dim process As New Process()
process.StartInfo.FileName = ffmpegPath
Select Case fileExtension.ToLower()
Case ".mp4"
process.StartInfo.Arguments = "-i " & Chr(34) & selectedVideoPath & Chr(34) & " -c:v libx264 -c:a aac " & Chr(34) & outputPath & Chr(34)
Case ".avi"
process.StartInfo.Arguments = "-i " & Chr(34) & selectedVideoPath & Chr(34) & " -c:v mpeg4 -c:a mp3 " & Chr(34) & outputPath & Chr(34)
Case ".mkv"
process.StartInfo.Arguments = "-i " & Chr(34) & selectedVideoPath & Chr(34) & " -c:v copy -c:a copy " & Chr(34) & outputPath & Chr(34)
End Select
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.Start()
While Not process.HasExited
Dim output As String = process.StandardOutput.ReadLine()
'以在此处理进程的输出信息
End While
End If
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "Video Files (*.mp4;*.avi;*.mkv; *.wmv)|*.mp4;*.avi;*.mkv; *.wmv"
If openFileDialog.ShowDialog() = DialogResult.OK Then
selectedVideoPath = openFileDialog.FileName
End If
End Sub
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
If String.IsNullOrEmpty(selectedVideoPath) Then
MessageBox.Show("请先选择要裁剪的视频文件!")
Exit Sub
End If
' 取滑动条的裁剪起始时间和结束时间
If Not Integer.TryParse(TrackBar1.Value, cropStartTime) OrElse Not Integer.TryParse(TrackBar2.Value, cropEndTime) Then
MessageBox.Show("请设置有效的裁剪时间(整数,以秒为单位)!")
Exit Sub
End If
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.Filter = "MP4 Video (*.mp4)|*.mp4|AVI Video (*.avi)|*.avi|MKV Video (*.mkv)|*.mkv"
If saveFileDialog.ShowDialog() = DialogResult.OK Then
Dim outputPath As String = saveFileDialog.FileName
Dim fileExtension As String = Path.GetExtension(outputPath)
Dim process As New Process()
process.StartInfo.FileName = ffmpegPath
Select Case fileExtension.ToLower()
Case ".mp4"
process.StartInfo.Arguments = "-i " & Chr(34) & selectedVideoPath & Chr(34) & " -ss " & cropStartTime & " -to " & cropEndTime & " -c:v libx264 -c:a aac " & Chr(34) & outputPath & Chr(34)
Case ".avi"
process.StartInfo.Arguments = "-i " & Chr(34) & selectedVideoPath & Chr(34) & " -ss " & cropStartTime & " -to " & cropEndTime & " -c:v mpeg4 -c:a mp3 " & Chr(34) & outputPath & Chr(34)
Case ".mkv"
process.StartInfo.Arguments = "-i " & Chr(34) & selectedVideoPath & Chr(34) & " -ss " & cropStartTime & " -to " & cropEndTime & " -c:v copy -c:a copy " & Chr(34) & outputPath & Chr(34)
End Select
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.Start()
While Not process.HasExited
Dim output As String = process.StandardOutput.ReadLine()
'以在此处理进程的输出信息
End While
End If
End Sub
Private Sub TrackBar1_ValueChanged(ByVal sender As Object, ByVal e As EventArgs)
cropStartTime = TrackBar1.Value
End Sub
Private Sub TrackBar2_ValueChanged(ByVal sender As Object, ByVal e As EventArgs)
cropEndTime = TrackBar2.Value
End Sub
Private Sub VideoEditorForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TrackBar1.Value = 0
TrackBar2.Value = 0
End Sub
Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
Dim concatListFile As String = Path.GetTempFileName()
Using sw As New StreamWriter(concatListFile)
For Each item As String In ListBox1.Items
sw.WriteLine("file '" & item & "'")
Next
End Using
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.Filter = "MP4 Video (*.mp4)|*.mp4|AVI Video (*.avi)|*.avi|MKV Video (*.mkv)|*.mkv"
If saveFileDialog.ShowDialog() = DialogResult.OK Then
Dim outputPath As String = saveFileDialog.FileName
Dim fileExtension As String = Path.GetExtension(outputPath)
Dim process As New Process()
process.StartInfo.FileName = ffmpegPath
Select Case fileExtension.ToLower()
Case ".mp4"
process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v libx264 -c:a aac " & Chr(34) & outputPath & Chr(34)
Case ".avi"
process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v mpeg4 -c:a mp3 " & Chr(34) & outputPath & Chr(34)
Case ".mkv"
process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v copy -c:a copy " & Chr(34) & outputPath & Chr(34)
End Select
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
Try
process.Start()
While Not process.HasExited
Dim output As String = process.StandardOutput.ReadLine()
' 在此处理进程的输出信息
End While
Catch ex As Exception
MessageBox.Show("拼接过程中出现错误: " & ex.Message)
Finally
process.Dispose()
End Try
End If
End Sub
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "Video Files (*.mp4;*.avi;*.mkv; *.wmv)|*.mp4;*.avi;*.mkv; *.wmv"
If openFileDialog.ShowDialog() = DialogResult.OK Then
Dim selectedFile As String = openFileDialog.FileName
ListBox1.Items.Add(selectedFile)
End If
End Sub
End Class