本文介绍三种方法
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();