现在位置首页 / 项目实战 /正文

C# 使用ffmpeg.exe进行音频转换完整demo

作者: IT小兵 | 2014年9月2日| 热度:℃ | 评论: |参与:

今天在处理微信的开发接口时候,发现微信多媒体上传接口中返回的音频格式是amr。坑人的是现在大部分的web 播放器,不支持amr的格式播放。试了很多方法都不行。

没办法,只要找一个妥协的解决方案:将amr转换成mp3再进行播放。

于是,我在网上找了不少的音频转换方案,其中有DIrectshow和 ffmpeg。DIrectshow使用起来比较复杂,我就采用ffmpeg。通过调用ffmpeg.exe传递命令参数的方式,进行音频格式的转换。

该程序,主要是封装了调用ffmpeg.exe,并执行命令参数的功能。

核心代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace WavConvertAmr
{
    public class WavConvertToAmr
    {
        /// <summary>
        /// 将Wav音频转成Amr手机音频
        /// </summary>
        /// <param name="applicationPath">ffmeg.exe文件路径</param>
        /// <param name="fileName">WAV文件的路径(带文件名)</param>
        /// <param name="targetFilName">生成目前amr文件路径(带文件名)</param>
        public void ConvertToAmr(string applicationPath, string fileName, string targetFilName)
        {
            string c = applicationPath + @"\ffmpeg.exe -y -i " + fileName + " -ar 8000 -ab 12.2k -ac 1 " + targetFilName;
            Cmd(c);
        }
        /// <summary>
        /// 执行Cmd命令
        /// </summary>
        private void Cmd(string c)
        {
            try
            {
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                process.StartInfo.FileName = "cmd.exe";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardInput = true;
                process.Start();
                process.StandardInput.WriteLine(c);
                process.StandardInput.AutoFlush = true;
                process.StandardInput.WriteLine("exit");
                StreamReader reader = process.StandardOutput;//截取输出流           
                process.WaitForExit();
            }
            catch
            { }
        }
        /// <summary>
        /// 获取文件的byte[]
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public byte[] GetFileByte(string fileName)
        {
            FileStream pFileStream = null;
            byte[] pReadByte = new byte[0];
            try
            {
                pFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                BinaryReader r = new BinaryReader(pFileStream);
                r.BaseStream.Seek(0, SeekOrigin.Begin);    //将文件指针设置到文件开
                pReadByte = r.ReadBytes((int)r.BaseStream.Length);
                return pReadByte;
            }
            catch
            {
                return pReadByte;
            }
            finally
            {
                if (pFileStream != null)
                    pFileStream.Close();
            }
        }
        /// <summary>
        /// 将文件的byte[]生成文件
        /// </summary>
        /// <param name="pReadByte"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public bool writeFile(byte[] pReadByte, string fileName)
        {
            FileStream pFileStream = null;
            try
            {
                pFileStream = new FileStream(fileName, FileMode.OpenOrCreate);
                pFileStream.Write(pReadByte, 0, pReadByte.Length);
            }
            catch
            {
                return false;
            }
            finally
            {
                if (pFileStream != null)
                    pFileStream.Close();          
            }
            return true;
        }
    }     
}

调用代码:

        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            if (open.ShowDialog() == DialogResult.OK)
            {
                string fileName = open.FileName;
                string targetFileName = "C:\\2222.mp3";
                WavConvertAmr.WavConvertToAmr toamr = new WavConvertAmr.WavConvertToAmr();
                toamr.ConvertToAmr(System.Windows.Forms.Application.StartupPath, fileName, targetFileName);
                MessageBox.Show("转换成功");
            }
        }

完整代码百度网盘下载地址:

链接:http://pan.baidu.com/s/1jGxa4M6   密码:bnqw

点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:[email protected]

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:[email protected]

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询