Транскодируйте аудио из стерео .mp4 файла в моно WAV 16 кГц, используя MediaComposition - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь использовать API Media Composition и Windows.Media.Transcoding для автоматического преобразования звуковой дорожки из некоторых файлов .mp4, которые у меня есть, в моно PCM WAV аудио на 16 кГц, чтобы использовать когнитивные сервисы Microsoft Speech (речь текст).

У меня есть образец аудиофайла с нужным MEdiaEncodingProfile, и я использую MediaEncodingProfile.CreateFromFileAsync(sampleAudio).

После этого я настраиваю транскодер и затем использую

PrepareTranscodeResult prepareOp = await transcoder.PrepareFileTranscodeAsync(SourceVideo.VideoFile, tempFile, profile);

... но это приводит к prepareOp.CanTranscode = false, так как я не думаю, что могу напрямую перекодировать .mp4 в аудиофайл.

Можно ли мне просто взять ссылку на левую звуковую дорожку в файле .mp4 и затем преобразовать ее в файл wav?

1 Ответ

0 голосов
/ 14 мая 2018

, но это приводит к prepareOp.CanTranscode = false, поскольку я не думаю, что могу напрямую перекодировать .mp4 в аудиофайл.

На самом деле, вы можете конвертировать видео в аудио напрямую с MediaTranscoder.Вы можете сослаться на следующее, и это работает в моем тесте.

MediaEncodingProfile profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.Low);
MediaTranscoder transcoder = new MediaTranscoder();
PrepareTranscodeResult prepareOp = await
    transcoder.PrepareFileTranscodeAsync(source, destination, profile);
if (prepareOp.CanTranscode)
{
    var transcodeOp = prepareOp.TranscodeAsync();

    transcodeOp.Progress +=
        new AsyncActionProgressHandler<double>(TranscodeProgress);
    transcodeOp.Completed +=
        new AsyncActionWithProgressCompletedHandler<double>(TranscodeComplete);
}
else
{
    switch (prepareOp.FailureReason)
    {
        case TranscodeFailureReason.CodecNotFound:
            System.Diagnostics.Debug.WriteLine("Codec not found.");
            break;
        case TranscodeFailureReason.InvalidProfile:
            System.Diagnostics.Debug.WriteLine("Invalid profile.");
            break;
        default:
            System.Diagnostics.Debug.WriteLine("Unknown failure.");
            break;
    }
}

Единственное отличие состоит в том, что MediaEncodingProfile создается с MediaEncodingProfile.CreateWav(AudioEncodingQuality.Low), а не с sampleAudio.И я тоже попробовал кастом PCM AudioEncodingProperties но он не работает.Я предлагаю вам использовать внутренний профиль.

...