ffmpeg合并视频功能

合并视频,文件为几MB的视频合并没有问题,大文件没有声音。等以后找到方法在补充。 或者谁知道怎么解决,求指教!!!

ffmpeg官方地址http://www.ffmpeg.org/download.html

//打开文件夹选择视频
private void Button1_Click(object sender, EventArgs e)
    {
        var f = new OpenFileDialog();
        if (f.ShowDialog() == DialogResult.OK)
        {
            String filepath = f.FileName;//G:\新建文件夹\新建文本文档.txt                
            String filename = f.SafeFileName;//新建文本文档.txt                
            this.textBox1.Text = filepath;
        }
    }

//合并按钮
    private void Button4_Click(object sender, EventArgs e)
    {
        //合并后的地址
        string newPath = " D:\\Video\\abc.mp4";
        List fileList = new List();
        fileList.Add(textBox1.Text);//选择的文件1地址
        fileList.Add(textBox2.Text);//选择的文件2地址
        fileList.Add(textBox3.Text);//选择的文件3地址
        MergeVideoService.MergeVideo(progressBar1, newPath, fileList.ToArray());
        //Combine(textBox1.Text, textBox2.Text, textBox3.Text, newPath);
        label1.Text = "合并后的地址:" + newPath;
    }

 /// 
    /// 合并两个或多个视频
    /// 
    /// 进度条
    /// 合并后的视频路径
    /// 要合并的视频文件路径数组
    /// 
    public static bool MergeVideo(ProgressBar progressBar, string mergeFilePath, params string[] filePaths)
    {
     if (filePaths == null || filePaths.Length < 2) return false;
     	//进度条设置
        progressBar.Maximum = 100;//设置最大长度值
        progressBar.Value = 0;//设置初始值为0
        progressBar.Step = 90 / filePaths.Length;//设置每次增长多少
      	//转换后文件名list
        List strTmpList = new List();
        Process p = new Process();
        foreach (string item in filePaths)
        {
         //文件转换为.ts文件
            string strTmp = Path.ChangeExtension(item, "ts");
            strTmpList.Add(strTmp);
             string strCmdItem = " -i " + item + " -vcodec copy -acodec copy -vbsf h264_mp4toannexb " + strTmp + " -y ";
           //转换文件类型,由于不是所有类型的视频文件都支持直接合并,需要先转换格式
            p = new System.Diagnostics.Process();
            //要执行的程序名称 
            p.StartInfo.FileName = "ffmpeg.exe";
            p.StartInfo.Arguments = " " + strCmdItem;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = false;//可能接受来自调用程序的输入信息 
            p.StartInfo.RedirectStandardOutput = false;//由调用程序获取输出信息 
            p.StartInfo.RedirectStandardError = false;//重定向标准错误输出
            p.StartInfo.CreateNoWindow = true;//不显示程序窗口 
            p.Start();//启动程序 
            p.WaitForExit();
            progressBar.Value += progressBar.Step;
        }
        //合并命令的拼写
        string strCmd = "-i concat:\"";
        foreach (string tmp in strTmpList)
        {
            strCmd += tmp + "|";
        }
        string cmd = strCmd;
        strCmd = cmd.Substring(0, cmd.Length - 1);
        strCmd += "\" -vcodec copy -acodec copy " + mergeFilePath + " -y";
      	//合并
        p = new System.Diagnostics.Process();
        p.StartInfo.FileName = "ffmpeg.exe";//要执行的程序名称 
        p.StartInfo.Arguments = " " + strCmd;
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = false;//可能接受来自调用程序的输入信息 
        p.StartInfo.RedirectStandardOutput = false;//由调用程序获取输出信息 
        p.StartInfo.RedirectStandardError = false;//重定向标准错误输出
        p.StartInfo.CreateNoWindow = true;//不显示程序窗口 
        p.Start(); //启动程序 
        p.WaitForExit();//阻塞等待进程结束
        progressBar.Value = 100;
        p.Close();//关闭进程
        p.Dispose();//释放资源
        foreach (string tmp in strTmpList)
        {
            //删除后缀.ts文件
            if (File.Exists(tmp))
            {
                File.Delete(tmp);
            }
        }
         return true;
        }

你可能感兴趣的:(ffmpeg合并视频功能)