Mux аудио и видео UWP с использованием Mediacomposition - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь объединить видео со звуком, загруженным с YouTube, но скрипт зависает на моей машине, используя 100% моего процессора, и файл результата слишком велик, например: загруженное аудио и видео 720pв общей сложности 80 МБ транскодированного видео будет 400 МБ (для 720p и для 4K-видео сбой приложения).

Я попытался скопировать загруженные свойства HD-видео, чтобы создать из него MediaEncodingProfile , но это не работает, все, что я получаю, это пиксельное видео, зная, что загруженное видео HD 720.вот код:

public IAsyncOperation<IStorageFile> MergeAudioandVideoHDAsync(StorageFile videoFile, StorageFile audioFile, string finalFileName, StorageFolder destinationFolder)
    {
        return Task.Run<IStorageFile>(async () =>
        {
            IStorageFile _OutputFile = await destinationFolder.CreateFileAsync(finalFileName, CreationCollisionOption.GenerateUniqueName);
            MediaComposition _MediaComposition = new MediaComposition();
            var clip = await MediaClip.CreateFromFileAsync(videoFile);
            _MediaComposition.Clips.Add(clip);
            //Adding Background Audio Track
            _MediaComposition.BackgroundAudioTracks.Add(await BackgroundAudioTrack.CreateFromFileAsync(audioFile));
            MediaEncodingProfile _MediaEncodingProfile =  MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
            TranscodeFailureReason _TranscodeFailureReason = await _MediaComposition.RenderToFileAsync(_OutputFile, MediaTrimmingPreference.Fast, _MediaEncodingProfile);

            if (_TranscodeFailureReason != TranscodeFailureReason.None)
            {
                throw new Exception("Video Concatenation Failed: " + _TranscodeFailureReason.ToString());
            }
            return _OutputFile;

        }).AsAsyncOperation();
    }

Спасибо

РЕДАКТИРОВАТЬ:

Проблема здесь заключается в потребление ресурсов процессора при 100% для видео рендеринга 720p и выше, как этого избежать, он замораживает мою машину!

1 Ответ

0 голосов
/ 26 ноября 2018

MediaComposition.RenderToFileAsync (IStorageFile, MediaTrimmingPreference, MediaEncodingProfile) асинхронно отображает MediaComposition в указанный файл, используя указанные предпочтения обрезки медиа-данных и профиль кодирования.

При использовании этого метода для визуализации композиции в файл, единственный факторНа размер файла влияет третий параметр: MediaEncodingProfile .И когда вы используете этот класс для создания файла mp4:

  MediaEncodingProfile _MediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

VideoEncodingQuality - это перечисление, различные значения перечисляемого типа определяют разные кодировки файла, что в конечном итоге приводит к различным размерамфайла.Вот тест значений различных перечислимых типов:

enter image description here

Поэтому, пожалуйста, обратитесь к результату тестирования, чтобы выбрать подходящий формат кодирования при рендеринге в mp4файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...