2008-09-27 6 views

ответ

4

Найденный!

http://pieter.wigleven.com/it/archives/3

Там могут быть и другие решения, но это золото за то, что я искал.

P.S. Я написал a .NET DLL, который обрабатывает это за кадром. Это довольно ужасный код, но он выполняет свою работу.

0

Интересно.
Ссылка, которую вы указываете на утилиту командной строки.
Если вы действительно хотите сделать это программно, вас может заинтересовать версия DLL, найденная мной по адресу Rarewares. Не уверен, что если описание API с ним приходит ... :-)

1

Это просто, если вы знаете правильные инструменты:

ffmpeg -i infile.m4a tmp.wav 
lame tmp.wav outfile.mp3 

Здесь пакетный вариант (только извините Linux/Mac):

#!/bin/bash 

n=0 
maxjobs=3 

for i in *.m4a ; do 
    ffmpeg -i "$i" "$TMP/${i%m4a}wav" 
    (lame "$TMP/${i%m4a}wav" "${i%m4a}mp3" ; rm "$TMP/${i%m4a}wav") & 

    # limit jobs 
    if (($(($((++n)) % $maxjobs)) == 0)) ; then 
     wait 
    fi 

done 
0

Для 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 
}