WPF:如何使用TagLibSharp读取mp4中的视频方向(即侧面数据:显示矩阵)?

问题描述 投票:0回答:1

我正在尝试在 WPF MediaElement 中显示视频。我用手机拍下了它们。横向模式下拍摄的视频显示效果良好,纵向模式下拍摄的视频会旋转 90 度。在 Windows 中查看它们时,它们会以正确的方向显示。

我尝试使用 TagLib# 来检测方向,它报告横向和纵向相同尺寸的 VideoHeight:2160 和 VideoWidth:3840,无论方向如何。

然后我使用ffprobe进一步调查,发现无论方向如何,宽度和高度确实是相同的,但视频方向信息位于“side data:displaymatrix:旋转-90.00度”中。

问题: 如何使用 TagLib-Sharp 从 mp4 文件读取侧面数据:displaymatrix ?

如果 TagLib-Sharp 无法做到这一点,我还能如何获取此信息?

wpf mp4 device-orientation taglib-sharp
1个回答
0
投票

看来 TagLib-Sharp 根本做不到。至少我不知道如何做到这一点。

但是我发现了另一个可以读取视频或照片方向的元数据读取库:MetadataExtractor,可以使用 Nuget 安装。

这里是如何读取方向的代码,MetadataExtractor实际上调用了Rotation:

using MetadataExtractor;

var isLandscape = true;
var directories = ImageMetadataReader.ReadMetadata("PathAndFilename);
var isRotationFound = false;
foreach (var directory in directories) {
  if (directory.Name=="QuickTime Track Header") {
    foreach (var imageMetadataTag in directory.Tags) {
      if (imageMetadataTag.Name=="Rotation") {
        isRotationFound = true;
        if (imageMetadataTag.Description=="-90") {
          isLandscape = false;
        }
        break;
      }
    }
  }
  if (isRotationFound) break;

}

VideoPlayer.Source = new Uri(startFile.FullName);
VideoPlayer.LayoutTransform =
  isLandscape ? new RotateTransform { Angle = 0 } : new RotateTransform { Angle = 90 };
VideoPlayer.Play();

重要区别

TagLib-Sharp:为元数据提供属性,例如宽度或 ISO 或...这非常方便,但如果没有提供属性,例如方向,则会出现问题。

MetadataExtractor:可以访问所有元数据,但开发人员需要知道该数据使用的名称,这是我在互联网上无法轻松找到的信息。

请参阅 CodeProject.com 上我的文章 WPF:以纵向和横向方式正确显示照片和视频,了解更详细的说明。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.