我正在尝试将视频与从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%,如何避免这种情况,它将冻结我的机器!
答案 0 :(得分:0)
MediaComposition. RenderToFileAsync(IStorageFile, MediaTrimmingPreference, MediaEncodingProfile)使用指示的媒体修剪首选项和编码配置文件将MediaComposition异步呈现到指定文件。
使用此方法将合成呈现到文件时,影响文件大小的唯一因素是第三个参数,即MediaEncodingProfile。 当您使用此类创建mp4文件时:
MediaEncodingProfile _MediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
VideoEncodingQuality是一个枚举,不同的枚举类型值确定文件的不同编码,最终导致文件大小不同。 这是对不同枚举类型值的测试:
因此,当渲染到mp4文件时,请参考测试结果以选择合适的编码格式。