//视频转码
private void VideoConverter()
{
filelen = 0;
ListView lv = listView1;
for (int i = 0; i < lv.Items.Count; i++)
{
if (lv.Items[i].SubItems[3].Text != "已完成")
{
Process p = new Process();
p.StartInfo.FileName = path + "ffmpeg";
//p.StartInfo.FileName = path + "ffmpeg.exe";
p.StartInfo.UseShellExecute = false;
string srcFileName = "";
string destFileName = "";
string newFileName = "";
string mbgs = "." + comboBox2.SelectedItem.ToString();
srcFileName = lv.Items[i].SubItems[1].Text;
newFileName = lv.Items[i].SubItems[0].Text.Split('.')[0];
destFileName = "\"" + label3.Text + "\\" + newFileName + DateTime.Now.ToString("yyyyMMddhhmmss");
p.StartInfo.Arguments = "-i " + srcFileName + " -y -vcodec h264 -b 500000 " + destFileName + mbgs + "\""; //执行参数
p.StartInfo.UseShellExecute = false; 不使用系统外壳程序启动进程
p.StartInfo.CreateNoWindow = true; //不显示dos程序窗口
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中
p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.StartInfo.UseShellExecute = false;
p.Start();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.BeginErrorReadLine();//开始异步读取
p.WaitForExit();//阻塞等待进程结束
p.Close();//关闭进程
p.Dispose();//释放资源
setState(i);//更新文件状态
filelen += 1;//已转换文件数量
}
}
}
下面是压缩前后的文件大小及画质对比
压缩前
压缩后