ffprobe: implement -sections option
This commit is contained in:
parent
196765a7cc
commit
c8a5365dcf
@ -28,6 +28,7 @@ version <next>:
|
|||||||
- new expansion syntax for drawtext
|
- new expansion syntax for drawtext
|
||||||
- BRender PIX image decoder
|
- BRender PIX image decoder
|
||||||
- ffprobe -show_entries option
|
- ffprobe -show_entries option
|
||||||
|
- ffprobe -sections option
|
||||||
|
|
||||||
|
|
||||||
version 1.0:
|
version 1.0:
|
||||||
|
@ -45,6 +45,10 @@ ffprobe output is designed to be easily parsable by a textual filter,
|
|||||||
and consists of one or more sections of a form defined by the selected
|
and consists of one or more sections of a form defined by the selected
|
||||||
writer, which is specified by the @option{print_format} option.
|
writer, which is specified by the @option{print_format} option.
|
||||||
|
|
||||||
|
Sections may contain other nested sections, and are identified by a
|
||||||
|
name (which may be shared by other sections), and an unique
|
||||||
|
name. See the output of @option{sections}.
|
||||||
|
|
||||||
Metadata tags stored in the container or in the streams are recognized
|
Metadata tags stored in the container or in the streams are recognized
|
||||||
and printed in the corresponding "FORMAT" or "STREAM" section.
|
and printed in the corresponding "FORMAT" or "STREAM" section.
|
||||||
|
|
||||||
@ -94,6 +98,10 @@ For example for printing the output in JSON format, specify:
|
|||||||
For more details on the available output printing formats, see the
|
For more details on the available output printing formats, see the
|
||||||
Writers section below.
|
Writers section below.
|
||||||
|
|
||||||
|
@item -sections
|
||||||
|
Print sections structure and section information, and exit. The output
|
||||||
|
is not meant to be parsed by a machine.
|
||||||
|
|
||||||
@item -select_streams @var{stream_specifier}
|
@item -select_streams @var{stream_specifier}
|
||||||
Select only the streams specified by @var{stream_specifier}. This
|
Select only the streams specified by @var{stream_specifier}. This
|
||||||
option affects only the options related to streams
|
option affects only the options related to streams
|
||||||
|
30
ffprobe.c
30
ffprobe.c
@ -2105,6 +2105,35 @@ static int opt_pretty(void *optctx, const char *opt, const char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void print_section(SectionID id, int level)
|
||||||
|
{
|
||||||
|
const SectionID *pid;
|
||||||
|
const struct section *section = §ions[id];
|
||||||
|
printf("%c%c%c",
|
||||||
|
section->flags & SECTION_FLAG_IS_WRAPPER ? 'W' : '.',
|
||||||
|
section->flags & SECTION_FLAG_IS_ARRAY ? 'A' : '.',
|
||||||
|
section->flags & SECTION_FLAG_HAS_VARIABLE_FIELDS ? 'V' : '.');
|
||||||
|
printf("%*c %s", level * 4, ' ', section->name);
|
||||||
|
if (section->unique_name)
|
||||||
|
printf("/%s", section->unique_name);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
for (pid = section->children_ids; *pid != -1; pid++)
|
||||||
|
print_section(*pid, level+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int opt_sections(void *optctx, const char *opt, const char *arg)
|
||||||
|
{
|
||||||
|
printf("Sections:\n"
|
||||||
|
"W.. = Section is a wrapper (contains other sections, no local entries)\n"
|
||||||
|
".A. = Section contains an array of elements of the same type\n"
|
||||||
|
"..V = Section may contain a variable number of fields with variable keys\n"
|
||||||
|
"FLAGS NAME/UNIQUE_NAME\n"
|
||||||
|
"---\n");
|
||||||
|
print_section(SECTION_ID_ROOT, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int opt_show_versions(const char *opt, const char *arg)
|
static int opt_show_versions(const char *opt, const char *arg)
|
||||||
{
|
{
|
||||||
mark_section_show_entries(SECTION_ID_PROGRAM_VERSION, 1, NULL);
|
mark_section_show_entries(SECTION_ID_PROGRAM_VERSION, 1, NULL);
|
||||||
@ -2142,6 +2171,7 @@ static const OptionDef real_options[] = {
|
|||||||
"set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml)", "format" },
|
"set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml)", "format" },
|
||||||
{ "of", OPT_STRING | HAS_ARG, {(void*)&print_format}, "alias for -print_format", "format" },
|
{ "of", OPT_STRING | HAS_ARG, {(void*)&print_format}, "alias for -print_format", "format" },
|
||||||
{ "select_streams", OPT_STRING | HAS_ARG, {(void*)&stream_specifier}, "select the specified streams", "stream_specifier" },
|
{ "select_streams", OPT_STRING | HAS_ARG, {(void*)&stream_specifier}, "select the specified streams", "stream_specifier" },
|
||||||
|
{ "sections", OPT_EXIT, {.func_arg = opt_sections}, "print sections structure and section information, and exit" },
|
||||||
{ "show_data", OPT_BOOL, {(void*)&do_show_data}, "show packets data" },
|
{ "show_data", OPT_BOOL, {(void*)&do_show_data}, "show packets data" },
|
||||||
{ "show_error", 0, {(void*)&opt_show_error}, "show probing error" },
|
{ "show_error", 0, {(void*)&opt_show_error}, "show probing error" },
|
||||||
{ "show_format", 0, {(void*)&opt_show_format}, "show format/container info" },
|
{ "show_format", 0, {(void*)&opt_show_format}, "show format/container info" },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user