【问题标题】:how to Resize the video according the custom size in WinRT如何根据 WinRT 中的自定义大小调整视频大小
【发布时间】:2015-12-12 12:05:21
【问题描述】:

我有一个关于如何控制 MediaCapture 视频大小的问题。在 MediaCapture 记录中,视频的默认大小似乎是屏幕大小。

例如,当我将 CaptureElement 的 Width 设置为 480,CaptureElement 的 Height 设置为 320 时,我可以看到视频的预览区域为 480*320。但是当我将它录制到一个文件并停止时,文件中视频的大小就是屏幕的大小(查看区域为768 * 1280)。如何将文件中的视频大小设为 320*240?

主要代码是:

            DeviceInformation cameraDevice = await FindDeviceInfo(panel);
            if (cameraDevice == null)
            {
                return;
            }
            var mediaInitSettings = new MediaCaptureInitializationSettings { VideoDeviceId = cameraDevice.Id };
            _encodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Qvga);
            if (_encodingProfile.Video != null)
            {
                _encodingProfile.Video.PixelAspectRatio.Numerator = 4;
                _encodingProfile.Video.PixelAspectRatio.Denominator = 3;
            }
            var isInitialized = false;
            try
            {
                _mediaCapture.VideoDeviceController.PrimaryUse = CaptureUse.Video;
                await _mediaCapture.InitializeAsync(mediaInitSettings);
                isInitialized = true;
                var formatSelector = new Func<VideoEncodingProperties, bool>(ep => ep.Height * ep.Width == 640 * 480 && string.Equals(ep.Subtype, "nv12", StringComparison.OrdinalIgnoreCase));
                var recordFormat = _mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoRecord).OfType<VideoEncodingProperties>().FirstOrDefault(formatSelector);
                var previewFormat = _mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoPreview).OfType<VideoEncodingProperties>().FirstOrDefault(formatSelector);
                if (previewFormat != null)
                    await
                        _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview,
                            previewFormat);
                if (recordFormat != null)
                    await
                        _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoRecord,
                            recordFormat);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception when initializing MediaCapture with {0}: {1}", cameraDevice.Id, ex.ToString());
            }

我尝试使用 MediaComposition,但没有关于 Resize 方法的信息可以帮助我解决问题。我该如何解决?

预览图片的链接是[1]

[1]:http://i.stack.imgur.com/5dnIi.png 结果可以看到更多区域。

【问题讨论】:

  • 我编辑了语法和段落格式,使帖子更易于阅读和理解。

标签: video windows-runtime window-resize


【解决方案1】:

有文档应该涵盖您正在尝试做的事情:

  1. CameraStarterKit
  2. CameraResolution
  3. Set media encoding properties

第一个示例将向您展示一个基本的相机应用程序,并通过一种简单的方式对其进行初始化和录制视频。

第二个将教您如何选择要捕获视频的分辨率。 CaptureElement 的大小与预览帧的大小无关,因为它可以为您进行缩放。

如果您想更改视频分辨率,第三个链接中的文档应该解释了您需要了解的大部分内容。

通过使用 VideoEncodingQuality.Qvga,您可以设置转码流水线。这意味着相机设备将以其默认分辨率捕获视频,然后 Windows 将调整其大小以适合 QVGA 尺寸。这可能会导致质量下降,因此通常建议使用 VideoEncodingQuality.Auto 代替,并使用SetMediaStreamPropertiesAsync 在源头选择视频捕获分辨率,前提是相机支持您所需的尺寸。

最后,最后一个文档链接还提到了一个重要方面:

在某些设备上,相同的硬件引脚用于预览和 捕获流。在这些设备上,设置 一个也会设置另一个。在使用不同硬件的设备上 用于捕获和预览的引脚,可以为每个设置属性 独立流式传输。使用以下代码确定是否 预览和捕获流是独立的。你应该调整你的用户界面 独立启用或禁用流的设置 这个测试的结果。

【讨论】:

  • 您好,很高兴收到您的答复。我看过样品。问题不是分辨率,而是调整大小。我想得到的结果是半屏,但是相机的结果是全屏。可能是ffmpeg的crop命令。它有一些api吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多