c# 将amr的文件转码为mp3的文件格式

个人在使用中的整理
要转码这个文件需要用到外部的一个插件那就是:ffmpeg.exe
将这个插件添加到你的项目中

//获取文件的本地地址:System.AppDomain.CurrentDomain.BaseDirectory

/// <summary>
        /// 将amr转为mp3的格式
        ////pathBefore:转换之前的文件的路径
        ////pathLater:转换之后的文件要存放的地址
        /// </summary>
        public static string ConvertToMp3(string pathBefore, string pathLater)
        {
            string changePath = MapPath("/ffmpeg/");
            string AfterFileName = changePath.Replace("\\bin\\x64\\Debug\\", "\\");//去掉编译生成的文件,会对ffmpeg.exe的路径有影响
            string allPath = AfterFileName + @"ffmpeg.exe -i " + pathBefore + " " + pathLater;
            string str = RunCmd(allPath);
            return str;
        }

        /// <summary>
        /// 执行Cmd命令
        /// </summary>
        public static string RunCmd(string c)
        {
            try
            {
                string output;
                using (Process p = new Process())
                {
                    p.StartInfo.FileName = "cmd.exe";
                    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(c+ "&exit");
                    p.StandardInput.AutoFlush = true;
                    //获取cmd窗口的输出信息
                    output = p.StandardOutput.ReadToEnd();
                    p.WaitForExit();//等待程序执行完退出进程
                    p.Close();
                }
                return output;
            }
            catch (Exception ex)
            {
                return "error" + ex.Message;
            }
        }

注意
转码前和转码后的文件地址都是真实存在的,如,我是用vs2017 +c#实现的,但是有的文件夹是编译的过程中才生成的所以文件路径要注意,在定位ffmpeg.exe 在项目中的位置时,路径中不要出现编译的时候才会生成的文件的路径
这个方法可以完成文件的转码不过有个问题我还没有解决
问题
我是先将文件从文件服务器上面下载下来,然后一个一个进行转码,但是每次都只转成功一个问题,执行到RunCmd中的这句时,output = p.StandardOutput.ReadToEnd();就不会在继续执行后面的循环了
那位大神知道解决方案,欢迎留言。

展开阅读全文

没有更多推荐了,返回首页