【问题标题】:MediaInfo CLI (Command Line Interface) Syntax Teaching Me Once & For AllMediaInfo CLI(命令行界面)语法教我一劳永逸
【发布时间】:2017-05-05 01:26:38
【问题描述】:

Stack Overflow 上的各位朋友, 我在许多类别中都注意到这里有一种提问模式,但为了这个主题,我将讨论 MediaInfo CLI。相同类型的问题不断重复出现,因为源问题解决,这是教人们如何钓鱼,而不是用鱼喂他们。

有人问: “我不知道如何仅从 MediaInfo 获取比特率”。他们受到尊重,回答他们的高级用户也受到尊重。其他人对 FrameRate、Duration 和 Resolution 提出同样的问题……我尊重他们,也尊重那些回答他们的人。

但是,我真的很抱歉这个过程是多余的。不幸的是,MediaInfo 网站文档没有说明如何正确使用 MediaInfo.exe 和 CLI 版本来提取特定信息,而 --Info 参数只是列出了很多参数,而没有说明如何使用它们。

因此,为了使用 MediaInfo.exe CLI 提取视频的特定信息,我只需要在这里询问,因为我自己无法自定义参数,因为我没有获得文档上的语法。我会采取简单的方法,只是问你我需要从视频中提取什么样的信息,但是每个不知道语法的人都会回来询问多余的问题。

相反,我决定写这一切来浪费你更多的时间,希望你能帮助我和其他所有来搜索这个关于如何使用 MediaInfo CLI 的特定问题的人—— Info-Parameters Syntax 这样就不会为每个自定义查询重复答案。

我真的想了解如何使用它,而不仅仅是复制粘贴我将收到的现成的单行答案。

我将首先提到我所知道的,任何新的询问者都可以从我所知道的很少的东西中学习,然后我会请你教我如何编写正确的 MediaInfo --Info-Parameters 语法来提取具体的视频信息。

  1. 下载适用于 Windows 的 MediaInfo CLI 版本后,解压缩 zip 文件并将其放在桌面上。
  2. 运行 + CMD
  3. 导航到桌面上的 MediaInfo 文件夹。
  4. 将一些视频文件放入 MediaInfo 文件夹中。
  5. 在终端上运行以下命令:

    MediaInfo.exe --help >Help.txt

    MediaInfo.exe --Info-Parameters >Info_Parameters.txt

现在您有一些帮助文件来搜索您所需的信息。这个简单文档的其余部分取决于我的 StackOverflow 成员的慷慨。

为了更清楚地了解我的问题,一劳永逸:如何为 MediaInfo.exe CLI 编写正确的语法以提取帧速率、持续时间和分辨率等特定信息?我需要比现成的解决方案更了解语法,以便以后能够对其进行自定义。

感谢您的宝贵时间!

【问题讨论】:

    标签: syntax parameters command-line-interface info mediainfo


    【解决方案1】:

    当您运行mediainfo --Info-Parameters 时,您会注意到有七个部分:常规、视频、音频、文本、其他、图像和菜单。这些部分中的每一个都包含许多不同的参数,这些参数包含有关文件的各种信息,并以--Output=SectionName;%Parameter% 格式调用。您可以从同一个部分名称中选择多个参数,用您喜欢的任何文本分隔它们(包括换行符的 \n(但有趣的是,制表符不包括 \t)),例如 --Output=SectionName;%Parameter1%\n%Parameter2%

    您还可以添加自己的文本,以您编写的方式显示,允许您标记输出以便以后阅读。例如获取文件名、时长、文件大小,可以使用命令mediainfo --Output="General;File Name: %FileName%\r\nDuration: %Duration/String3%\r\nSize: %FileSize/String%" video.mkv

    如果您想从多个部分获取数据(例如在上述信息中添加视频尺寸),则必须使用模板,因为无法在同一个--Output 命令中从多个部分获取数据,并且有多个 --Output 实例相互抵消,直到您得到列表中的最后一个。在模板中,每行指定一个节,并将参数添加到各自的节中,如下所示:

    General;File Name: %FileName%\r\nOverall Bit Rate: %OverallBitRate/String%\r\nDuration: %Duration/String3%\r\nFormat: .%FileExtension%\r\nSize: %FileSize/String%\r\n
    Video;Dimensions: %Width%x%Height%\r\n
    

    这些参数将按照它们在模板中写入的顺序显示,并且您不能在部分之间来回切换(在此示例中,我无法在 Video 部分之后添加更多 General 参数)。要调用模板,请使用语法mediainfo --Output=file://template.txt video.mkvmediainfo --Output=file://C:\full\path\to\the\template.txt video.mkv

    【讨论】:

      【解决方案2】:

      这在命令行上也可以:

      mediainfo --Output=$'General;File Name: %FileName%\\r\\nOverall Bit Rate: %OverallBitRate/String%\\r\\nDuration: %Duration/String3%\\r\\nFormat: .%FileExtension%\\r\\nSize: %FileSize/String%\nVideo;\\r\\nDimensions: %Width%x%Height%\\r\\n' input.file
      

      注意各部分之间的“\n”

      在 Ubuntu 18.04 MediaInfo 命令行上测试, MediaInfoLib - v17.12

      【讨论】:

      • 有谁知道如何在鱼壳中使用它?美元($)在鱼壳中是非法的。
      【解决方案3】:

      这些天我遇到了一个名为jq 的命令行工具。此工具使用过滤器来处理 json 数据,就像您查询数据库一样。
      在我看来,这个工具可以成为 mediainfo 输出 JSON 能力的完美伴侣。
      当然mediainfo 参数很难使用,但我们大多数人都知道如何处理json。最好花时间学习jq 的过滤器语言,而不是解读神秘的mediainfo 参数选项;)

      工作流程或多或少是这样的。

      • 知道要从媒体文件中提取哪些信息。
      • 使用jq 及其过滤器来提取它。

      命令

      以格式精美的json查看有关媒体文件的所有信息

      #> mediainfo --output=JSON myVideo.mp4 | jq .

      自定义jq 过滤器以获得所需的结果。

      #> mediainfo myVideo.mp4 --output=JSON | jq '.media.track[1] | {FrameRate: .FrameRate, Duration: .Duration, Width: .Width, Height: .Height}'

      提取的信息...

      {
        "FrameRate": "30.000",
        "Duration": "158.334",
        "Width": "320",
        "Height": "176"
      }
      

      一旦您熟悉了jq 的过滤器,就会有无限可能。

      【讨论】:

      • 您也可以根据需要“grep”mediainfo (mediainfo -f) 的完整输出,但它实际上并不能回答 OP 的问题。
      猜你喜欢
      • 2016-07-20
      • 2017-06-16
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多