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 Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.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 Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Multiselect = True
openFileDialog.Filter = "视频文件|*.mp4;*.avi;*.mkv;*.flv;*.wmv"
If openFileDialog.ShowDialog() = DialogResult.OK Then
Dim filePaths() As String = openFileDialog.FileNames
Dim concatListFile As String = Path.GetTempFileName()
Using sw As New StreamWriter(concatListFile)
For Each filePath As String In filePaths
sw.WriteLine("file '" & filePath & "'")
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
process.Start()
While Not process.HasExited
Dim output As String = process.StandardOutput.ReadLine()
'以在此处理进程的输出信息
End While
End If
End If
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
'择导出保存的路径和格式
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.Filter = "MP4 文件|*.mp4|AVI 文件|*.avi|MKV 文件|*.mkv|FLV 文件|*.flv|WMV 文件|*.wmv"
If saveFileDialog.ShowDialog() = DialogResult.OK Then
Dim exportPath As String = saveFileDialog.FileName
'此处进行导出保存的后续处理
Console.WriteLine("导出保存的路径: " & exportPath)
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If String.IsNullOrEmpty(selectedVideoPath) Then
MessageBox.Show("请先选择要裁剪的视频文件!")
Exit Sub
End If
'取用户输入的裁剪起始时间和结束时间
If Not Integer.TryParse(TextBoxCropStart.Text, cropStartTime) OrElse Not Integer.TryParse(TextBoxCropEnd.Text, 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 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