c# m4a文件转mp3文件 【.net】

  • Post author:
  • Post category:其他


我的需求是手机上传录音。客户因手机上传的文件是m4a录音文件,按需求方要求,只要是m4a文件统一转成mp3格式上传,并且保留m4a格式文件。这两种方法跟自己业务有关,希望能帮到相同业务需求的朋友

第一个方法:

直接改后缀名,这种编码格式肯定有问题,如果只是电脑播放的话,应该没啥问题,其他平台播放可能兼容不好,或者对音频音段有要求的也不行。

第二种方法:

工具下载地址:

百度网盘 请输入提取码

提取码:xi9f

正经转换为mp3格式,那就使用到ffmpeg.exe工具转换。


下面两个方法只是转文件的方法,

与业务无关(如果只是转格式只需看这里)

。上代码

调用:

static void Main(string[] args)

{

var exePath = @”D:\desktop\M4aToMp3\M4aToMp3\ffmpeg.exe”;  //转换工具地址

var m4aPath = @”D:\desktop\M4aToMp3\M4aToMp3\files\qwe.m4a”; //源文件地址,不知道为啥复制过来的路径不好使,但是得纯手打才管用

var mp3Path = @”D:\desktop\M4aToMp3\M4aToMp3\files\qwe.mp3″; //转换目标地址可直接命名自定义文件名

var result = ConvertAudio(exePath, m4aPath, mp3Path); //转换

}

/// <summary>

/// 音频运行格式转换( .m4a => .mp3 )

/// </summary>

/// <param name=”ffmpegVirtualPath”>ffmpeg.exe本地文件的存放路径</param>

/// <param name=”sourceFile”>m4a源文件物理路径</param>

/// <param name=”fileVirtualPath”>mp3目标文件虚拟路径</param>

/// <returns></returns>

public static string ConvertAudio(string ffmpegVirtualPath, string sourceFile, string fileVirtualPath)

{


//取得ffmpeg.exe的物理路径

string ffmpeg = ffmpegVirtualPath;

if (!File.Exists(ffmpeg))

{


return “找不到格式转换程序!”;

}

if (!File.Exists(sourceFile))

{


return “找不到源文件!”;

}

string destFile = fileVirtualPath;

System.Diagnostics.ProcessStartInfo FilestartInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);

FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

/*ffmpeg参数说明

* -i 1.avi   输入文件

* -ab/-ac <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换

均默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上

* -ar <采样率> 设定声音采样率,PSP只认24000

* -b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的   –加了以后转换不正常

* -r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)

* s 320×240 指定分辨率

* 最后的路径为目标文件

*/

//FilestartInfo.Arguments = ” -i ” + sourceFile + ” -vn -ar 8 -ac 2 -ab 192 -f mp3 ” + destFile;

FilestartInfo.Arguments = ” -i ” + sourceFile + ” -f mp3 ” + destFile;

try

{


//转换

System.Diagnostics.Process process = System.Diagnostics.Process.Start(FilestartInfo);

process.StartInfo.UseShellExecute = false;

process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.RedirectStandardInput = true;

StreamWriter q1 = process.StandardInput;

StreamReader q2 = process.StandardOutput;

}

catch (Exception ex)

{


return “格式转换失败!”;

}

return “格式转换成功!”;

}



版权声明:本文为qq_39788123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。