Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MediaInfo CLI (Command Line Interface) Syntax Teaching Me Once & For All

Dear Friends at Stack Overflow, There is a pattern of questioning here that I noticed in many categories, but for the sake of this topic I'll talk about MediaInfo CLI. The same type of questions keep re-occurring because the source problem is NOT solved, which is to teach people how to fish, rather than feeding them with fish.

Some people ask: "I do not know how to get BitRate only from MediaInfo". They are respected, and the advanced users who answer them are also respected. Others ask the same question for FrameRate, Duration, & Resolution... I respect them, and also respect those who answer them.

However, I'm truly sorry for this process to be redundant. Unfortunately the MediaInfo website documentation does not clarify how to properly use MediaInfo.exe with the CLI version to extract specific information, and the --Info Parameters just lists a lot of parameters without instructing how to use them.

So in order to extract specific information for a video using MediaInfo.exe CLI, I'll just have to kindly ask here because I am unable to customize the parameters myself, since I don't get the syntax on the documentation. I would have taken the easy way to just ask you what kind of information I need to extract from the video, but then every one who doesn't know the syntax will come back asking for redundant questions.

Instead, I decided to waste a bit more of your time by writing all this, in hopes that you will help me and everyone else who will come searching for this specific question on How to Use the MediaInfo CLI --Info-Parameters Syntax so that the answers aren't repeated for every custom inquiry.

I honestly want to understand how to use it, and not just copy pasting the ready made one-line answers I will receive.

I'll start by mentioning what I know, that any new inquirer may learn from the very little I know, and then I'll kindly ask you to teach me how to write proper MediaInfo --Info-Parameters syntax to extract specific video information.

  1. After you Download MediaInfo the CLI version for Windows, extract the zip file and put it on your Desktop.
  2. RUN + CMD
  3. Navigate to the MediaInfo Folder on the Desktop.
  4. Put some Video files in the MediaInfo folder.
  5. Run the following on the terminal:

    MediaInfo.exe --help >Help.txt

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

Now you have some help files to search for your required information. The rest of this simple documentation depends on the generosity of my fellow StackOverflow members.

To be more clear about my question, once and for all: How can I write proper syntax for the MediaInfo.exe CLI to extract specific information such as FrameRate, Duration, & Resolution? I need to understand the syntax more than the ready-made solution to be able to customize it later.

Thank you for your time!

like image 239
Arto Kalishian Avatar asked Dec 19 '16 22:12

Arto Kalishian


3 Answers

When you run mediainfo --Info-Parameters, you will notice that there are seven sections: General, Video, Audio, Text, Other, Image, and Menu. Each of these sections contains many different parameters that contain various information about the file and get called with the format --Output=SectionName;%Parameter%. You can pick multiple parameters from the same section name, separating them with any text you like (including \n for newlines (but not \t for tabs, interestingly)), like --Output=SectionName;%Parameter1%\n%Parameter2%.

You can also add your own text, which gets displayed as however you wrote it, allowing you to label the output for easier reading later. For example, to get the file name, duration, and file size, you can use the command mediainfo --Output="General;File Name: %FileName%\r\nDuration: %Duration/String3%\r\nSize: %FileSize/String%" video.mkv

If you want to get data from multiple sections (like adding video dimensions to the above information), you will have to use a template, as there is no way to get data from multiple sections in the same --Output command and having multiple instances of --Output cancel each other out until you get left with the last one in the list. In the template, specify one section per line and add the parameters to their respective sections, like this:

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

These parameters will be displayed in the order that they were written in the template, and you cannot go back and forth between sections (in this example, I couldn't add more General parameters after the Video section). To call a template, use the syntax mediainfo --Output=file://template.txt video.mkv or mediainfo --Output=file://C:\full\path\to\the\template.txt video.mkv.

like image 120
SomethingDark Avatar answered Oct 27 '22 22:10

SomethingDark


This is also possible on the command line:

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

Note the "\n" between the sections

Tested on Ubuntu 18.04 MediaInfo Command line, MediaInfoLib - v17.12

like image 41
u628898 Avatar answered Oct 27 '22 20:10

u628898


These days I came across a command line tool called jq. This tool uses filters to manipulate json data like if you are querying a Database.
It seems to me that this tool could be a perfect companion for mediainfo capability of outputting JSON.
Certainly mediainfo parameters are difficult to use but most of us knows how to handle json. Time will be best spent learning jq's filter language than deciphering cryptic mediainfo parameter options ;)

Workflow is more or less like this.

  • Know what info you want to extract from media file.
  • Use jq and its filters to extract it.

Commands

See all info on media file in a pretty formatted json

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

Customize jq filters to get the desired result.

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

Extracted info...

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

Possiibilities are endless once you get familiar with jq's filters.

like image 3
cachique Avatar answered Oct 27 '22 22:10

cachique