private MediaEncodingProfile getVideoEncoding() { VideoEncodingQuality quality = VideoEncodingQuality.Auto; myQuality = "Auto"; switch (videoQuality.SelectedIndex) { case 2: quality = VideoEncodingQuality.HD1080p; myQuality = "1080p"; break; case 3: quality = VideoEncodingQuality.HD720p; myQuality = "720p"; break; case 4: quality = VideoEncodingQuality.Vga; myQuality = "VGA"; break; default: break; } myEncoding = (videoType == null || videoType.SelectedIndex == 0) ? "MP4" : "WMV"; return((videoType == null || videoType.SelectedIndex == 0) ? MediaEncodingProfile.CreateMp4(quality) : MediaEncodingProfile.CreateWmv(quality)); }
public RecordSizeInfo(uint width, uint height, VideoEncodingQuality type) { Width = width; Height = height; SizeTag = width * height; SizeType = type; }
/// <summary> /// Initializes the <see cref="MediaCapture"/> element. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task <MediaCapture> Initialize( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { if (this._mediaCapture != null) { this.Dispose(); } this.IsCameraAvailable = true; var camera = await this.GetCamera(this.ActiveCamera); this._mediaCapture = new MediaCapture(); this._mediaCapture.Failed += this.OnMediaCaptureFailed; await this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id }); this._mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; this._imageEncodingProperties = ImageEncodingProperties.CreateJpeg(); this._videoEncodingProfile = MediaEncodingProfile.CreateMp4(videoQuality); this.SetEncodingProperties(primaryUse); var rotation = this.GetVideoRotation(DisplayInformation.GetForCurrentView().CurrentOrientation); if (primaryUse == CaptureUse.Photo) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.Photo, this._mediaEncodingProperties); this.IsFlashAvailable = this.Settings.FlashControl.Supported; } else if (primaryUse == CaptureUse.Video) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoPreview, this._mediaEncodingProperties); await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoRecord, this._mediaEncodingProperties); this.SetRecordOrientation(rotation); this.IsFlashAvailable = this.Settings.TorchControl.Supported; } this._mediaCapture.SetPreviewRotation(rotation); return(this._mediaCapture); }
public ExportVideoTask(IExportProvider provider, StorageFolder destinationFolder, string fileName, uint exportFrameRate, VideoEncodingQuality encodingQuality) { ExportProvider = provider; DestinationFolder = destinationFolder; FileName = fileName; ExportFrameRate = exportFrameRate; ExportVideoEncodingQuality = encodingQuality; _context = SynchronizationContext.Current; _cancellationTokenSource = new CancellationTokenSource(); _exportTask = CreateExportTask(_cancellationTokenSource.Token); _cancellationTokenSource.Token.Register(ClearCacheAsync); }
/// <summary> /// Swaps between the current active camera and the secondary. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task <MediaCapture> ChangeCamera( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { switch (this.ActiveCamera) { case Panel.Front: this.ActiveCamera = Panel.Back; return(await this.Initialize(primaryUse, videoQuality)); case Panel.Back: this.ActiveCamera = Panel.Front; return(await this.Initialize(primaryUse, videoQuality)); } return(null); }
private static async void TranscodeFile(VideoEncodingQuality quality, StorageFile srcFile, StorageFile destFile, Action <StorageFile, ulong> callback, Action <IAsyncActionWithProgress <double> > faultCallback) { var profile = MediaEncodingProfile.CreateMp4(quality); profile.Video.Bitrate = 750000; profile.Audio.ChannelCount = 1; profile.Audio.Bitrate = 62000; var transcoder = new MediaTranscoder(); var prepareOp = await transcoder.PrepareFileTranscodeAsync(srcFile, destFile, profile); //message.PrepareTranscodeResult = prepareOp; if (prepareOp.CanTranscode) { var transcodeOp = prepareOp.TranscodeAsync(); transcodeOp.Progress += TranscodeProgress; transcodeOp.Completed += async(o, e) => { var properties = await destFile.GetBasicPropertiesAsync(); var size = properties.Size; TranscodeComplete(o, e, () => callback(destFile, size), faultCallback); }; } else { faultCallback.SafeInvoke(null); switch (prepareOp.FailureReason) { case TranscodeFailureReason.CodecNotFound: Telegram.Api.Helpers.Execute.BeginOnUIThread(() => MessageBox.Show(AppResources.CodecWasNotFound, AppResources.Error, MessageBoxButton.OK)); break; case TranscodeFailureReason.InvalidProfile: Telegram.Api.Helpers.Execute.BeginOnUIThread(() => MessageBox.Show(AppResources.ProfileIsInvalid, AppResources.Error, MessageBoxButton.OK)); break; default: Telegram.Api.Helpers.Execute.BeginOnUIThread(() => MessageBox.Show(AppResources.UnknownFailure, AppResources.Error, MessageBoxButton.OK)); break; } } }
void GetPresetProfile(ComboBox combobox) { Profile = null; VideoEncodingQuality videoEncodingProfile = VideoEncodingQuality.Wvga; switch (combobox.SelectedIndex) { case 0: videoEncodingProfile = VideoEncodingQuality.HD1080p; break; case 1: videoEncodingProfile = VideoEncodingQuality.HD720p; break; case 2: videoEncodingProfile = VideoEncodingQuality.Wvga; break; case 3: videoEncodingProfile = VideoEncodingQuality.Ntsc; break; case 4: videoEncodingProfile = VideoEncodingQuality.Pal; break; case 5: videoEncodingProfile = VideoEncodingQuality.Vga; break; case 6: videoEncodingProfile = VideoEncodingQuality.Qvga; break; } if (_UseMp4) { Profile = Windows.Media.MediaProperties.MediaEncodingProfile.CreateMp4(videoEncodingProfile); } else { Profile = MediaEncodingProfile.CreateWmv(videoEncodingProfile); } }
public async void StartCaptureAsync(VideoEncodingQuality captureQuality) { // Build the media encoding profile from the selected file type and MediaEncodingProfile profile; switch (_fileBeingCaptured.FileType) { case WindowsMediaExtension: profile = MediaEncodingProfile.CreateWmv(captureQuality); break; case Mp4Extension: profile = MediaEncodingProfile.CreateMp4(captureQuality); break; default: throw new InvalidOperationException("Unknown file type"); } await _captureManager.StartRecordToStorageFileAsync (profile, _fileBeingCaptured); }
void 音訊或視訊檔案的編碼設定() { encodingProfile = null; string xs = 選擇視訊編碼格式.SelectedItem as string; switch (xs) { case "Auto": SelectedQuality = VideoEncodingQuality.Auto; break; case "HD1080p": SelectedQuality = VideoEncodingQuality.HD1080p; break; case "HD720p": //SelectedQuality = VideoEncodingQuality.HD720p; break; case "Wvga": SelectedQuality = VideoEncodingQuality.Wvga; break; case "Ntsc": SelectedQuality = VideoEncodingQuality.Ntsc; break; case "Pal": SelectedQuality = VideoEncodingQuality.Pal; break; case "Vga": SelectedQuality = VideoEncodingQuality.Vga; break; case "Qvga": SelectedQuality = VideoEncodingQuality.Qvga; break; } encodingProfile = MediaEncodingProfile.CreateMp4(SelectedQuality); AudioStream = new InMemoryRandomAccessStream(); }
async private void StartRadioButton_Click(object sender, RoutedEventArgs e) { if (_InputFile == null) { await new Windows.UI.Popups.MessageDialog("Please import a video or music file to convert").ShowAsync(); return; } VideoEncodingQuality videoQuallity = VideoEncodingQuality.Wvga; if (CS.Width == 1920 && CS.Height == 1080) { videoQuallity = VideoEncodingQuality.HD1080p; } else if (CS.Width == 1280 && CS.Height == 720) { videoQuallity = VideoEncodingQuality.HD720p; } else if (CS.Width == 800 && CS.Height == 480) { videoQuallity = VideoEncodingQuality.Wvga; } else if (CS.Width == 720 && CS.Height == 480) { videoQuallity = VideoEncodingQuality.Ntsc; } else if (CS.Width == 720 && CS.Height == 576) { videoQuallity = VideoEncodingQuality.Pal; } else if (CS.Width == 640 && CS.Height == 480) { videoQuallity = VideoEncodingQuality.Vga; } else if (CS.Width == 320 && CS.Height == 240) { videoQuallity = VideoEncodingQuality.Qvga; } if (CS.Extension.ToLower().Equals("mp4")) { _Profile = MediaEncodingProfile.CreateMp4(videoQuallity); } else if (CS.Extension.ToLower().Equals("avi")) { _Profile = MediaEncodingProfile.CreateAvi(videoQuallity); } else if (CS.Extension.ToLower().Equals("wmv")) { _Profile = MediaEncodingProfile.CreateWmv(videoQuallity); } else if (CS.Extension.ToLower().Equals("wma")) { _Profile = MediaEncodingProfile.CreateWma(AudioEncodingQuality.High); } else if (CS.Extension.ToLower().Equals("wav")) { _Profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); } else if (CS.Extension.ToLower().Equals("mp3")) { _Profile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High); } else if (CS.Extension.ToLower().Equals("m4a")) { _Profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High); } try { if (CS.Extension.ToLower().Equals("mp4") || CS.Extension.ToLower().Equals("avi") || CS.Extension.ToLower().Equals("wmv")) { _Profile.Video.Width = CS.Width; _Profile.Video.Height = CS.Height; _Profile.Video.Bitrate = CS.VideoBitRate; } _Profile.Audio.Bitrate = CS.AudioBitRate; _Profile.Audio.SampleRate = CS.SampleRate; } catch (Exception exception) { vars.Output("StartRadioButton_Click ex: " + exception.Message); _Profile = null; return; } _cts = new CancellationTokenSource(); try { if (_InputFile != null && _Profile != null) { _OutputFileName = System.IO.Path.GetFileNameWithoutExtension(_InputFile.Path); string extension = CS.Extension; _OutputFileName = string.Format("[MC] {0}.{1}", _OutputFileName, extension); _OutputFile = await KnownFolders.VideosLibrary.CreateFileAsync(_OutputFileName, CreationCollisionOption.GenerateUniqueName); var preparedTranscodeResult = await _Transcoder.PrepareFileTranscodeAsync(_InputFile, _OutputFile, _Profile); _Transcoder.VideoProcessingAlgorithm = MediaVideoProcessingAlgorithm.Default; if (preparedTranscodeResult.CanTranscode) { var progress = new Progress <double>(TranscodeProgress); stopwatch.Reset(); stopwatch.Start(); MASettings.GPVisibility = Visibility.Visible; StopRadioButton.Visibility = Visibility.Visible; await preparedTranscodeResult.TranscodeAsync().AsTask(_cts.Token, progress); } else { vars.Output(preparedTranscodeResult.FailureReason); MASettings.GPVisibility = Visibility.Collapsed; await new Windows.UI.Popups.MessageDialog("Failed to start.\r\nError: " + preparedTranscodeResult.FailureReason).ShowAsync(); StopRadioButton.Visibility = Visibility.Collapsed; } } } catch (TaskCanceledException) { MASettings.GPVisibility = Visibility.Collapsed; StopRadioButton.Visibility = Visibility.Collapsed; vars.Output("Transcode Canceled"); } catch (Exception exception) { MASettings.GPVisibility = Visibility.Collapsed; StopRadioButton.Visibility = Visibility.Collapsed; await new Windows.UI.Popups.MessageDialog("Failed to convert.\r\nError: " + exception.Message).ShowAsync(); vars.Output(exception.Message); } }
void GetPresetProfile(ComboBox combobox) { _Profile = null; VideoEncodingQuality videoEncodingProfile = VideoEncodingQuality.Wvga; switch (combobox.SelectedIndex) { case 0: videoEncodingProfile = VideoEncodingQuality.HD1080p; break; case 1: videoEncodingProfile = VideoEncodingQuality.HD720p; break; case 2: videoEncodingProfile = VideoEncodingQuality.Wvga; break; case 3: videoEncodingProfile = VideoEncodingQuality.Ntsc; break; case 4: videoEncodingProfile = VideoEncodingQuality.Pal; break; case 5: videoEncodingProfile = VideoEncodingQuality.Vga; break; case 6: videoEncodingProfile = VideoEncodingQuality.Qvga; break; } switch (_OutputType) { case "AVI": _Profile = MediaEncodingProfile.CreateAvi(videoEncodingProfile); break; case "WMV": _Profile = MediaEncodingProfile.CreateWmv(videoEncodingProfile); break; default: _Profile = Windows.Media.MediaProperties.MediaEncodingProfile.CreateMp4(videoEncodingProfile); break; } /* * For transcoding to audio profiles, create the encoding profile using one of these APIs: * MediaEncodingProfile.CreateMp3(audioEncodingProfile) * MediaEncodingProfile.CreateM4a(audioEncodingProfile) * MediaEncodingProfile.CreateWma(audioEncodingProfile) * MediaEncodingProfile.CreateWav(audioEncodingProfile) * * where audioEncodingProfile is one of these presets: * AudioEncodingQuality.High * AudioEncodingQuality.Medium * AudioEncodingQuality.Low */ }
/// <summary> /// 提供音视频转码 /// </summary> /// <param name="SourceFile">源文件</param> /// <param name="DestinationFile">目标文件</param> /// <param name="MediaTranscodeEncodingProfile">转码编码</param> /// <param name="MediaTranscodeQuality">转码质量</param> /// <param name="SpeedUp">是否启用硬件加速</param> /// <returns></returns> public static Task TranscodeFromAudioOrVideoAsync(StorageFile SourceFile, StorageFile DestinationFile, string MediaTranscodeEncodingProfile, string MediaTranscodeQuality, bool SpeedUp) { return(Task.Factory.StartNew((obj) => { if (obj is ValueTuple <StorageFile, StorageFile, string, string, bool> Para) { using (ExtendedExecutionController ExtExecution = ExtendedExecutionController.TryCreateExtendedExecution().Result) { IsAnyTransformTaskRunning = true; AVTranscodeCancellation = new CancellationTokenSource(); MediaTranscoder Transcoder = new MediaTranscoder { HardwareAccelerationEnabled = true, VideoProcessingAlgorithm = Para.Item5 ? MediaVideoProcessingAlgorithm.Default : MediaVideoProcessingAlgorithm.MrfCrf444 }; try { MediaEncodingProfile Profile = null; VideoEncodingQuality VideoQuality = default; AudioEncodingQuality AudioQuality = default; switch (Para.Item4) { case "UHD2160p": VideoQuality = VideoEncodingQuality.Uhd2160p; break; case "QVGA": VideoQuality = VideoEncodingQuality.Qvga; break; case "HD1080p": VideoQuality = VideoEncodingQuality.HD1080p; break; case "HD720p": VideoQuality = VideoEncodingQuality.HD720p; break; case "WVGA": VideoQuality = VideoEncodingQuality.Wvga; break; case "VGA": VideoQuality = VideoEncodingQuality.Vga; break; case "High": AudioQuality = AudioEncodingQuality.High; break; case "Medium": AudioQuality = AudioEncodingQuality.Medium; break; case "Low": AudioQuality = AudioEncodingQuality.Low; break; } switch (Para.Item3) { case "MKV": Profile = MediaEncodingProfile.CreateHevc(VideoQuality); break; case "MP4": Profile = MediaEncodingProfile.CreateMp4(VideoQuality); break; case "WMV": Profile = MediaEncodingProfile.CreateWmv(VideoQuality); break; case "AVI": Profile = MediaEncodingProfile.CreateAvi(VideoQuality); break; case "MP3": Profile = MediaEncodingProfile.CreateMp3(AudioQuality); break; case "ALAC": Profile = MediaEncodingProfile.CreateAlac(AudioQuality); break; case "WMA": Profile = MediaEncodingProfile.CreateWma(AudioQuality); break; case "M4A": Profile = MediaEncodingProfile.CreateM4a(AudioQuality); break; } PrepareTranscodeResult Result = Transcoder.PrepareFileTranscodeAsync(Para.Item1, Para.Item2, Profile).AsTask().Result; if (Result.CanTranscode) { SendUpdatableToastWithProgressForTranscode(Para.Item1, Para.Item2); Progress <double> TranscodeProgress = new Progress <double>((CurrentValue) => { try { NotificationData Data = new NotificationData { SequenceNumber = 0 }; Data.Values["ProgressValue"] = (Math.Ceiling(CurrentValue) / 100).ToString(); Data.Values["ProgressValueString"] = Convert.ToInt32(CurrentValue) + "%"; ToastNotificationManager.CreateToastNotifier().Update(Data, "TranscodeNotification"); } catch (Exception ex) { LogTracer.Log(ex, "Toast notification could not be sent"); } }); Result.TranscodeAsync().AsTask(AVTranscodeCancellation.Token, TranscodeProgress).Wait(); CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { ShowTranscodeCompleteNotification(Para.Item1, Para.Item2); }).AsTask().Wait(); } else { LogTracer.Log("Transcode format is not supported"); Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait(); } } catch (AggregateException) { Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait(); } catch (Exception ex) { LogTracer.Log(ex, "Transcode failed"); Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait(); } finally { AVTranscodeCancellation.Dispose(); AVTranscodeCancellation = null; IsAnyTransformTaskRunning = false; } } } }, (SourceFile, DestinationFile, MediaTranscodeEncodingProfile, MediaTranscodeQuality, SpeedUp), TaskCreationOptions.LongRunning)); }
/// <summary> /// Initializes the <see cref="MediaCapture"/> element. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task<MediaCapture> Initialize( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { if (this._mediaCapture != null) { this.Dispose(); } this.IsCameraAvailable = true; var camera = await this.GetCamera(this.ActiveCamera); this._mediaCapture = new MediaCapture(); this._mediaCapture.Failed += this.OnMediaCaptureFailed; await this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id }); this._mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; this._imageEncodingProperties = ImageEncodingProperties.CreateJpeg(); this._videoEncodingProfile = MediaEncodingProfile.CreateMp4(videoQuality); this.SetEncodingProperties(primaryUse); var rotation = this.GetVideoRotation(DisplayInformation.GetForCurrentView().CurrentOrientation); if (primaryUse == CaptureUse.Photo) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.Photo, this._mediaEncodingProperties); this.IsFlashAvailable = this.Settings.FlashControl.Supported; } else if (primaryUse == CaptureUse.Video) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoPreview, this._mediaEncodingProperties); await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoRecord, this._mediaEncodingProperties); this.SetRecordOrientation(rotation); this.IsFlashAvailable = this.Settings.TorchControl.Supported; } this._mediaCapture.SetPreviewRotation(rotation); return this._mediaCapture; }
protected override async void OnNavigatedTo(NavigationEventArgs e) { VideoEncodingQuality quality = VideoEncodingQuality.Auto; this.Log.Trace(() => "OnNavigatedTo Fired"); await this.InitializeCameraAccess().ConfigureAwait(false); if (this.ConfigOptions.VideoCapture.Height < 720) { // TODO: Check for aspect ratio, this could be wvga. quality = VideoEncodingQuality.Vga; } else if (this.ConfigOptions.VideoCapture.Height >= 720 && this.ConfigOptions.VideoCapture.Height < 1080) { quality = VideoEncodingQuality.HD720p; } else { quality = VideoEncodingQuality.HD1080p; } var encodingProfile = MediaEncodingProfile.CreateMp4(quality); this.Log.Trace(() => $"Created encoding profile for {quality.ToString()}"); encodingProfile.Video.Bitrate = this.ConfigOptions.VideoCapture.Bitrate; encodingProfile.Video.FrameRate.Numerator = 2;// this.ConfigOptions.VideoCapture.FramesPerSecond; // Set this lower for now. Looks like anything lower than 96k isn't supported. // Didn't try 44.1k sampling, /shrug. //encodingProfile.Audio = AudioEncodingProperties.CreateAac(48000, 1, 96000); this.Log.Trace(() => $"Set Video Bitrate and FPS to {this.ConfigOptions.VideoCapture.Bitrate} at {this.ConfigOptions.VideoCapture.FramesPerSecond} fps."); this.Log.Debug(() => $"CameraAccess: {(this.CameraAccess == null ? "is null" : "is not null")}"); this.Log.Debug(() => $"CameraAccess.CameraMediaCapture: {(this.CameraAccess?.CameraMediaCapture == null ? "is null" : "is not null")}"); this.Log.Debug(() => $"CameraAccess.CameraMediaCapture.VideoDeviceController: {(this.CameraAccess?.CameraMediaCapture?.VideoDeviceController == null ? "is null" : "is not null")}"); this.CameraAccess.CameraMediaCapture.VideoDeviceController.PrimaryUse = Windows.Media.Devices.CaptureUse.Video; var formats = this.CameraAccess.GetSupportedCaptureFormats(); var myFormat = formats.FirstOrDefault(f => f.Height == this.ConfigOptions.VideoCapture.Height && f.Width == this.ConfigOptions.VideoCapture.Width && f.Framerate == 5 && f.Subtype == "MJPG" ); this.Log.Trace(() => $"Found {formats.Count()} formats."); this.Log.Debug(() => myFormat == null ? "Could not find specified capture properties in formats." : $"Found capture format, {myFormat.Subtype}"); await this.CameraAccess.SetCaptureFormat(myFormat).ConfigureAwait(false); this.CameraAccess.SetEncodingProflie(encodingProfile); if (true) { this.Log.Debug(() => "Starting capture loop..."); // NOTE: Don't await these. this.VideoCaptureLoop().ContinueWith((t) => { if (t.IsCompletedSuccessfully) { this.Log.Debug(() => "Video Loop started."); } if (t.IsFaulted) { this.Log.Error(() => "Exception while starting Video Loop", t.Exception); } }).AsAsyncAction().AsTask().ConfigureAwait(false); } if (true) { this.Log.Debug(() => "Starting HttpServer..."); this.StartHttpServer().ContinueWith((t) => { if (t.IsCompletedSuccessfully) { this.Log.Debug(() => "Http Server started."); } if (t.IsFaulted) { this.Log.Error(() => "Exception while starting Http Server.", t.Exception); } }).AsAsyncAction().AsTask().ConfigureAwait(false); if (true) { this.Log.Debug(() => "Starting Video Preview Service..."); this.CameraAccess.CameraFrameReader.AcquisitionMode = Windows.Media.Capture.Frames.MediaFrameReaderAcquisitionMode.Realtime; await this.CameraAccess.CameraFrameReader.StartAsync().AsTask().ConfigureAwait(false); } } }
private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { var Deferral = args.GetDeferral(); if (MergeFile == null) { EmptyTip.IsOpen = true; args.Cancel = true; Deferral.Complete(); return; } VideoEncodingQuality Quality = default; switch (EncodingQuality.SelectedIndex) { case 0: { Quality = VideoEncodingQuality.Uhd2160p; break; } case 1: { Quality = VideoEncodingQuality.HD1080p; break; } case 2: { Quality = VideoEncodingQuality.HD720p; break; } case 3: { Quality = VideoEncodingQuality.Wvga; break; } } switch (EncodingProfile.SelectedIndex) { case 0: { MediaEncoding = MediaEncodingProfile.CreateMp4(Quality); ExportFileType = ".mp4"; break; } case 1: { MediaEncoding = MediaEncodingProfile.CreateWmv(Quality); ExportFileType = ".wmv"; break; } case 2: { MediaEncoding = MediaEncodingProfile.CreateHevc(Quality); ExportFileType = ".mkv"; break; } } MediaClip SourceVideoClip = await MediaClip.CreateFromFileAsync(SourceFile); MediaClip MergeVideoClip = await MediaClip.CreateFromFileAsync(MergeFile); Composition = new MediaComposition(); Composition.Clips.Add(SourceVideoClip); Composition.Clips.Add(MergeVideoClip); Deferral.Complete(); }
private async Task TranscodeMediaAsync() { MediaVideoProcessingAlgorithm Algorithm = default; if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeAlgorithm"] is string TranscodeAlgorithm) { if (TranscodeAlgorithm == "MrfCrf444") { Algorithm = MediaVideoProcessingAlgorithm.MrfCrf444; } else if (TranscodeAlgorithm == "Default") { Algorithm = MediaVideoProcessingAlgorithm.Default; } MediaTranscoder Transcoder = new MediaTranscoder { HardwareAccelerationEnabled = true, VideoProcessingAlgorithm = Algorithm }; if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeInputFileToken"] is string InputFileToken && ApplicationData.Current.LocalSettings.Values["MediaTranscodeOutputFileToken"] is string OutputFileToken) { try { var FutureItemAccessList = StorageApplicationPermissions.FutureAccessList; InputFile = await FutureItemAccessList.GetFileAsync(InputFileToken); OutputFile = await FutureItemAccessList.GetFileAsync(OutputFileToken); if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeEncodingProfile"] is string EncodingKind && ApplicationData.Current.LocalSettings.Values["MediaTranscodeQuality"] is string Quality) { MediaEncodingProfile Profile = null; VideoEncodingQuality VideoQuality = default; AudioEncodingQuality AudioQuality = default; switch (Quality) { case "UHD2160p": VideoQuality = VideoEncodingQuality.Uhd2160p; break; case "QVGA": VideoQuality = VideoEncodingQuality.Qvga; break; case "HD1080p": VideoQuality = VideoEncodingQuality.HD1080p; break; case "HD720p": VideoQuality = VideoEncodingQuality.HD720p; break; case "WVGA": VideoQuality = VideoEncodingQuality.Wvga; break; case "VGA": VideoQuality = VideoEncodingQuality.Vga; break; case "High": AudioQuality = AudioEncodingQuality.High; break; case "Medium": AudioQuality = AudioEncodingQuality.Medium; break; case "Low": AudioQuality = AudioEncodingQuality.Low; break; } switch (EncodingKind) { case "MKV": Profile = MediaEncodingProfile.CreateHevc(VideoQuality); break; case "MP4": Profile = MediaEncodingProfile.CreateMp4(VideoQuality); break; case "WMV": Profile = MediaEncodingProfile.CreateWmv(VideoQuality); break; case "AVI": Profile = MediaEncodingProfile.CreateAvi(VideoQuality); break; case "MP3": Profile = MediaEncodingProfile.CreateMp3(AudioQuality); break; case "ALAC": Profile = MediaEncodingProfile.CreateAlac(AudioQuality); break; case "WMA": Profile = MediaEncodingProfile.CreateWma(AudioQuality); break; case "M4A": Profile = MediaEncodingProfile.CreateM4a(AudioQuality); break; } PrepareTranscodeResult Result = await Transcoder.PrepareFileTranscodeAsync(InputFile, OutputFile, Profile); if (Result.CanTranscode) { SendUpdatableToastWithProgress(); Progress <double> TranscodeProgress = new Progress <double>(ProgressHandler); await Result.TranscodeAsync().AsTask(Cancellation.Token, TranscodeProgress); ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Success"; } else { ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "转码格式不支持"; await OutputFile.DeleteAsync(StorageDeleteOption.PermanentDelete); } } else { ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "SettingError: Miss MediaTranscodeEncodingProfile Or MediaTranscodeQuality"; await OutputFile.DeleteAsync(StorageDeleteOption.PermanentDelete); } }
/// <summary> /// Swaps between the current active camera and the secondary. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task<MediaCapture> ChangeCamera( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { switch (this.ActiveCamera) { case Panel.Front: this.ActiveCamera = Panel.Back; return await this.Initialize(primaryUse, videoQuality); case Panel.Back: this.ActiveCamera = Panel.Front; return await this.Initialize(primaryUse, videoQuality); } return null; }
private async void QueueContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { var Deferral = args.GetDeferral(); if (UseSameProfile.IsChecked.GetValueOrDefault()) { MediaEncoding = await MediaEncodingProfile.CreateFromFileAsync(VideoFile); TrimmingPreference = MediaTrimmingPreference.Precise; ExportFileType = VideoFile.FileType; } else { VideoEncodingQuality Quality = default; switch (EncodingQuality.SelectedIndex) { case 0: { Quality = VideoEncodingQuality.Uhd2160p; break; } case 1: { Quality = VideoEncodingQuality.HD1080p; break; } case 2: { Quality = VideoEncodingQuality.HD720p; break; } case 3: { Quality = VideoEncodingQuality.Wvga; break; } } switch (EncodingProfile.SelectedIndex) { case 0: { MediaEncoding = MediaEncodingProfile.CreateMp4(Quality); ExportFileType = ".mp4"; break; } case 1: { MediaEncoding = MediaEncodingProfile.CreateWmv(Quality); ExportFileType = ".wmv"; break; } case 2: { MediaEncoding = MediaEncodingProfile.CreateHevc(Quality); ExportFileType = ".mkv"; break; } } if (TrimmingProfile.SelectedIndex == 0) { TrimmingPreference = MediaTrimmingPreference.Precise; } else { TrimmingPreference = MediaTrimmingPreference.Fast; } } PreviewSource?.Dispose(); MediaPlay.Source = null; Deferral.Complete(); }
private async Task OnSave(CancellationToken cancellationToken) { FileSavePicker fileSavePicker = new FileSavePicker(); fileSavePicker.FileTypeChoices.Add("Auto", new List <string>() { ".mp4" }); fileSavePicker.FileTypeChoices.Add("Avi_HD1080p", new List <string>() { ".avi_HD1080p" }); fileSavePicker.FileTypeChoices.Add("Avi_HD720p", new List <string>() { ".avi_HD720p" }); fileSavePicker.FileTypeChoices.Add("Avi_Ntsc", new List <string>() { ".avi_Ntsc" }); fileSavePicker.FileTypeChoices.Add("Avi_Pal", new List <string>() { ".avi_Pal" }); fileSavePicker.FileTypeChoices.Add("Avi_Qvga", new List <string>() { ".avi_Qvga" }); fileSavePicker.FileTypeChoices.Add("Avi_Vga", new List <string>() { ".avi_Vga" }); fileSavePicker.FileTypeChoices.Add("Avi_Wvga", new List <string>() { ".avi_Wvga" }); fileSavePicker.FileTypeChoices.Add("M4a_High", new List <string>() { ".m4a_High" }); fileSavePicker.FileTypeChoices.Add("M4a_Low", new List <string>() { ".m4a_Low" }); fileSavePicker.FileTypeChoices.Add("M4a_Medium", new List <string>() { ".m4a_Medium" }); fileSavePicker.FileTypeChoices.Add("Mp3_High", new List <string>() { ".mp3_High" }); fileSavePicker.FileTypeChoices.Add("Mp3_Low", new List <string>() { ".mp3_Low" }); fileSavePicker.FileTypeChoices.Add("Mp3_Medium", new List <string>() { ".mp3_Medium" }); fileSavePicker.FileTypeChoices.Add("Mp4_HD1080p", new List <string>() { ".mp4_HD1080p" }); fileSavePicker.FileTypeChoices.Add("Mp4_HD720p", new List <string>() { ".mp4_HD720p" }); fileSavePicker.FileTypeChoices.Add("Mp4_Ntsc", new List <string>() { ".mp4_Ntsc" }); fileSavePicker.FileTypeChoices.Add("Mp4_Pal", new List <string>() { ".mp4_Pal" }); fileSavePicker.FileTypeChoices.Add("Mp4_Qvga", new List <string>() { ".mp4_Qvga" }); fileSavePicker.FileTypeChoices.Add("Mp4_Vga", new List <string>() { ".mp4_Vga" }); fileSavePicker.FileTypeChoices.Add("Mp4_Wvga", new List <string>() { ".mp4_Wvga" }); fileSavePicker.FileTypeChoices.Add("Wav_High", new List <string>() { ".wav_High" }); fileSavePicker.FileTypeChoices.Add("Wav_Low", new List <string>() { ".wav_Low" }); fileSavePicker.FileTypeChoices.Add("Wav_Medium", new List <string>() { ".wav_Medium" }); fileSavePicker.FileTypeChoices.Add("Wma_High", new List <string>() { ".wma_High" }); fileSavePicker.FileTypeChoices.Add("Wma_Low", new List <string>() { ".wma_Low" }); fileSavePicker.FileTypeChoices.Add("Wma_Medium", new List <string>() { ".wma_Medium" }); fileSavePicker.FileTypeChoices.Add("Wmv_HD1080p", new List <string>() { ".wmv_HD1080p" }); fileSavePicker.FileTypeChoices.Add("Wmv_HD720p", new List <string>() { ".wmv_HD720p" }); fileSavePicker.FileTypeChoices.Add("Wmv_Ntsc", new List <string>() { ".wmv_Ntsc" }); fileSavePicker.FileTypeChoices.Add("Wmv_Pal", new List <string>() { ".wmv_Pal" }); fileSavePicker.FileTypeChoices.Add("Wmv_Qvga", new List <string>() { ".wmv_Qvga" }); fileSavePicker.FileTypeChoices.Add("Wmv_Vga", new List <string>() { ".wmv_Vga" }); fileSavePicker.FileTypeChoices.Add("Wmv_Wvga", new List <string>() { ".wmv_Wvga" }); fileSavePicker.SuggestedFileName = FileName ?? "output"; StorageFile outputFile = await fileSavePicker.PickSaveFileAsync(); if (outputFile == null) { throw new Exception(); } ResetStages(solidColorBrush, 100, "100% done."); Save.Content = "Cancel"; StorageFile temporaryFile = await GetFile("Video", "temp (1).mp4", cancellationToken); if (temporaryFile == null) { return; } MediaEncodingProfile mediaEncodingProfile = null; string fileType = outputFile.FileType.Replace(".", ""); if (fileType.ToLower() == "mp4") { using (Stream stream = await temporaryFile.OpenStreamForReadAsync()) { buffer = new byte[stream.Length]; CancelTask(cancellationToken); stream.Read(buffer, 0, buffer.Length); ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 45); using (Stream writeStream = await outputFile.OpenStreamForWriteAsync()) { CancelTask(cancellationToken); writeStream.Write(buffer, 0, buffer.Length); }; ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 90); }; ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 100); Save.Content = "Convert/Save"; return; } else { try { await outputFile.RenameAsync(outputFile.DisplayName + "." + fileType.Split('_')[0], NameCollisionOption.GenerateUniqueName); } catch (Exception ex) { await MessageBox(ex.Message); } } CancelTask(cancellationToken); MediaFileType mediaFileType = default(MediaFileType); VideoEncodingQuality videoEncodingQuality = default(VideoEncodingQuality); AudioEncodingQuality audioEncodingQuality = default(AudioEncodingQuality); Enum.TryParse <MediaFileType>(fileType.Split('_')[0], true, out mediaFileType); Enum.TryParse <VideoEncodingQuality>(fileType.Split('_')[1], true, out videoEncodingQuality); Enum.TryParse <AudioEncodingQuality>(fileType.Split('_')[1], true, out audioEncodingQuality); switch (mediaFileType) { case MediaFileType.avi: { mediaEncodingProfile = MediaEncodingProfile.CreateAvi(videoEncodingQuality); break; } case MediaFileType.m4a: { mediaEncodingProfile = MediaEncodingProfile.CreateM4a(audioEncodingQuality); break; } case MediaFileType.mp3: { mediaEncodingProfile = MediaEncodingProfile.CreateMp3(audioEncodingQuality); break; } case MediaFileType.mp4: { mediaEncodingProfile = MediaEncodingProfile.CreateMp4(videoEncodingQuality); break; } case MediaFileType.wav: { mediaEncodingProfile = MediaEncodingProfile.CreateWav(audioEncodingQuality); break; } case MediaFileType.wma: { mediaEncodingProfile = MediaEncodingProfile.CreateWma(audioEncodingQuality); break; } case MediaFileType.wmv: { mediaEncodingProfile = MediaEncodingProfile.CreateWmv(videoEncodingQuality); break; } } CancelTask(cancellationToken); await SetTranscoder(temporaryFile, outputFile, mediaEncodingProfile, cancellationToken); }
/// <summary> /// 提供音视频转码 /// </summary> /// <param name="SourceFile">源文件</param> /// <param name="DestinationFile">目标文件</param> /// <param name="MediaTranscodeEncodingProfile">转码编码</param> /// <param name="MediaTranscodeQuality">转码质量</param> /// <param name="SpeedUp">是否启用硬件加速</param> /// <returns></returns> public static Task TranscodeFromAudioOrVideoAsync(StorageFile SourceFile, StorageFile DestinationFile, string MediaTranscodeEncodingProfile, string MediaTranscodeQuality, bool SpeedUp) { return Task.Factory.StartNew((ob) => { IsAnyTransformTaskRunning = true; AVTranscodeCancellation = new CancellationTokenSource(); var Para = (ValueTuple<StorageFile, StorageFile, string, string, bool>)ob; MediaTranscoder Transcoder = new MediaTranscoder { HardwareAccelerationEnabled = true, VideoProcessingAlgorithm = Para.Item5 ? MediaVideoProcessingAlgorithm.Default : MediaVideoProcessingAlgorithm.MrfCrf444 }; try { MediaEncodingProfile Profile = null; VideoEncodingQuality VideoQuality = default; AudioEncodingQuality AudioQuality = default; switch (Para.Item4) { case "UHD2160p": VideoQuality = VideoEncodingQuality.Uhd2160p; break; case "QVGA": VideoQuality = VideoEncodingQuality.Qvga; break; case "HD1080p": VideoQuality = VideoEncodingQuality.HD1080p; break; case "HD720p": VideoQuality = VideoEncodingQuality.HD720p; break; case "WVGA": VideoQuality = VideoEncodingQuality.Wvga; break; case "VGA": VideoQuality = VideoEncodingQuality.Vga; break; case "High": AudioQuality = AudioEncodingQuality.High; break; case "Medium": AudioQuality = AudioEncodingQuality.Medium; break; case "Low": AudioQuality = AudioEncodingQuality.Low; break; } switch (Para.Item3) { case "MKV": Profile = MediaEncodingProfile.CreateHevc(VideoQuality); break; case "MP4": Profile = MediaEncodingProfile.CreateMp4(VideoQuality); break; case "WMV": Profile = MediaEncodingProfile.CreateWmv(VideoQuality); break; case "AVI": Profile = MediaEncodingProfile.CreateAvi(VideoQuality); break; case "MP3": Profile = MediaEncodingProfile.CreateMp3(AudioQuality); break; case "ALAC": Profile = MediaEncodingProfile.CreateAlac(AudioQuality); break; case "WMA": Profile = MediaEncodingProfile.CreateWma(AudioQuality); break; case "M4A": Profile = MediaEncodingProfile.CreateM4a(AudioQuality); break; } PrepareTranscodeResult Result = Transcoder.PrepareFileTranscodeAsync(Para.Item1, Para.Item2, Profile).AsTask().Result; if (Result.CanTranscode) { SendUpdatableToastWithProgressForTranscode(Para.Item1, Para.Item2); Progress<double> TranscodeProgress = new Progress<double>((CurrentValue) => { NotificationData Data = new NotificationData(); Data.SequenceNumber = 0; Data.Values["ProgressValue"] = (Math.Ceiling(CurrentValue) / 100).ToString(); Data.Values["ProgressValueString"] = Convert.ToInt32(CurrentValue) + "%"; ToastNotificationManager.CreateToastNotifier().Update(Data, "TranscodeNotification"); }); Result.TranscodeAsync().AsTask(AVTranscodeCancellation.Token, TranscodeProgress).Wait(); ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Success"; } else { ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "NotSupport"; Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait(); } } catch (AggregateException) { ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Cancel"; Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait(); } catch (Exception e) { ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = e.Message; Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait(); } }, (SourceFile, DestinationFile, MediaTranscodeEncodingProfile, MediaTranscodeQuality, SpeedUp), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Current).ContinueWith((task, ob) => { AVTranscodeCancellation.Dispose(); AVTranscodeCancellation = null; var Para = (ValueTuple<StorageFile, StorageFile>)ob; if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] is string ExcuteStatus) { CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { switch (ExcuteStatus) { case "Success": TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Success"), 5000); ShowTranscodeCompleteNotification(Para.Item1, Para.Item2); break; case "Cancel": TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Cancel"), 5000); ShowTranscodeCancelNotification(); break; case "NotSupport": TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_NotSupport"), 5000); break; default: TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Failure") + ExcuteStatus, 5000); break; } }).AsTask().Wait(); } IsAnyTransformTaskRunning = false; }, (SourceFile, DestinationFile), TaskScheduler.Current); }
private void GetPresetProfile(ComboBox combobox) { _Profile = null; VideoEncodingQuality videoEncodingProfile = VideoEncodingQuality.Wvga; switch (combobox.SelectedIndex) { case 0: videoEncodingProfile = VideoEncodingQuality.HD1080p; break; case 1: videoEncodingProfile = VideoEncodingQuality.HD720p; break; case 2: videoEncodingProfile = VideoEncodingQuality.Wvga; break; case 3: videoEncodingProfile = VideoEncodingQuality.Ntsc; break; case 4: videoEncodingProfile = VideoEncodingQuality.Pal; break; case 5: videoEncodingProfile = VideoEncodingQuality.Vga; break; case 6: videoEncodingProfile = VideoEncodingQuality.Qvga; break; } //根据画质选择格式 switch (_OutputType) { case "AVI": _Profile = MediaEncodingProfile.CreateAvi(videoEncodingProfile); break; case "WMV": _Profile = MediaEncodingProfile.CreateWmv(videoEncodingProfile); break; default: _Profile = MediaEncodingProfile.CreateMp4(videoEncodingProfile); break; } /* * 对于代码转换音频配置文件,创建编码使用这些api的一个概要: * MediaEncodingProfile.CreateMp3(audioEncodingProfile) * MediaEncodingProfile.CreateM4a(audioEncodingProfile) * MediaEncodingProfile.CreateWma(audioEncodingProfile) * MediaEncodingProfile.CreateWav(audioEncodingProfile) * audioEncodingProfile是其中一个预设:AudioEncodingQuality。 * AudioEncodingQuality高。 * 媒介AudioEncodingQuality.Low */ }