UWP 将位图集合制作成视频
UWP make a collection of bitmaps to a video
我选择了一些 jpg 图像并将这些图像添加到 MediaComposition(组合)。
有效。我得到了剪辑的数量。
private async void encodeImages_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
foreach (string extension in FileExtensions.Image)
{
openPicker.FileTypeFilter.Add(extension);
}
IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
composition = new MediaComposition();
foreach (StorageFile file in files)
{
m_files.Add(file);
var clip =await MediaClip.CreateFromImageFileAsync(file, TimeSpan.Zero);
composition.Clips.Add(clip);
}
Debug.WriteLine(composition.Clips.Count);
}
那我想用MediaComposition生成一个MediaStreamSource。
private void showVideo_Click(object sender, RoutedEventArgs e)
{
GC.Collect();
//FileSavePicker savePicker = new FileSavePicker();
//savePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
//savePicker.FileTypeChoices.Add("MP4 File", new List<string>() { ".mp4" });
//savePicker.SuggestedFileName = "output";
//StorageFile videoFile = await savePicker.PickSaveFileAsync();
//await composition.RenderToFileAsync(videoFile);
encodeImagesResult.Position = TimeSpan.Zero;
IMediaSource mediaStreamSource = composition.GeneratePreviewMediaStreamSource(400, 400);
encodeImagesResult.SetMediaStreamSource(mediaStreamSource);
}
会显示错误"The parameter is incorrect."
我的代码有什么问题?非常感谢!
这里的错误The parameter is incorrect.
是指MediaClip.CreateFromImageFileAsync method中的参数不正确。在该方法中,第二个参数originalDuration
表示视频片段中的图像显示多长时间。对于视频剪辑,其持续时间不能为零。
因此,要修复此错误,您可以编辑此行:
var clip =await MediaClip.CreateFromImageFileAsync(file, TimeSpan.Zero);
并将 TimeSpan
设置为您希望图像显示的值,例如:
var clip = await MediaClip.CreateFromImageFileAsync(file, TimeSpan.FromSeconds(1));
在此之后,您的代码应该可以工作了。
我选择了一些 jpg 图像并将这些图像添加到 MediaComposition(组合)。
有效。我得到了剪辑的数量。
private async void encodeImages_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
foreach (string extension in FileExtensions.Image)
{
openPicker.FileTypeFilter.Add(extension);
}
IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
composition = new MediaComposition();
foreach (StorageFile file in files)
{
m_files.Add(file);
var clip =await MediaClip.CreateFromImageFileAsync(file, TimeSpan.Zero);
composition.Clips.Add(clip);
}
Debug.WriteLine(composition.Clips.Count);
}
那我想用MediaComposition生成一个MediaStreamSource。
private void showVideo_Click(object sender, RoutedEventArgs e)
{
GC.Collect();
//FileSavePicker savePicker = new FileSavePicker();
//savePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
//savePicker.FileTypeChoices.Add("MP4 File", new List<string>() { ".mp4" });
//savePicker.SuggestedFileName = "output";
//StorageFile videoFile = await savePicker.PickSaveFileAsync();
//await composition.RenderToFileAsync(videoFile);
encodeImagesResult.Position = TimeSpan.Zero;
IMediaSource mediaStreamSource = composition.GeneratePreviewMediaStreamSource(400, 400);
encodeImagesResult.SetMediaStreamSource(mediaStreamSource);
}
会显示错误"The parameter is incorrect."
我的代码有什么问题?非常感谢!
这里的错误The parameter is incorrect.
是指MediaClip.CreateFromImageFileAsync method中的参数不正确。在该方法中,第二个参数originalDuration
表示视频片段中的图像显示多长时间。对于视频剪辑,其持续时间不能为零。
因此,要修复此错误,您可以编辑此行:
var clip =await MediaClip.CreateFromImageFileAsync(file, TimeSpan.Zero);
并将 TimeSpan
设置为您希望图像显示的值,例如:
var clip = await MediaClip.CreateFromImageFileAsync(file, TimeSpan.FromSeconds(1));
在此之后,您的代码应该可以工作了。