在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#多媒体编程 → C#视频操作学习Tips(5) 音频、视频选择多段删除

C#视频操作学习Tips(5) 音频、视频选择多段删除

C#多媒体编程

下载此实例
  • 开发语言:C#
  • 实例大小:80.07M
  • 下载次数:0
  • 浏览次数:21
  • 发布时间:2025-12-02
  • 实例类别:C#多媒体编程
  • 发 布 人:我想你了、
  • 文件格式:.rar
  • 所需积分:0
 相关标签: tips Tip 操作 删除 学习

实例介绍

Visual Studio 2022, WPF .NET 8.0。调用FFmpeg函数与WinForm通用,可直接用于WinForm。
为便于说明,均采用后台代码。

由于管道操作,不生成临时文件,所以在删除多段视频后重新编码该视频,比较耗时。

删除音频,直接将需要设置的多段视频设置为静音。

选好多段后,点击“保存编辑”,另存视频。

 public class Project
 {
     public string Id = "";
     public EditType Etype;
     public double Begin_Time;
     public double End_Time;
     public int Rate;
     public double Clong;
 }
 public static List<Project> Projects = [];
 
 public async static void Delete_Video(string file)
{
    int pcount = Projects.Count;
    var proj = Projects.Where(d=>d.Etype==EditType.DeleteVideo).OrderBy(n=>n.Begin_Time).ToList();
    string arguments = "\"";

    int n = 0;
    if (proj[0].Begin_Time != 0)
    {
        arguments  = $"[0:v]trim=0:{proj[0].Begin_Time},setpts=PTS-STARTPTS[v0]; [0:a]atrim=0:{proj[0].Begin_Time},asetpts=PTS-STARTPTS[a0]; ";
        n  ;
    }

    for (int i = 0; i < pcount; i  )
    {
        if (i== pcount-1)
        {
            arguments  = $"[0:v]trim={proj[i].End_Time},setpts=PTS-STARTPTS[v{n}]; [0:a]atrim={proj[i].End_Time},asetpts=PTS-STARTPTS[a{n}]; "; 
        }
        else
        {
            arguments  = $"[0:v]trim={proj[i].End_Time}:{proj[i   1].Begin_Time},setpts=PTS-STARTPTS[v{n}]; [0:a]atrim={proj[i].End_Time}:{proj[i   1].Begin_Time},asetpts=PTS-STARTPTS[a{n}]; ";
        }
        n  ;
    }

    string sb = "";
    for (int i = 0; i < n; i  )
    {
        sb  = $"[v{i}][a{i}]";
    }
    sb  = $"concat=n={n}:v=1:a=1[outv][outa]\" -map \"[outv]\" -map \"[outa]\" ";

    arguments  = sb $"-c:v libx264 -preset veryslow -crf 18 -c:a aac -b:a 192k -movflags  faststart -y output.mp4";
    arguments = $"-i \"{file}\" -filter_complex "   arguments;
    
    var psi = new ProcessStartInfo
    {
        FileName = FFmpegPath,
        Arguments = arguments,
        UseShellExecute = false,
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        CreateNoWindow = true
    };
    
    var process = new Process { StartInfo = psi, EnableRaisingEvents = true };
    process.Start();

    while (!process.StandardError.EndOfStream)
    {
        var line = await process.StandardError.ReadLineAsync();
        if (line != null && line.Contains("time="))
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                //pw.File_Block.Text = line; // 进度
            });
        }
    }

    await process.WaitForExitAsync();
    Application.Current.Dispatcher.Invoke(() =>
    {
        pw.Close();
        SaveFileDialog sfd = new()
        {
            Filter = "视频文件(*.mp4)|*.mp4",
            FilterIndex = 1,
            RestoreDirectory = true,
            FileName = System.IO.Path.GetFileName("视频.mp4")
        };
        if (sfd.ShowDialog() == true)
        {
            File.Copy(Directory.GetCurrentDirectory()   @"\output.mp4", sfd.FileName, true);
        }
    });
}

实例下载地址

C#视频操作学习Tips(5) 音频、视频选择多段删除

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警