public async Task <BitmapImage> GetThumbnailAsync(string mediaGroupName)
        {
            BitmapImage      image             = null;
            StorageFile      mediaGroupCMPFile = null;
            MediaComposition mediaComposition  = null;
            var dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;

            try
            {
                await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
                {
                    image = new BitmapImage();
                    image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;

                    mediaGroupCMPFile = await localFolder.GetFileAsync(mediaGroupName + ".cmp");
                    mediaComposition  = await MediaComposition.LoadAsync(mediaGroupCMPFile);

                    await image.SetSourceAsync(await mediaComposition.GetThumbnailAsync(
                                                   TimeSpan.Zero, 0, 0, VideoFramePrecision.NearestFrame));
                });

                return(image);
            }
            catch (Exception e)
            {
                return(null);
            }
        }
Ejemplo n.º 2
0
        //从文件加载组合
        //可以从文件中反序列化媒体组合, 以允许用户查看和修改组合。选择一个组合文件, 然后调用 MediaComposition 方法 LoadAsync 以加载该组合。
        private async Task OpenComposition()
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
            picker.FileTypeFilter.Add(".cmp");

            StorageFile compositionFile = await picker.PickSingleFileAsync();

            if (compositionFile == null)
            {
                //w文件选择失败
            }
            else
            {
                App.Model.MediaComposition = await MediaComposition.LoadAsync(compositionFile);

                if (App.Model.MediaComposition != null)
                {
                }
                else
                {
                    //无法打开组合
                }
            }
        }
Ejemplo n.º 3
0
        // <SnippetOpenComposition>
        private async Task OpenComposition()
        {
            var picker = new Windows.Storage.Pickers.FileOpenPicker();

            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.VideosLibrary;
            picker.FileTypeFilter.Add(".cmp");

            Windows.Storage.StorageFile compositionFile = await picker.PickSingleFileAsync();

            if (compositionFile == null)
            {
                ShowErrorMessage("File picking cancelled");
            }
            else
            {
                composition = null;
                composition = await MediaComposition.LoadAsync(compositionFile);

                if (composition != null)
                {
                    UpdateMediaElementSource();
                }
                else
                {
                    ShowErrorMessage("Unable to open composition");
                }
            }
        }
        private async void SaveCompositionToFile(MediaComposition composition, string suggestedFileName, uint vidX, uint vidY)
        {
            var savePicker = new FileSavePicker
            {
                SuggestedStartLocation = PickerLocationId.DocumentsLibrary
            };

            // Dropdown of file types the user can save the file as
            savePicker.FileTypeChoices.Add("MP4", new List <string>()
            {
                ".mp4"
            });
            // Default file name if the user does not type one in or select a file to replace
            savePicker.SuggestedFileName = suggestedFileName;

            // Get name and location for saved video file
            StorageFile sampleFile = await savePicker.PickSaveFileAsync();

            if (sampleFile == null)
            {
                backgroundTint.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                showLoading.IsActive      = false;
                return;
            }

            await composition.SaveAsync(sampleFile);

            composition = await MediaComposition.LoadAsync(sampleFile);

            // Get a generic encoding profile and match the width and height to the camera's width and height
            MediaEncodingProfile _MediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);

            _MediaEncodingProfile.Video.Width  = vidX;
            _MediaEncodingProfile.Video.Height = vidY;

            var saveOperation = composition.RenderToFileAsync(sampleFile, MediaTrimmingPreference.Precise, _MediaEncodingProfile);

            //mediaSimple.Source = new Uri("ms-appx:///WBVideo.mp4");
            saveOperation.Progress = new AsyncOperationProgressHandler <TranscodeFailureReason, double>(async(info, progress) =>
            {
                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() =>
                {
                    Debug.WriteLine(progress);
                    //ShowErrorMessage(string.Format("Saving file... Progress: {0:F0}%", progress));
                }));
            });
            saveOperation.Completed = new AsyncOperationWithProgressCompletedHandler <TranscodeFailureReason, double>(async(info, status) =>
            {
                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(async() =>
                {
                    backgroundTint.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
                    showLoading.IsActive      = false;
                    await videoExportCompleteDialog.ShowAsync();
                }));
            });
        }
        public async Task UpdateMediaElementSource()
        {
            try
            {
                cmpFile = await ApplicationData.Current.LocalFolder.GetFileAsync(mediaGroup.CompostionFileName + ".cmp");

                mediaComposition = await MediaComposition.LoadAsync(cmpFile);

                mediaStreamSource = mediaComposition.GeneratePreviewMediaStreamSource(
                    (int)mediaElement.ActualWidth,
                    (int)mediaElement.ActualHeight);

                mediaElement.SetMediaStreamSource(mediaStreamSource);
            }
            catch (Exception)
            {
            }
        }
        //This works
        private async void CreateVideoFromIDX3D()
        {
            for (int i = 0; i < 5; i++)
            {
                try
                {
                    var folder = ApplicationData.Current.LocalFolder;
                    RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
                    await renderTargetBitmap.RenderAsync(RenderGrid);

                    IBuffer pixels = await renderTargetBitmap.GetPixelsAsync();

                    CanvasBitmap bitmap    = null;
                    var          videoClip = new MediaComposition();
                    //SoftwareBitmap softwareBitmap = new SoftwareBitmap(BitmapPixelFormat.Bgra8, renderTargetBitmap.PixelWidth,
                    //    renderTargetBitmap.PixelHeight);
                    //bitmap = CanvasBitmap.CreateFromSoftwareBitmap(CanvasDevice.GetSharedDevice(), softwareBitmap);

                    bitmap = CanvasBitmap.CreateFromBytes(CanvasDevice.GetSharedDevice(), pixels,
                                                          renderTargetBitmap.PixelWidth, renderTargetBitmap.PixelHeight, DirectXPixelFormat.B8G8R8A8UIntNormalized);
                    StorageFile video2 = await folder.CreateFileAsync("video2" + ".mp4", CreationCollisionOption.ReplaceExisting);

                    MediaClip d = MediaClip.CreateFromSurface(bitmap, TimeSpan.FromSeconds(3));
                    videoClip.Clips.Add(d);

                    //Use these code to work
                    await videoClip.SaveAsync(video2);

                    videoClip = await MediaComposition.LoadAsync(video2);

                    var result = await videoClip.RenderToFileAsync(video2);

                    Debug.WriteLine(result.ToString());
                    break;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }
            }
        }
        private async void CreateVideoFromWritableBitmapAsync(List <WriteableBitmap> WBs)
        {
            var mediaComposition = new MediaComposition();

            foreach (WriteableBitmap WB in WBs)
            {
                var          pixels = WB.PixelBuffer.ToArray();
                CanvasBitmap bitmap = CanvasBitmap.CreateFromBytes(CanvasDevice.GetSharedDevice(), pixels,
                                                                   800, 600, DirectXPixelFormat.B8G8R8A8UIntNormalized);
                MediaClip mediaClip = MediaClip.CreateFromSurface(bitmap, TimeSpan.FromSeconds(1));
                mediaComposition.Clips.Add(mediaClip);
            }
            //Save the video
            var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("WBVideo.mp4");

            await mediaComposition.SaveAsync(file);

            mediaComposition = await MediaComposition.LoadAsync(file);

            await mediaComposition.RenderToFileAsync(file);
        }
Ejemplo n.º 8
0
        private async void Page_Loaded(object sender, RoutedEventArgs e)
        {
            if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
            {
                DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape;
                await StatusBar.GetForCurrentView().HideAsync();
            }
            else
            {
                WindowManager.HandleTitleBarForGrid(topGrid);
            }

            if (_model.StorageFile == null)
            {
                await UIUtilities.ShowErrorDialogAsync("This clip cannot be edited.", "Currently, you can only edit video clips from files. Sorry!");

                Close();
                return;
            }

            if (_model.Composition == null)
            {
                _createdNew = true;

                var name = Path.ChangeExtension(_model.StorageFile.Name, "uni-cmp");
                try
                {
                    _model.CompositionFile = _model.CompositionFile ?? await ApplicationData.Current.LocalFolder.GetFileAsync(name);

                    if (await UIUtilities.ShowYesNoDialogAsync("Load previous edit?", "It looks like you've edited this file before, do you want to load your previous edits?"))
                    {
                        _model.Composition = await MediaComposition.LoadAsync(_model.CompositionFile);
                    }
                    else
                    {
                        _model.Composition = new MediaComposition();
                    }
                }
                catch
                {
                    _model.Composition = new MediaComposition();
                }
            }

            if (_model.Composition.Clips.Count == 0)
            {
                var clip = await MediaClip.CreateFromFileAsync(_model.StorageFile);

                _model.Composition.Clips.Add(clip);
                _model.Clip = clip;
            }
            else
            {
                _model.Clip = _model.Composition.Clips.First();
            }

            rangeSelector.Maximum  = _model.Clip.OriginalDuration.TotalSeconds;
            rangeSelector.RangeMin = _model.Clip.TrimTimeFromStart.TotalSeconds;
            rangeSelector.RangeMax = _model.Clip.OriginalDuration.TotalSeconds - _model.Clip.TrimTimeFromEnd.TotalSeconds;
            rangeSelector.Value    = rangeSelector.RangeMin;
            startPointText.Text    = _model.Clip.TrimTimeFromStart.ToString("mm\\:ss");
            endPointText.Text      = (_model.Clip.OriginalDuration - _model.Clip.TrimTimeFromEnd).ToString("mm\\:ss");

            _ready = true;
            UpdateMediaElementSource();
        }
Ejemplo n.º 9
0
        private async Task <List <StorageFile> > OnOpen(CancellationToken cancellationToken, StorageFile folderBrowser = null)
        {
            #region Content Loading

            audioVideo.Clear();

            await GetTextContent(cancellationToken, folderBrowser);

            #endregion

            #region Frame Creation

            for (int i = 0; i < ContentList.Count; i++)
            {
                percent = (Convert.ToDouble(i + 1) / Convert.ToDouble(ContentList.Count)) * 100d;
                ReportProgress(Stage3, Stage2ProgressBar, TextProgress2, percent);
                await SetImage(ContentList[i], cancellationToken);
            }

            #endregion

            #region Audio Creation

            await SetBackgroundAudio(GetSSML(ContentList), cancellationToken, true);

            #endregion

            #region Composition Creation

            StorageFile audioBackgroundFile = await GetFile("BackgroundAudio", "temp (1).wav", cancellationToken);

            if (audioBackgroundFile == null)
            {
                return(null);
            }

            IReadOnlyList <StorageFile> imageTemporaryFiles = await GetFiles("Image", cancellationToken);

            if (imageTemporaryFiles == null)
            {
                return(null);
            }

            if (TrackLength.Count != imageTemporaryFiles.Count)
            {
                await MessageBox("some audio files or frames are missing.");

                return(null);
            }

            Dictionary <StorageFile, TimeSpan> temporaryFilesWithDuration = new Dictionary <StorageFile, TimeSpan>();
            for (int i = 0; i < imageTemporaryFiles.Count; i++)
            {
                try
                {
                    percent = (Convert.ToDouble(i) / Convert.ToDouble(ContentList.Count)) * 100d;
                    temporaryFilesWithDuration.Add(imageTemporaryFiles[i], TrackLength[i].Subtract((i == 0 ? subTimeSpan : TrackLength[i - 1])));
                    ReportProgress(Stage5, Stage4ProgressBar, TextProgress4, percent);
                }
                catch (Exception) { }
            }

            await SetComp(audioBackgroundFile, temporaryFilesWithDuration, cancellationToken);

            #endregion

            #region Video Creation

            StorageFile compTemporaryFile = await GetFile("Media Composition", "temp (1).cmp", cancellationToken);

            if (compTemporaryFile == null)
            {
                return(null);
            }

            MediaComposition mediaComposition = await MediaComposition.LoadAsync(compTemporaryFile);

            await SetVideo(mediaComposition, cancellationToken);

            return(audioVideo);

            #endregion
        }
Ejemplo n.º 10
0
        private async void Page_Loaded(object sender, RoutedEventArgs e)
        {
            var coreWindow = CoreWindow.GetForCurrentThread();

            coreWindow.KeyUp += OnWindowKeyUp;


            if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
            {
                DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape;
                await StatusBar.GetForCurrentView().HideAsync();
            }
            else
            {
                WindowingService.Current.HandleTitleBarForControl(topGrid);
            }

            if (_model.StorageFile == null)
            {
                await UIUtilities.ShowErrorDialogAsync(_strings.GetString("CannotEditClipTitle"), _strings.GetString("CannotEditClipMessage"));

                Close();
                return;
            }

            Analytics.TrackEvent("VideoEditor_Loaded");

            if (_model.Composition == null)
            {
                _createdNew = true;

                var name = Path.ChangeExtension(_model.StorageFile.Name, "uni-cmp");
                try
                {
                    _model.CompositionFile = _model.CompositionFile ?? await ApplicationData.Current.LocalFolder.GetFileAsync(name);

                    if (await UIUtilities.ShowYesNoDialogAsync(_strings.GetString("LoadPreviousEditsTitle"), _strings.GetString("LoadPreviousEditsMessage")))
                    {
                        _model.Composition = await MediaComposition.LoadAsync(_model.CompositionFile);
                    }
                    else
                    {
                        _model.Composition = new MediaComposition();
                    }
                }
                catch
                {
                    _model.Composition = new MediaComposition();
                }
            }


            if (_model.Composition.Clips.Count == 0)
            {
                var clip = await MediaClip.CreateFromFileAsync(_model.StorageFile);

                _model.Composition.Clips.Add(clip);
                _model.Clip = clip;
            }
            else
            {
                _model.Clip = _model.Composition.Clips.First();
            }

            rangeSelector.Maximum  = _model.Clip.OriginalDuration.TotalSeconds;
            rangeSelector.RangeMin = _model.Clip.TrimTimeFromStart.TotalSeconds;
            rangeSelector.RangeMax = _model.Clip.OriginalDuration.TotalSeconds - _model.Clip.TrimTimeFromEnd.TotalSeconds;
            rangeSelector.Value    = rangeSelector.RangeMin;

            startPointText.Text = FormatTimeSpan(_model.Clip.TrimTimeFromStart);
            endPointText.Text   = FormatTimeSpan(_model.Clip.OriginalDuration - _model.Clip.TrimTimeFromEnd);

            _ready = true;
            UpdateMediaElementSource();
        }
Ejemplo n.º 11
0
        public async Task MergeMedias(List<Media> medias, MediaGroup currentMediaGroup = null)
        {

            // Use Profile for output vid/cmp? file 


            try
            {
                List<StorageFile> mediaFiles = new List<StorageFile>();
                MediaGroup mediaGroup = new MediaGroup();
                StorageFolder localFolder = ApplicationData.Current.LocalFolder;
                MediaComposition composition = new MediaComposition();
                List<MediaClip> mediaClips = new List<MediaClip>();
                StorageFile timelineVidOutputFile;
                StorageFile timelineCMPOutputFile;
                bool deleteExistingFile = (currentMediaGroup != null) ? false : true;
                #region EmotionsMeanTemp

                double tmpAngerScoreMean = 0;
                double tmpContemptScoreMean = 0;
                double tmpDisgustScoreMean = 0;
                double tmpFearScoreMean = 0;
                double tmpHappinessScoreMean = 0;
                double tmpNeutralScoreMean = 0;
                double tmpSadnessScoreMean = 0;
                double tmpSurpriseScoreMean = 0;

                string tmpHighestEmotionMean = string.Empty;

                #endregion

                foreach (var media in medias)
                {

                    mediaFiles.Add(await StorageFile.GetFileFromApplicationUriAsync(new Uri(
                            string.Format("ms-appdata:///local/{0}", media.MediaName))));

                    tmpAngerScoreMean += media.AngerScore;
                    tmpContemptScoreMean += media.ContemptScore;
                    tmpDisgustScoreMean += media.DisgustScore;
                    tmpFearScoreMean += media.FearScore;
                    tmpHappinessScoreMean += media.HappinessScore;
                    tmpNeutralScoreMean += media.NeutralScore;
                    tmpSadnessScoreMean += media.SadnessScore;
                    tmpSurpriseScoreMean += media.SurpriseScore;
                }
                tmpAngerScoreMean = tmpAngerScoreMean / medias.Count;
                tmpContemptScoreMean = tmpContemptScoreMean / medias.Count;
                tmpDisgustScoreMean = tmpDisgustScoreMean / medias.Count;
                tmpFearScoreMean = tmpFearScoreMean / medias.Count;
                tmpHappinessScoreMean = tmpHappinessScoreMean / medias.Count;
                tmpNeutralScoreMean = tmpNeutralScoreMean / medias.Count;
                tmpSadnessScoreMean = tmpSadnessScoreMean / medias.Count;
                tmpSurpriseScoreMean = tmpSurpriseScoreMean / medias.Count;

                SortedList<string, double> tempForSortingScores = new SortedList<string, double>();
                tempForSortingScores.Add("AngerScoreMean", tmpAngerScoreMean);
                tempForSortingScores.Add("ContemptScoreMean", tmpContemptScoreMean);
                tempForSortingScores.Add("DisgustScoreMean", tmpDisgustScoreMean);
                tempForSortingScores.Add("FearScoreMean", tmpFearScoreMean);
                tempForSortingScores.Add("HappinessScoreMean", tmpHappinessScoreMean);
                tempForSortingScores.Add("NeutralScoreMean", tmpNeutralScoreMean);
                tempForSortingScores.Add("SadnessScoreMean", tmpSadnessScoreMean);
                tempForSortingScores.Add("SurpriseScoreMean", tmpSurpriseScoreMean);
                // TODO: check this.
                tmpHighestEmotionMean = tempForSortingScores.OrderByDescending(x => x.Value).FirstOrDefault().Key;

                if (currentMediaGroup == null)
                {
                    timelineVidOutputFile = await localFolder.CreateFileAsync(
                   "timelineMeOutput.mp4", CreationCollisionOption.GenerateUniqueName);

                    string CMPFileName = string.Format(timelineVidOutputFile.DisplayName + ".cmp");
                    timelineCMPOutputFile = await localFolder.CreateFileAsync(
                   CMPFileName, CreationCollisionOption.OpenIfExists);

                    for (int i = 0; i < mediaFiles.Count; i++)
                    {
                        mediaClips.Add(await MediaClip.CreateFromImageFileAsync(mediaFiles[i], TimeSpan.FromSeconds(int.Parse(localSettings.Values["DurationInSecForEachImage"].ToString()))));
                        composition.Clips.Add(mediaClips[i]);
                    }


                    using (var db = new MediaContext())
                    {
                        mediaGroup = new MediaGroup()
                        {
                            CompostionFileName = timelineVidOutputFile.DisplayName,
                            LastEditDate = DateTime.Now,
                            AngerScoreMean = tmpAngerScoreMean,
                            ContemptScoreMean = tmpContemptScoreMean,
                            DisgustScoreMean = tmpDisgustScoreMean,
                            FearScoreMean = tmpFearScoreMean,
                            HappinessScoreMean = tmpHappinessScoreMean,
                            NeutralScoreMean = tmpNeutralScoreMean,
                            SadnessScoreMean = tmpSadnessScoreMean,
                            SurpriseScoreMean = tmpSurpriseScoreMean,
                            HighestEmotionMean = tmpHighestEmotionMean

                        };

                        db.MediaGroups.Add(mediaGroup);
                        db.SaveChanges();

                    }

                    var action = composition.SaveAsync(timelineCMPOutputFile);
                    action.Completed = (info, status) =>
                    {
                        if (status != AsyncStatus.Completed)
                        {
                        //ShowErrorMessage("Error saving composition");
                    }

                    };



                }
                else
                {
                    using (var db = new MediaContext())
                    {
                        mediaGroup =
                            db.MediaGroups.Where(
                                x => x.CompostionFileName == currentMediaGroup.CompostionFileName).
                                FirstOrDefault();
                        // TODO Check this
                        mediaGroup.LastEditDate = DateTime.Now;
                        mediaGroup.AngerScoreMean = mediaGroup.AngerScoreMean + tmpAngerScoreMean / 2;
                        mediaGroup.ContemptScoreMean = mediaGroup.ContemptScoreMean + tmpContemptScoreMean / 2;
                        mediaGroup.DisgustScoreMean = mediaGroup.DisgustScoreMean + tmpDisgustScoreMean / 2;
                        mediaGroup.FearScoreMean = mediaGroup.FearScoreMean + tmpFearScoreMean / 2;
                        mediaGroup.HappinessScoreMean = mediaGroup.HappinessScoreMean + tmpHappinessScoreMean / 2;
                        mediaGroup.NeutralScoreMean = mediaGroup.NeutralScoreMean + tmpNeutralScoreMean / 2;
                        mediaGroup.SadnessScoreMean = mediaGroup.SadnessScoreMean + tmpSadnessScoreMean / 2;
                        mediaGroup.SurpriseScoreMean = mediaGroup.SurpriseScoreMean + tmpSurpriseScoreMean / 2;

                        SortedList<string, double> temptempForSortingScores = new SortedList<string, double>();
                        temptempForSortingScores.Add("AngerScoreMean", mediaGroup.AngerScoreMean);
                        temptempForSortingScores.Add("ContemptScoreMean", mediaGroup.ContemptScoreMean);
                        temptempForSortingScores.Add("DisgustScoreMean", mediaGroup.DisgustScoreMean);
                        temptempForSortingScores.Add("FearScoreMean", mediaGroup.FearScoreMean);
                        temptempForSortingScores.Add("HappinessScoreMean", mediaGroup.HappinessScoreMean);
                        temptempForSortingScores.Add("NeutralScoreMean", mediaGroup.NeutralScoreMean);
                        temptempForSortingScores.Add("SadnessScoreMean", mediaGroup.SadnessScoreMean);
                        temptempForSortingScores.Add("SurpriseScoreMean", mediaGroup.SurpriseScoreMean);
                        // TODO: check this.
                        mediaGroup.HighestEmotionMean = temptempForSortingScores.OrderByDescending(x => x.Value).FirstOrDefault().Key;

                        db.MediaGroups.Update(mediaGroup);
                        db.SaveChanges();
                    }

                    timelineVidOutputFile = await localFolder.GetFileAsync(currentMediaGroup.CompostionFileName + ".mp4");
                    timelineCMPOutputFile = await localFolder.GetFileAsync(currentMediaGroup.CompostionFileName + ".cmp");
                    composition = await MediaComposition.LoadAsync(timelineCMPOutputFile);
                    //TODO: make sure this works.
                    for (int i = 0; i < mediaFiles.Count; i++)
                    {
                        // TODO Fix this
                        mediaClips.Add(await MediaClip.CreateFromImageFileAsync(mediaFiles[i], TimeSpan.FromSeconds(int.Parse(localSettings.Values["DurationInSecForEachImage"].ToString()))));
                        composition.Clips.Add(mediaClips[i]);
                    }

                    var action = composition.SaveAsync(timelineCMPOutputFile);
                    action.Completed = (info, status) =>
                    {
                        if (status != AsyncStatus.Completed)
                        {
                        //ShowErrorMessage("Error saving composition");
                    }

                    };
                }
            }
            catch (Exception)
            {

                
            }

        }