有没有办法通过javascript获取webm的框架宽度和框架高度属性?

问题描述

以下是我尝试访问的属性

propertyHelp001

我查看了 mediainfo.js (https://github.com/buzz/mediainfo.js?files=1),老实说我无法弄清楚。

我还看到有人提到可以使用“媒体信息”(https://mediaarea.net/en/MediaInfo) CLI 来完成此操作,但我找不到有关如何完成此操作的任何说明。

我也试过像这样使用 wmic:

var exec = require('child_process').exec
exec('wmic datafile where name="C:\\\\some_path\\\\MyTestCourse\\\\test_conversion\\\\testProject001\\\\videos\\\\video0.webm" get NaturalVideoWidth ',function(err,stdout,stderr){
        if(!err){
            console.log(stdout)
        };
    });

但我认为它无法访问我正在寻找的内容

我需要能够在终端中运行它,作为我正在做的视频批量转换的一部分。我正在使用 nodejs 和批处理文件来完成此操作。

非常感谢您提供任何见解或建议。

解决方法

这是一个在 Node.js 中运行的(在我的机器上运行™️)脚本。希望能帮助到你。我使用来自 https://www.webmfiles.org/demo-files/

的测试视频
const { promises } = require("fs");
const MediaInfoFactory = require("mediainfo.js");

function getReadChunkFunction(fileHandle) {
  async function readChunk(size,offset) {
    const buffer = new Uint8Array(size);
    await fileHandle.read(buffer,size,offset);
    return buffer;
  }

  return readChunk;
}

async function readMetaData(filepath) {
  const mediaInfo = await MediaInfoFactory({ format: "JSON",coverData: true });
  const fileHandle = await promises.open(filepath,"r");
  const fileSize = (await fileHandle.stat()).size;
  const readChunk = getReadChunkFunction(fileHandle);
  const result = await mediaInfo.analyzeData(() => fileSize,readChunk);
  return result;
}

// Usage example:

readMetaData(__dirname + "/big-buck-bunny_trailer.webm").then((result) => {
  const data = JSON.parse(result);
  const videoMetaData = data.media.track.find((item) => item["@type"] === "Video");
  const { Width,Height } = videoMetaData;

  console.log("Width",Width);
  console.log("Height",Height);
});

mediainfo 的原始输出如下所示,展开代码段进行检查。

{
  "media": {
    "@ref": "","track": [
      {
        "@type": "General","UniqueID": "94077224337973666327274415816295077565","VideoCount": "1","AudioCount": "1","Format": "WebM","Format_Version": "1","FileSize": "2165175","Duration": "32.480","OverallBitRate_Mode": "VBR","OverallBitRate": "533294","FrameRate": "25.000","FrameCount": "812","StreamSize": "121714","IsStreamable": "Yes","Encoded_Date": "UTC 2010-05-20 08:21:12","Encoded_Application": "Sorenson Squeeze","Encoded_Library": "http://sourceforge.net/projects/yamka"
      },{
        "@type": "Video","StreamOrder": "0","ID": "1","UniqueID": "38308775201223106","Format": "VP8","CodecID": "V_VP8","BitRate": "439316","Width": "640","Height": "360","PixelAspectRatio": "1.000","DisplayAspectRatio": "1.778","FrameRate_Mode": "CFR","Compression_Mode": "Lossy","Delay": "0.000","StreamSize": "1783621","Language": "en","Default": "Yes","Forced": "No"
      },{
        "@type": "Audio","StreamOrder": "1","ID": "2","UniqueID": "110618262945856186","Format": "Vorbis","Format_Settings_Floor": "1","CodecID": "A_VORBIS","BitRate_Mode": "VBR","BitRate": "64000","Channels": "1","SamplingRate": "44100","SamplingCount": "1432368","Delay_Source": "Container","StreamSize": "259840","StreamSize_Proportion": "0.12001","Encoded_Library": "Xiph.Org libVorbis I 20100325 (Everywhere)","Encoded_Library_Name": "libVorbis","Encoded_Library_Version": "(Everywhere)","Encoded_Library_Date": "20100325 (Everywhere)","Forced": "No"
      }
    ]
  }
}