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)); 

在此之后,您的代码应该可以工作了。