基于C# ffmpeg视频提取帧

本文介绍三种方法

                Process startInfo = new Process();
                startInfo.StartInfo.FileName = ffmpeg;//ffmpeg.exe绝对路径
                startInfo.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                string type = this.ZhenGetTypeComboBox.Text;//提取方式
                switch (type)
                {
                    case "每秒截取一帧":
                        startInfo.StartInfo.Arguments = " -i " + "\"" + this.openFileDialog1.FileName + "\""  //视频路径
                                      + " -r 1"  //提取图片的频率(每秒一帧)
                                      + " -y -f image2 -ss " + 0   //设置开始获取帧的视频时间
                                      + " " + ((ZhenText.Text != null && ZhenText.Text != "") ? " -vframes " + ZhenText.Text : "") //截图的帧数
                                      + " -t " + GetTimelen(dirInfo["Duration"])//截取持续时间(默认是视频全部时长)
                                      + " " + ((FenBianComboBox.Text != null && FenBianComboBox.Text != "默认") ? " -s " + FenBianComboBox.Text : "") //设置图片的分辨率
                                      + @" " + "\"" + OutText.Text + @"\" + Path.GetFileNameWithoutExtension(this.openFileDialog1.FileName) + "-%d.jpg\"";  //输出的文件名
                        break;
                    case "间隔时间":
                        string jianGeTime = this.JianGeText.Text;
                        startInfo.StartInfo.Arguments = " -i " + "\"" + this.openFileDialog1.FileName + "\""  //视频路径
                                     + " -r " + Convert.ToDouble(1.0 / Convert.ToDouble(jianGeTime))  //提取图片的频率(每秒一帧)
                                     + " -y -f image2 -ss " + 0   //设置开始获取帧的视频时间
                                     + " " + ((ZhenText.Text != null && ZhenText.Text != "") ? " -vframes " + ZhenText.Text : "") //截图的帧数
                                     + " -t " + GetTimelen(dirInfo["Duration"])//截取持续时间(默认是视频全部时长)
                                     + " " + ((FenBianComboBox.Text != null && FenBianComboBox.Text != "默认") ? " -s " + FenBianComboBox.Text : "") //设置图片的分辨率
                                     + @" " + "\"" + OutText.Text + @"\" + Path.GetFileNameWithoutExtension(this.openFileDialog1.FileName) + "-%d.jpg\"";  //输出的文件名
                        break;
                    case "间隔帧":
                        string jianGeZhen = this.JianGeText.Text;
                        startInfo.StartInfo.Arguments = " -i " + "\"" + this.openFileDialog1.FileName + "\""  //视频路径
                                     + " " + "-vf \"" + @"select = not(mod(n\, " + jianGeZhen + @"))" + "\" -vsync 0"
                                     + " -y -f image2 -ss " + 0   //设置开始获取帧的视频时间
                                     + " " + ((ZhenText.Text != null && ZhenText.Text != "") ? " -vframes " + ZhenText.Text : "") //截图的帧数
                                     + " -t " + GetTimelen(dirInfo["Duration"])//截取持续时间(默认是视频全部时长)
                                     + " " + ((FenBianComboBox.Text != null && FenBianComboBox.Text != "默认") ? " -s " + FenBianComboBox.Text : "") //设置图片的分辨率
                                     + @" " + "\"" + OutText.Text + @"\" + Path.GetFileNameWithoutExtension(this.openFileDialog1.FileName) + "-%d.jpg\"";  //输出的文件名
                        break;
                }

                //是否使用操作系统shell启动
                startInfo.StartInfo.UseShellExecute = false;
                startInfo.StartInfo.RedirectStandardOutput = true;
                startInfo.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中
                startInfo.StartInfo.CreateNoWindow = true; //不显示程序窗口
                //startInfo.StartInfo.StandardOutputEncoding = Encoding.UTF8;设置进程输出流编码格式(没有成功)

                startInfo.Start();//启动进程
                startInfo.WaitForExit();//等待执行结束后退出
                //string output = null;
                //StreamReader srOutput = null;
                //srOutput = startInfo.StandardError;//获取输出流

                //output = srOutput.ReadToEnd();//转换成string
                startInfo.Close();
                startInfo.Dispose();
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值