VS2010旗舰版VB.NET版本视频剪辑代码QZQ-2024-8-13 -17-02-简化版

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 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 = "Image Files (*.jpg;*.jpeg;*.png;*.gif)|*.jpg;*.jpeg;*.png;*.gif|Audio Files (*.mp3;*.wav;*.ogg)|*.mp3;*.wav;*.ogg|Video Files (*.mp4;*.avi;*.mkv; *.wmv)|*.mp4;*.avi;*.mkv; *.wmv"
    openFileDialog.Multiselect = True ' 允许选择多个文件
    If openFileDialog.ShowDialog() = DialogResult.OK Then
        selectedVideoPath = openFileDialog.FileName
        Dim selectedFile As String = openFileDialog.FileName
        ListBox1.Items.Add(selectedFile)
    End If

End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    AxWindowsMediaPlayer1.URL = selectedVideoPath
    AxWindowsMediaPlayer1.Ctlcontrols.play()
End Sub



Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    Dim totalDuration As Integer = 60 ' 假设总时长为 60 秒
    Dim panelWidth As Integer = Panel1.Width
    Dim pixelPerSecond As Integer = panelWidth / totalDuration ' 计算每秒钟对应的像素数

    Using g As Graphics = e.Graphics
        ' 绘制时间刻度线
        For i As Integer = 0 To totalDuration
            If i Mod 10 = 0 Then ' 每 10 秒绘制一条较长的刻度线
                g.DrawLine(Pens.Black, i * pixelPerSecond, 0, i * pixelPerSecond, 10)
                g.DrawString(i.ToString(), New Font("Arial", 10), Brushes.Black, i * pixelPerSecond - 10, 15)
            Else ' 其他时间绘制较短的刻度线
                g.DrawLine(Pens.Gray, i * pixelPerSecond, 0, i * pixelPerSecond, 5)
            End If
        Next
    End Using
End Sub




Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.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 & "'")
            sw.WriteLine("duration 0.5") ' 假设每张图片播放 0.5 秒,您可以根据需要修改此处的数值
        Next
    End Using


    Dim saveFileDialog As New SaveFileDialog()
    saveFileDialog.Filter = "MP4 Video (*.mp4)|*.mp4|AVI Video (*.avi)|*.avi|MKV Video (*.mkv)|*.mkv|FLV Video (*.flv)|*.flv"

    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 ".flv"

                process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v libx264 -r 25 -pix_fmt yuv420p " & Chr(34) & outputPath & Chr(34)

            Case ".mp4"
                process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v libx264 -r 25 -pix_fmt yuv420p " & Chr(34) & outputPath & Chr(34)

            Case ".avi"
                process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v libx264 -r 25 -pix_fmt yuv420p " & Chr(34) & outputPath & Chr(34)

            Case ".mkv"
                process.StartInfo.Arguments = "-f concat -safe 0 -i " & Chr(34) & concatListFile & Chr(34) & " -c:v libx264 -r 25 -pix_fmt yuv420p " & 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

End Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EYYLTV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值