WPF:如何读取视频方向(即侧数据:显示矩阵)在mp4与TagLibSharp?

ccgok5k5  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在尝试在WPF MediaElement中显示视频。我用手机拍的。在横向模式下拍摄的视频显示良好,在纵向模式下,它们旋转90度。当在Windows中查看它们时,它们会以正确的方向显示。
我尝试使用TagLib#来检测方向,它报告横向和纵向相同的尺寸VideoHeight:2160和VideoWidth:第380章不管方向
然后我使用ffprobe进一步调查,发现无论方向如何,宽度和高度确实是相同的,但是视频方向信息在“侧面数据:显示矩阵:旋转-90.00度”。

**问题:**如何使用TagLib-Sharp读取侧面数据:从MP4文件中提取DisplayMatrix?

如果TagLib-Sharp不能做到这一点,我还能如何获得这些信息?

8yoxcaq7

8yoxcaq71#

似乎 TagLib-Sharp 根本无法做到这一点。至少我想不出一种方法来做这件事。
但我发现另一个Meta数据阅读库可以读取视频或照片的方向:MetadataExtractor,可以使用Nuget安装。
下面是如何读取Orientation的代码,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或.这是非常方便的,但如果没有提供属性,就有问题,比如Orientation。
  • MetadataExtractor*:提供对所有元数据的访问,但开发人员需要知道该数据使用的名称,这是我在互联网上无法轻松找到的信息。

请参阅我的文章WPF:在www.example.com上以纵向和横向方式正确浏览照片和视频CodeProject.com以获得更详细的解释。

相关问题