使用Mediacomposition的Mux音频和视频UWP

时间:2018-11-26 00:07:17

标签: c# uwp windows-10-universal

我正在尝试将视频与从youtube下载的音频acc合并,但是脚本使用100%的CPU冻结了我的计算机,结果文件的大小过大,例如:下载的音频和720p视频为总共80MB的转码视频将为400MB(对于720p和4K视频,应用崩溃)。

我试图复制下载的高清视频属性以从中创建一个 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();
    }

谢谢

编辑:

这里的问题是,对于720p及更高的视频渲染, CPU消耗为100%,如何避免这种情况,它将冻结我的机器!

1 个答案:

答案 0 :(得分:0)

MediaComposition. RenderToFileAsync(IStorageFile, MediaTrimmingPreference, MediaEncodingProfile)使用指示的媒体修剪首选项和编码配置文件将MediaComposition异步呈现到指定文件。

使用此方法将合成呈现到文件时,影响文件大小的唯一因素是第三个参数,即MediaEncodingProfile。 当您使用此类创建mp4文件时:

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

VideoEncodingQuality是一个枚举,不同的枚举类型值确定文件的不同编码,最终导致文件大小不同。 这是对不同枚举类型值的测试:

enter image description here

因此,当渲染到mp4文件时,请参考测试结果以选择合适的编码格式。