namespace qiem3u8 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); //ofd.Filter = "MP4文件(*.xls;*.xlsx)|*.xls;*.xlsx|所有文件|*.*"; ofd.Filter = "MP4文件(*.mp4;*.MP4)|*.mp4;*.MP4"; ofd.ValidateNames = true; ofd.CheckPathExists = true; ofd.CheckFileExists = true; if (ofd.ShowDialog() == DialogResult.OK) { string strFileName = ofd.FileName; txtfilepath.Text = strFileName; qiepianfilelujing.Text = ""; } } /// <summary> /// 执行cmd命令 /// </summary> /// <param name="commandText"></param> /// <returns></returns> public string ExeCommand(string commandText) { Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = false; p.StartInfo.CreateNoWindow = true; string strOutput = null; try { p.Start(); p.StandardInput.WriteLine(commandText); p.StandardInput.WriteLine("exit"); strOutput = p.StandardOutput.ReadToEnd(); p.WaitForExit(); p.Close(); } catch (Exception e) { strOutput = e.Message; } return strOutput; } public void RunCmd(string ffmpegPath,string param, out string output) { //string CmdPath = @"C:\Windows\System32\cmd.exe"; //cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态 using (Process p = new Process()) { p.StartInfo.FileName = ffmpegPath; p.StartInfo.Arguments = param; p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动 //p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息 //p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息 //p.StartInfo.RedirectStandardError = true; //重定向标准错误输出 p.StartInfo.CreateNoWindow = true; //不显示程序窗口 p.Start();//启动程序 //向cmd窗口写入命令 //p.StandardInput.WriteLine(cmd); //p.StandardInput.AutoFlush = true; output = ""; //获取cmd窗口的输出信息 //output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//等待程序执行完退出进程 p.Close(); } } private void btnqiepian_Click(object sender, EventArgs e) { string _qiepianfilelujing = qiepianfilelujing.Text; if (string.IsNullOrEmpty(_qiepianfilelujing) == true) { //开始切片 btnqiepian.Enabled = false; btnqiepian.Text = "处理中"; string strFileName = txtfilepath.Text; string rootpath = System.Windows.Forms.Application.StartupPath; string app_path = rootpath + "\\ffmpeg"; //其他代码 //txtfilepath.Text = strFileName + "|" + app_path; string FFmpegPath = rootpath + "\\ffmpeg.exe"; //创建目录 var uuidN = Guid.NewGuid().ToString("N");//创建文件目录 string outfilemulu = rootpath + "\\outm3u8\\" + uuidN + "\\"; if (!Directory.Exists(outfilemulu)) { Directory.CreateDirectory(outfilemulu);//创建目录 } //输出的文件路径 string outfilepath = outfilemulu + "playlist.m3u8"; //string str = ""; //string outputstr = HttpContext.Current.Request.MapPath(_pcm); //string outputwav = HttpContext.Current.Request.MapPath(_wav); //string pcm = outputstr; //string wav = outputwav; ////一种转换cheng ////string zhuanmatools = "e:\\zm\\ffmpeg.exe -f s16le -v 8 -y -ar 16000 -ac 1 -i "; ////ffmpeg -f s16le -ar 12000 -ac 2 -i e:\zm\web\vd\444.pcm -f wav -ar 16000 -ac 1 e:\zm\web\vd\444.wav //string mingling = PubConstant.Pan + ":\\www\\chuliSilk\\ffmpeg\\ffmpeg.exe"; //str = string.Format("{0} -f s16le -ar 12000 -ac 2 -i {1} -f wav -ar 16000 -ac 1 {2}", mingling, pcm, wav); //e://m3u8/ffmpeg -i e://m3u8/1.mp4 -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_list e://m3u8/100001/out.m3u8 -segment_time 10 e://m3u8/100001/out%03d.ts //https://blog.csdn.net/cctvcqupt/article/details/80695879?utm_source=blogxgwz4 string run_str = string.Format("-i {0} -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_list {1} -segment_time 10 {2}/out%03d.ts", strFileName, outfilepath, outfilemulu); string outmsg = ""; RunCmd(FFmpegPath,run_str, out outmsg); lblmsg.Text = "切片完成"; btnqiepian.Enabled = true; btnqiepian.Text = "开始切片"; qiepianfilelujing.Text = outfilepath; txtmulu.Text = outfilemulu; } else { MessageBox.Show("次文件已切片"); } } } }