<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
[
<!ENTITY product "mkvinfo">
<!ENTITY version "67.0.0">
<!ENTITY date "2022-04-10">

<!ENTITY mkvmerge "<citerefentry><refentrytitle>mkvmerge</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY mkvinfo "<citerefentry><refentrytitle>mkvinfo</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY mkvextract "<citerefentry><refentrytitle>mkvextract</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY mkvpropedit "<citerefentry><refentrytitle>mkvpropedit</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY mtxgui "<citerefentry><refentrytitle>mkvtoolnix-gui</refentrytitle><manvolnum>1</manvolnum></citerefentry>">

<!ENTITY matroska "<productname>Matroska</productname>">
<!ENTITY oggvorbis "<productname>OggVorbis</productname>">
<!ENTITY xml "<abbrev>XML</abbrev>">

]>

<refentry lang="en" id="mkvinfo">
 <refentryinfo>
  <productname>&product;</productname>
  <date>&date;</date>
  <authorgroup>
   <author>
    <contrib>Developer</contrib>
    <firstname>Moritz</firstname>
    <surname>Bunkus</surname>
    <email>moritz@bunkus.org</email>
   </author>
  </authorgroup>
 </refentryinfo>
 <refmeta>
  <refentrytitle>&product;</refentrytitle>
  <manvolnum>1</manvolnum>
  <refmiscinfo class="version">&version;</refmiscinfo>
  <refmiscinfo class="date">&date;</refmiscinfo>
  <refmiscinfo class="source">MKVToolNix</refmiscinfo>
  <refmiscinfo class="manual">User Commands</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>&product;</refname>
  <refpurpose>Print information about elements in &matroska; files</refpurpose>
 </refnamediv>

 <refsynopsisdiv id="mkvinfo.synopsis">
  <title>Synopsis</title>
  <cmdsynopsis>
   <command>mkvinfo</command>
   <arg>options</arg>
   <arg choice="req">source-filename</arg>
  </cmdsynopsis>
 </refsynopsisdiv>

 <refsect1 id="mkvinfo.description">
  <title>Description</title>
  <para>
   This program lists all elements contained in a &matroska;. The output can be limited to a list of tracks in the file including
   information about the codecs used.
  </para>

  <variablelist>
   <varlistentry id="mkvinfo.description.all">
    <term><option>-a</option>, <option>--all</option></term>
    <listitem>
     <para>
      By default &mkvinfo; stops when it encounters the first cluster.  Additionally it doesn't show certain often occurring elements.  With
      this option &mkvinfo; will continue processing regardless of the verbosity level and show all elements.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.checksums">
    <term><option>-c</option>, <option>--checksums</option></term>
    <listitem>
     <para>
      Calculates and display the <function>Adler-32</function> checksum for each frame. Useful for debugging only.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.continue">
    <term><option>-o</option>, <option>--continue</option></term>
    <listitem>
     <para>
      By default &mkvinfo; stops when it encounters the first cluster.  With this option &mkvinfo; will continue processing regardless of
      the verbosity level.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.hex_positions">
    <term><option>-p</option>, <option>--hex-positions</option></term>
    <listitem>
     <para>
      Show the positions of all elements in hexadecimal regardless of the verbosity level.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.positions">
    <term><option>-P</option>, <option>--positions</option></term>
    <listitem>
     <para>
      Show the positions of all elements in decimal regardless of the verbosity level.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.summary">
    <term><option>-s</option>, <option>--summary</option></term>
    <listitem>
     <para>
      Only show a terse summary of what &mkvinfo; finds and not each element.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.track_info">
    <term><option>-t</option>, <option>--track-info</option></term>
    <listitem>
     <para>
      Show statistics for each track in verbose mode. Also sets verbosity to 1 if it was at level 0 before.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.hexdump">
    <term><option>-x</option>, <option>--hexdump</option></term>
    <listitem>
     <para>
      Show the first 16 bytes of each frame as a hex dump.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.full_hexdump">
    <term><option>-X</option>, <option>--full-hexdump</option></term>
    <listitem>
     <para>
      Show all bytes of each frame as a hex dump.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.size">
    <term><option>-z</option>, <option>--size</option></term>
    <listitem>
     <para>
      Show the size of each element including its header.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.command_line_charset">
    <term><option>--command-line-charset</option> <parameter>character-set</parameter></term>
    <listitem>
     <para>
      Sets the character set to convert strings given on the command line from. It defaults to the character set given by system's current
      locale.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.output_charset">
    <term><option>--output-charset</option> <parameter>character-set</parameter></term>
    <listitem>
     <para>
      Sets the character set to which strings are converted that are to be output.  It defaults to the character set given by system's
      current locale.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.redirect_output">
    <term><option>-r</option>, <option>--redirect-output</option> <parameter>file-name</parameter></term>
    <listitem>
     <para>
      Writes all messages to the file <parameter>file-name</parameter> instead of to the console.  While this can be done easily with
      output redirection there are cases in which this option is needed: when the terminal reinterprets the output before writing it to a
      file.  The character set set with <link
      linkend="mkvinfo.description.output_charset"><option>--output-charset</option></link> is honored.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.ui_language">
    <term><option>--ui-language</option> <parameter>code</parameter></term>
    <listitem>
     <para>
      Forces the translations for the language <parameter>code</parameter> to be used (e.g.  '<literal>de_DE</literal>' for the German
      translations). Entering '<literal>list</literal>' as the <parameter>code</parameter> will cause the program to output a list of
      available translations.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.abort_on_warnings">
    <term><option>--abort-on-warnings</option></term>
    <listitem>
     <para>
      Tells the program to abort after the first warning is emitted. The program's exit code will be 1.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.debug">
    <term><option>--debug</option> <parameter>topic</parameter></term>
    <listitem>
     <para>
      Turn on debugging for a specific feature. This option is only useful for developers.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.engage">
    <term><option>--engage</option> <parameter>feature</parameter></term>
    <listitem>
     <para>
      Turn on experimental features. A list of available features can be requested with <command>mkvinfo --engage list</command>. These
      features are not meant to be used in normal situations.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.gui_mode">
    <term><option>--gui-mode</option></term>
    <listitem>
     <para>
      Turns on GUI mode. In this mode specially-formatted lines may be output that can tell a controlling GUI what's happening. These
      messages follow the format '<literal>#GUI#message</literal>'. The message may be followed by key/value pairs as in
      '<literal>#GUI#message#key1=value1#key2=value2…</literal>'. Neither the messages nor the keys are ever translated and always output
      in English.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.verbose">
    <term><option>-v</option>, <option>--verbose</option></term>
    <listitem>
     <para>
      Be more verbose. See the section about <link linkend="mkvinfo.verbosity_levels">verbosity levels</link> for a description which
      information will be output at which level.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.help">
    <term><option>-h</option>, <option>--help</option></term>
    <listitem>
     <para>
      Show usage information and exit.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.version">
    <term><option>-V</option>, <option>--version</option></term>
    <listitem>
     <para>
      Show version information and exit.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.description.options_file">
    <term><option>@</option><parameter>options-file.json</parameter></term>
    <listitem>
     <para>
      Reads additional command line arguments from the file <parameter>options-file</parameter>. For a full explanation on the supported
      formats for such files see the section called "Option files" in the &mkvmerge; man page.
     </para>
    </listitem>
   </varlistentry>
  </variablelist>
 </refsect1>

 <refsect1 id="mkvinfo.verbosity_levels">
  <title>Verbosity levels</title>

  <para>
   The <link linkend="mkvinfo.description.verbose"><option>-v</option></link> option can be used to increase &mkvinfo;'s verbosity level
   and print more information about the current file.
  </para>

  <para>
   At level 0 &mkvinfo; will print only the track headers it finds and their types. &mkvinfo; will exit as soon as the headers are parsed
   completely (more technical: as soon as the first cluster is encountered). In this level the seek head entries and the cues will not be
   displayed -- even if they're located in front of the track information.
  </para>

  <para>
   At level 1 &mkvinfo; will also print all &matroska; elements encountered for the complete file but the seek head entries and the cue
   entries. If the summary mode is enabled then &mkvinfo; will output the frame position as well.
  </para>

  <para>
   The same effect can be achieved with the option <option>--continue</option>.
  </para>

  <para>
   At level 2 &mkvinfo; will also print the seek head entries, the cue entries and the file position at which each &matroska; element can be
   found at.
  </para>

  <para>
   The same effect can be achieved with the options <option>--all --positions</option>.
  </para>

  <para>
   At level 3 and above &mkvinfo; will print some information that is not directly connected to a &matroska; element. All other elements
   only print stuff about the elements that were just found. Level 3 adds meta information to ease debugging (read: it's intended for
   developers only). All lines written by level 3 are enclosed in square brackets to make filtering them out easy.
  </para>
 </refsect1>

 <refsect1 id="mkvinfo.text_files_and_charsets">
  <title>Text files and character set conversions</title>

  <para>
   For an in-depth discussion about how all tools in the MKVToolNix suite handle character set conversions, input/output encoding, command
   line encoding and console encoding please see the identically-named section in the &mkvmerge; man page.
  </para>
 </refsect1>

  <refsect1>
  <title>Exit codes</title>

  <para>
   &mkvinfo; exits with one of three exit codes:
  </para>

  <itemizedlist>
   <listitem>
    <para>
     <constant>0</constant> -- This exit code means that the run has completed successfully.
    </para>
   </listitem>

   <listitem>
    <para>
     <constant>1</constant> -- In this case &mkvinfo; has output at least one warning, but the run did continue.  A warning is
     prefixed with the text '<literal>Warning:</literal>'.
    </para>
   </listitem>

   <listitem>
    <para>
     <constant>2</constant> -- This exit code is used after an error occurred.  &mkvinfo; aborts right after outputting the error message.
     Error messages range from wrong command line arguments over read/write errors to broken files.
    </para>
   </listitem>
  </itemizedlist>
 </refsect1>

 <refsect1 id="mkvinfo.environment_variables">
  <title>Environment variables</title>

  <para>
   &mkvinfo; uses the default variables that determine the system's locale (e.g. <varname>LANG</varname> and the <varname>LC_*</varname>
   family). Additional variables:
  </para>

  <variablelist>
   <varlistentry id="mkvinfo.environment_variables.debug">
    <term><varname>MKVINFO_DEBUG</varname>, <varname>MKVTOOLNIX_DEBUG</varname> and its short form <varname>MTX_DEBUG</varname></term>
    <listitem>
     <para>The content is treated as if it had been passed via the <link
     linkend="mkvinfo.description.debug"><option>--debug</option></link> option.</para>
    </listitem>
   </varlistentry>

   <varlistentry id="mkvinfo.environment_variables.engage">
    <term><varname>MKVINFO_ENGAGE</varname>, <varname>MKVTOOLNIX_ENGAGE</varname> and its short form <varname>MTX_ENGAGE</varname></term>
    <listitem>
     <para>The content is treated as if it had been passed via the <link
     linkend="mkvinfo.description.engage"><option>--engage</option></link> option.</para>
    </listitem>
   </varlistentry>
  </variablelist>
 </refsect1>

 <refsect1 id="mkvinfo.seealso">
  <title>See also</title>
  <para>
   &mkvmerge;, &mkvextract;, &mkvpropedit;, &mtxgui;
  </para>
 </refsect1>

 <refsect1 id="mkvinfo.www">
  <title>WWW</title>
  <para>
   The latest version can always be found at <ulink url="https://mkvtoolnix.download/">the MKVToolNix homepage</ulink>.
  </para>
 </refsect1>

</refentry>
