C# 如何以编程方式将M4A文件转换为MP3或WMA文件?

C# 如何以编程方式将M4A文件转换为MP3或WMA文件?,c#,.net,mp3,C#,.net,Mp3,您好 我试图找到一个免费的.NET库或一个命令行可执行文件,让我可以将M4A文件转换为MP3或WMA文件。请帮忙:)。找到了 也许还有其他的解决方案,但这是我一直在寻找的黄金 顺便说一句,我写了一篇关于幕后处理这件事的文章。这是非常糟糕的代码,但它完成了任务。很有趣。 指向命令行实用程序的链接。 如果您真的想通过编程实现这一点,您可能会对我在中找到的DLL版本感兴趣。不确定API描述是否随附…:-) 如果您知道正确的工具,这很简单: ffmpeg -i infile.m4a tmp.wav l

您好

我试图找到一个免费的.NET库或一个命令行可执行文件,让我可以将M4A文件转换为MP3或WMA文件。请帮忙:)。

找到了

也许还有其他的解决方案,但这是我一直在寻找的黄金

顺便说一句,我写了一篇关于幕后处理这件事的文章。这是非常糟糕的代码,但它完成了任务。

很有趣。
指向命令行实用程序的链接。

如果您真的想通过编程实现这一点,您可能会对我在中找到的DLL版本感兴趣。不确定API描述是否随附…:-)

如果您知道正确的工具,这很简单:

ffmpeg -i infile.m4a tmp.wav
lame tmp.wav outfile.mp3
这里是批处理版本(仅限Linux/Mac):

用于UWP

public class ConvertToMp3Manager
{
    public PrepareTranscodeResult PrepareTranscode = null;
    public MediaTranscoder TransCoder = null;
    public StorageFile SourceAudio { get; set; }
    public StorageFile DestinationAudio { get; set; }
    public AudioFormat AudioFormat { get; set; }
    public AudioEncodingQuality AudioQuality { get; set; }
    private MediaEncodingProfile profile = null;
    public  ConvertToMp3Manager(StorageFile sourceAudio, StorageFile destinationAudio, AudioFormat AudioType = AudioFormat.MP3, AudioEncodingQuality audioEncodingQuality = AudioEncodingQuality.High)
    {
        if (sourceAudio == null || destinationAudio == null)
            throw new ArgumentNullException("sourceAudio and destinationAudio cannot be null");
        switch (AudioType)
        {
            case AudioFormat.AAC:
            case AudioFormat.M4A:
                profile = MediaEncodingProfile.CreateM4a(audioEncodingQuality);
                break;
            case AudioFormat.MP3:
                profile = MediaEncodingProfile.CreateMp3(audioEncodingQuality);
                break;
            case AudioFormat.WMA:
                profile = MediaEncodingProfile.CreateWma(audioEncodingQuality);
                break;
        }
        this.SourceAudio = sourceAudio;
        this.DestinationAudio = destinationAudio;
        this.AudioFormat = AudioType;
        this.AudioQuality = audioEncodingQuality;
        this.TransCoder = new MediaTranscoder();
    }
    /// <summary>
    /// Return true if audio can be transcoded
    /// </summary>
    /// <returns></returns>
    public async Task<bool> ConvertAudioAsync()
    {
        PrepareTranscode = await this.TransCoder.PrepareFileTranscodeAsync(this.SourceAudio, this.DestinationAudio, profile);
        if (PrepareTranscode.CanTranscode)
        {
            var transcodeOp = PrepareTranscode.TranscodeAsync();
            return true;
        }
        else
            return false;
    }
    public static async Task<bool> ConvertAudioAsync(StorageFile sourceAudio, StorageFile destinationAudio, AudioFormat AudioType = AudioFormat.MP3, AudioEncodingQuality audioEncodingQuality = AudioEncodingQuality.High)
    {
        ConvertToMp3Manager convertToMp3Manager = new ConvertToMp3Manager(sourceAudio, destinationAudio, AudioType, audioEncodingQuality);
        var success = await convertToMp3Manager.ConvertAudioAsync();
        return success;
    }
}
public enum AudioFormat
{
    MP3,
    AAC,
    M4A,
    WMA
}
公共类转换器管理器
{
public PrepareTranscodeResult PrepareTranscode=null;
公共媒体转码器转码器=null;
public StorageFile SourceAudio{get;set;}
公共存储文件DestinationAudio{get;set;}
公共AudioFormat AudioFormat{get;set;}
公共AudioEncodingQuality AudioQuality{get;set;}
私有MediaEncodingProfile=null;
公共转换器P3Manager(存储文件源音频、存储文件目标音频、AudioFormat AudioType=AudioFormat.MP3、AudioEncodingQuality AudioEncodingQuality=AudioEncodingQuality.High)
{
如果(sourceAudio==null | | destinationAudio==null)
抛出新ArgumentNullException(“sourceAudio和destinationAudio不能为null”);
开关(音频型)
{
case AudioFormat.AAC:
case AudioFormat.M4A:
profile=MediaEncodingProfile.CreateM4a(音频编码质量);
打破
case AudioFormat.MP3:
profile=MediaEncodingProfile.CreateMp3(音频编码质量);
打破
case AudioFormat.WMA:
profile=MediaEncodingProfile.CreateWma(音频编码质量);
打破
}
this.SourceAudio=SourceAudio;
this.DestinationAudio=DestinationAudio;
this.AudioFormat=AudioType;
this.AudioQuality=音频编码质量;
this.TransCoder=新的MediaTranscoder();
}
/// 
///如果可以对音频进行转码,则返回true
/// 
/// 
公共异步任务ConvertAudioAsync()
{
PrepareTranscode=等待this.TransCoder.PrepareFileTranscodeSync(this.SourceAudio,this.DestinationAudio,profile);
if(准备转换代码.CanTranscode)
{
var transcode=PrepareTranscode.transcode异步();
返回true;
}
其他的
返回false;
}
公共静态异步任务转换器AudioAsync(存储文件源音频、存储文件目标音频、AudioFormat AudioType=AudioFormat.MP3、AudioEncodingQuality AudioEncodingQuality=AudioEncodingQuality.High)
{
ConvertToMp3Manager ConvertToMp3Manager=新的ConvertToMp3Manager(sourceAudio、destinationAudio、AudioType、audioEncodingQuality);
var success=等待convertToMp3Manager.ConvertAudioAsync();
回归成功;
}
}
公共枚举音频格式
{
MP3,
AAC,
M4A,
WMA
}

这是可行的,但由于调用PrepareTranscode.TranscodeAync()时缺少wait运算符,我遇到了奇怪的错误和太短的mp3文件。因此,如果您计划使用此代码,请包含wait。
string fileName = @"e:\Down\test.wmv";
DsConvert.ToWma(fileName, fileName + ".wma", DsConvert.WmaProfile.Stereo128);
public class ConvertToMp3Manager
{
    public PrepareTranscodeResult PrepareTranscode = null;
    public MediaTranscoder TransCoder = null;
    public StorageFile SourceAudio { get; set; }
    public StorageFile DestinationAudio { get; set; }
    public AudioFormat AudioFormat { get; set; }
    public AudioEncodingQuality AudioQuality { get; set; }
    private MediaEncodingProfile profile = null;
    public  ConvertToMp3Manager(StorageFile sourceAudio, StorageFile destinationAudio, AudioFormat AudioType = AudioFormat.MP3, AudioEncodingQuality audioEncodingQuality = AudioEncodingQuality.High)
    {
        if (sourceAudio == null || destinationAudio == null)
            throw new ArgumentNullException("sourceAudio and destinationAudio cannot be null");
        switch (AudioType)
        {
            case AudioFormat.AAC:
            case AudioFormat.M4A:
                profile = MediaEncodingProfile.CreateM4a(audioEncodingQuality);
                break;
            case AudioFormat.MP3:
                profile = MediaEncodingProfile.CreateMp3(audioEncodingQuality);
                break;
            case AudioFormat.WMA:
                profile = MediaEncodingProfile.CreateWma(audioEncodingQuality);
                break;
        }
        this.SourceAudio = sourceAudio;
        this.DestinationAudio = destinationAudio;
        this.AudioFormat = AudioType;
        this.AudioQuality = audioEncodingQuality;
        this.TransCoder = new MediaTranscoder();
    }
    /// <summary>
    /// Return true if audio can be transcoded
    /// </summary>
    /// <returns></returns>
    public async Task<bool> ConvertAudioAsync()
    {
        PrepareTranscode = await this.TransCoder.PrepareFileTranscodeAsync(this.SourceAudio, this.DestinationAudio, profile);
        if (PrepareTranscode.CanTranscode)
        {
            var transcodeOp = PrepareTranscode.TranscodeAsync();
            return true;
        }
        else
            return false;
    }
    public static async Task<bool> ConvertAudioAsync(StorageFile sourceAudio, StorageFile destinationAudio, AudioFormat AudioType = AudioFormat.MP3, AudioEncodingQuality audioEncodingQuality = AudioEncodingQuality.High)
    {
        ConvertToMp3Manager convertToMp3Manager = new ConvertToMp3Manager(sourceAudio, destinationAudio, AudioType, audioEncodingQuality);
        var success = await convertToMp3Manager.ConvertAudioAsync();
        return success;
    }
}
public enum AudioFormat
{
    MP3,
    AAC,
    M4A,
    WMA
}