1\input texinfo @c -*- texinfo -*- 2 3@settitle ffprobe Documentation 4@titlepage 5@center @titlefont{ffprobe Documentation} 6@end titlepage 7 8@top 9 10@contents 11 12@chapter Synopsis 13 14ffprobe [@var{options}] [@file{input_file}] 15 16@chapter Description 17@c man begin DESCRIPTION 18 19ffprobe gathers information from multimedia streams and prints it in 20human- and machine-readable fashion. 21 22For example it can be used to check the format of the container used 23by a multimedia stream and the format and type of each media stream 24contained in it. 25 26If a filename is specified in input, ffprobe will try to open and 27probe the file content. If the file cannot be opened or recognized as 28a multimedia file, a positive exit code is returned. 29 30ffprobe may be employed both as a standalone application or in 31combination with a textual filter, which may perform more 32sophisticated processing, e.g. statistical processing or plotting. 33 34Options are used to list some of the formats supported by ffprobe or 35for specifying which information to display, and for setting how 36ffprobe will show it. 37 38ffprobe output is designed to be easily parsable by a textual filter, 39and consists of one or more sections of a form defined by the selected 40writer, which is specified by the @option{print_format} option. 41 42Sections may contain other nested sections, and are identified by a 43name (which may be shared by other sections), and an unique 44name. See the output of @option{sections}. 45 46Metadata tags stored in the container or in the streams are recognized 47and printed in the corresponding "FORMAT", "STREAM" or "PROGRAM_STREAM" 48section. 49 50@c man end 51 52@chapter Options 53@c man begin OPTIONS 54 55@include fftools-common-opts.texi 56 57@section Main options 58 59@table @option 60 61@item -f @var{format} 62Force format to use. 63 64@item -unit 65Show the unit of the displayed values. 66 67@item -prefix 68Use SI prefixes for the displayed values. 69Unless the "-byte_binary_prefix" option is used all the prefixes 70are decimal. 71 72@item -byte_binary_prefix 73Force the use of binary prefixes for byte values. 74 75@item -sexagesimal 76Use sexagesimal format HH:MM:SS.MICROSECONDS for time values. 77 78@item -pretty 79Prettify the format of the displayed values, it corresponds to the 80options "-unit -prefix -byte_binary_prefix -sexagesimal". 81 82@item -of, -print_format @var{writer_name}[=@var{writer_options}] 83Set the output printing format. 84 85@var{writer_name} specifies the name of the writer, and 86@var{writer_options} specifies the options to be passed to the writer. 87 88For example for printing the output in JSON format, specify: 89@example 90-print_format json 91@end example 92 93For more details on the available output printing formats, see the 94Writers section below. 95 96@item -sections 97Print sections structure and section information, and exit. The output 98is not meant to be parsed by a machine. 99 100@item -select_streams @var{stream_specifier} 101Select only the streams specified by @var{stream_specifier}. This 102option affects only the options related to streams 103(e.g. @code{show_streams}, @code{show_packets}, etc.). 104 105For example to show only audio streams, you can use the command: 106@example 107ffprobe -show_streams -select_streams a INPUT 108@end example 109 110To show only video packets belonging to the video stream with index 1: 111@example 112ffprobe -show_packets -select_streams v:1 INPUT 113@end example 114 115@item -show_data 116Show payload data, as a hexadecimal and ASCII dump. Coupled with 117@option{-show_packets}, it will dump the packets' data. Coupled with 118@option{-show_streams}, it will dump the codec extradata. 119 120The dump is printed as the "data" field. It may contain newlines. 121 122@item -show_data_hash @var{algorithm} 123Show a hash of payload data, for packets with @option{-show_packets} and for 124codec extradata with @option{-show_streams}. 125 126@item -show_error 127Show information about the error found when trying to probe the input. 128 129The error information is printed within a section with name "ERROR". 130 131@item -show_format 132Show information about the container format of the input multimedia 133stream. 134 135All the container format information is printed within a section with 136name "FORMAT". 137 138@item -show_format_entry @var{name} 139Like @option{-show_format}, but only prints the specified entry of the 140container format information, rather than all. This option may be given more 141than once, then all specified entries will be shown. 142 143This option is deprecated, use @code{show_entries} instead. 144 145@item -show_entries @var{section_entries} 146Set list of entries to show. 147 148Entries are specified according to the following 149syntax. @var{section_entries} contains a list of section entries 150separated by @code{:}. Each section entry is composed by a section 151name (or unique name), optionally followed by a list of entries local 152to that section, separated by @code{,}. 153 154If section name is specified but is followed by no @code{=}, all 155entries are printed to output, together with all the contained 156sections. Otherwise only the entries specified in the local section 157entries list are printed. In particular, if @code{=} is specified but 158the list of local entries is empty, then no entries will be shown for 159that section. 160 161Note that the order of specification of the local section entries is 162not honored in the output, and the usual display order will be 163retained. 164 165The formal syntax is given by: 166@example 167@var{LOCAL_SECTION_ENTRIES} ::= @var{SECTION_ENTRY_NAME}[,@var{LOCAL_SECTION_ENTRIES}] 168@var{SECTION_ENTRY} ::= @var{SECTION_NAME}[=[@var{LOCAL_SECTION_ENTRIES}]] 169@var{SECTION_ENTRIES} ::= @var{SECTION_ENTRY}[:@var{SECTION_ENTRIES}] 170@end example 171 172For example, to show only the index and type of each stream, and the PTS 173time, duration time, and stream index of the packets, you can specify 174the argument: 175@example 176packet=pts_time,duration_time,stream_index : stream=index,codec_type 177@end example 178 179To show all the entries in the section "format", but only the codec 180type in the section "stream", specify the argument: 181@example 182format : stream=codec_type 183@end example 184 185To show all the tags in the stream and format sections: 186@example 187stream_tags : format_tags 188@end example 189 190To show only the @code{title} tag (if available) in the stream 191sections: 192@example 193stream_tags=title 194@end example 195 196@item -show_packets 197Show information about each packet contained in the input multimedia 198stream. 199 200The information for each single packet is printed within a dedicated 201section with name "PACKET". 202 203@item -show_frames 204Show information about each frame and subtitle contained in the input 205multimedia stream. 206 207The information for each single frame is printed within a dedicated 208section with name "FRAME" or "SUBTITLE". 209 210@item -show_streams 211Show information about each media stream contained in the input 212multimedia stream. 213 214Each media stream information is printed within a dedicated section 215with name "STREAM". 216 217@item -show_programs 218Show information about programs and their streams contained in the input 219multimedia stream. 220 221Each media stream information is printed within a dedicated section 222with name "PROGRAM_STREAM". 223 224@item -show_chapters 225Show information about chapters stored in the format. 226 227Each chapter is printed within a dedicated section with name "CHAPTER". 228 229@item -count_frames 230Count the number of frames per stream and report it in the 231corresponding stream section. 232 233@item -count_packets 234Count the number of packets per stream and report it in the 235corresponding stream section. 236 237@item -read_intervals @var{read_intervals} 238 239Read only the specified intervals. @var{read_intervals} must be a 240sequence of interval specifications separated by ",". 241@command{ffprobe} will seek to the interval starting point, and will 242continue reading from that. 243 244Each interval is specified by two optional parts, separated by "%". 245 246The first part specifies the interval start position. It is 247interpreted as an abolute position, or as a relative offset from the 248current position if it is preceded by the "+" character. If this first 249part is not specified, no seeking will be performed when reading this 250interval. 251 252The second part specifies the interval end position. It is interpreted 253as an absolute position, or as a relative offset from the current 254position if it is preceded by the "+" character. If the offset 255specification starts with "#", it is interpreted as the number of 256packets to read (not including the flushing packets) from the interval 257start. If no second part is specified, the program will read until the 258end of the input. 259 260Note that seeking is not accurate, thus the actual interval start 261point may be different from the specified position. Also, when an 262interval duration is specified, the absolute end time will be computed 263by adding the duration to the interval start point found by seeking 264the file, rather than to the specified start value. 265 266The formal syntax is given by: 267@example 268@var{INTERVAL} ::= [@var{START}|+@var{START_OFFSET}][%[@var{END}|+@var{END_OFFSET}]] 269@var{INTERVALS} ::= @var{INTERVAL}[,@var{INTERVALS}] 270@end example 271 272A few examples follow. 273@itemize 274@item 275Seek to time 10, read packets until 20 seconds after the found seek 276point, then seek to position @code{01:30} (1 minute and thirty 277seconds) and read packets until position @code{01:45}. 278@example 27910%+20,01:30%01:45 280@end example 281 282@item 283Read only 42 packets after seeking to position @code{01:23}: 284@example 28501:23%+#42 286@end example 287 288@item 289Read only the first 20 seconds from the start: 290@example 291%+20 292@end example 293 294@item 295Read from the start until position @code{02:30}: 296@example 297%02:30 298@end example 299@end itemize 300 301@item -show_private_data, -private 302Show private data, that is data depending on the format of the 303particular shown element. 304This option is enabled by default, but you may need to disable it 305for specific uses, for example when creating XSD-compliant XML output. 306 307@item -show_program_version 308Show information related to program version. 309 310Version information is printed within a section with name 311"PROGRAM_VERSION". 312 313@item -show_library_versions 314Show information related to library versions. 315 316Version information for each library is printed within a section with 317name "LIBRARY_VERSION". 318 319@item -show_versions 320Show information related to program and library versions. This is the 321equivalent of setting both @option{-show_program_version} and 322@option{-show_library_versions} options. 323 324@item -bitexact 325Force bitexact output, useful to produce output which is not dependent 326on the specific build. 327 328@item -i @var{input_file} 329Read @var{input_file}. 330 331@end table 332@c man end 333 334@chapter Writers 335@c man begin WRITERS 336 337A writer defines the output format adopted by @command{ffprobe}, and will be 338used for printing all the parts of the output. 339 340A writer may accept one or more arguments, which specify the options 341to adopt. The options are specified as a list of @var{key}=@var{value} 342pairs, separated by ":". 343 344All writers support the following options: 345 346@table @option 347@item string_validation, sv 348Set string validation mode. 349 350The following values are accepted. 351@table @samp 352@item fail 353The writer will fail immediately in case an invalid string (UTF-8) 354sequence or code point is found in the input. This is especially 355useful to validate input metadata. 356 357@item ignore 358Any validation error will be ignored. This will result in possibly 359broken output, especially with the json or xml writer. 360 361@item replace 362The writer will substitute invalid UTF-8 sequences or code points with 363the string specified with the @option{string_validation_replacement}. 364@end table 365 366Default value is @samp{replace}. 367 368@item string_validation_replacement, svr 369Set replacement string to use in case @option{string_validation} is 370set to @samp{replace}. 371 372In case the option is not specified, the writer will assume the empty 373string, that is it will remove the invalid sequences from the input 374strings. 375@end table 376 377A description of the currently available writers follows. 378 379@section default 380Default format. 381 382Print each section in the form: 383@example 384[SECTION] 385key1=val1 386... 387keyN=valN 388[/SECTION] 389@end example 390 391Metadata tags are printed as a line in the corresponding FORMAT, STREAM or 392PROGRAM_STREAM section, and are prefixed by the string "TAG:". 393 394A description of the accepted options follows. 395 396@table @option 397 398@item nokey, nk 399If set to 1 specify not to print the key of each field. Default value 400is 0. 401 402@item noprint_wrappers, nw 403If set to 1 specify not to print the section header and footer. 404Default value is 0. 405@end table 406 407@section compact, csv 408Compact and CSV format. 409 410The @code{csv} writer is equivalent to @code{compact}, but supports 411different defaults. 412 413Each section is printed on a single line. 414If no option is specifid, the output has the form: 415@example 416section|key1=val1| ... |keyN=valN 417@end example 418 419Metadata tags are printed in the corresponding "format" or "stream" 420section. A metadata tag key, if printed, is prefixed by the string 421"tag:". 422 423The description of the accepted options follows. 424 425@table @option 426 427@item item_sep, s 428Specify the character to use for separating fields in the output line. 429It must be a single printable character, it is "|" by default ("," for 430the @code{csv} writer). 431 432@item nokey, nk 433If set to 1 specify not to print the key of each field. Its default 434value is 0 (1 for the @code{csv} writer). 435 436@item escape, e 437Set the escape mode to use, default to "c" ("csv" for the @code{csv} 438writer). 439 440It can assume one of the following values: 441@table @option 442@item c 443Perform C-like escaping. Strings containing a newline ('\n'), carriage 444return ('\r'), a tab ('\t'), a form feed ('\f'), the escaping 445character ('\') or the item separator character @var{SEP} are escaped using C-like fashioned 446escaping, so that a newline is converted to the sequence "\n", a 447carriage return to "\r", '\' to "\\" and the separator @var{SEP} is 448converted to "\@var{SEP}". 449 450@item csv 451Perform CSV-like escaping, as described in RFC4180. Strings 452containing a newline ('\n'), a carriage return ('\r'), a double quote 453('"'), or @var{SEP} are enclosed in double-quotes. 454 455@item none 456Perform no escaping. 457@end table 458 459@item print_section, p 460Print the section name at the begin of each line if the value is 461@code{1}, disable it with value set to @code{0}. Default value is 462@code{1}. 463 464@end table 465 466@section flat 467Flat format. 468 469A free-form output where each line contains an explicit key=value, such as 470"streams.stream.3.tags.foo=bar". The output is shell escaped, so it can be 471directly embedded in sh scripts as long as the separator character is an 472alphanumeric character or an underscore (see @var{sep_char} option). 473 474The description of the accepted options follows. 475 476@table @option 477@item sep_char, s 478Separator character used to separate the chapter, the section name, IDs and 479potential tags in the printed field key. 480 481Default value is '.'. 482 483@item hierarchical, h 484Specify if the section name specification should be hierarchical. If 485set to 1, and if there is more than one section in the current 486chapter, the section name will be prefixed by the name of the 487chapter. A value of 0 will disable this behavior. 488 489Default value is 1. 490@end table 491 492@section ini 493INI format output. 494 495Print output in an INI based format. 496 497The following conventions are adopted: 498 499@itemize 500@item 501all key and values are UTF-8 502@item 503'.' is the subgroup separator 504@item 505newline, '\t', '\f', '\b' and the following characters are escaped 506@item 507'\' is the escape character 508@item 509'#' is the comment indicator 510@item 511'=' is the key/value separator 512@item 513':' is not used but usually parsed as key/value separator 514@end itemize 515 516This writer accepts options as a list of @var{key}=@var{value} pairs, 517separated by ":". 518 519The description of the accepted options follows. 520 521@table @option 522@item hierarchical, h 523Specify if the section name specification should be hierarchical. If 524set to 1, and if there is more than one section in the current 525chapter, the section name will be prefixed by the name of the 526chapter. A value of 0 will disable this behavior. 527 528Default value is 1. 529@end table 530 531@section json 532JSON based format. 533 534Each section is printed using JSON notation. 535 536The description of the accepted options follows. 537 538@table @option 539 540@item compact, c 541If set to 1 enable compact output, that is each section will be 542printed on a single line. Default value is 0. 543@end table 544 545For more information about JSON, see @url{http://www.json.org/}. 546 547@section xml 548XML based format. 549 550The XML output is described in the XML schema description file 551@file{ffprobe.xsd} installed in the FFmpeg datadir. 552 553An updated version of the schema can be retrieved at the url 554@url{http://www.ffmpeg.org/schema/ffprobe.xsd}, which redirects to the 555latest schema committed into the FFmpeg development source code tree. 556 557Note that the output issued will be compliant to the 558@file{ffprobe.xsd} schema only when no special global output options 559(@option{unit}, @option{prefix}, @option{byte_binary_prefix}, 560@option{sexagesimal} etc.) are specified. 561 562The description of the accepted options follows. 563 564@table @option 565 566@item fully_qualified, q 567If set to 1 specify if the output should be fully qualified. Default 568value is 0. 569This is required for generating an XML file which can be validated 570through an XSD file. 571 572@item xsd_compliant, x 573If set to 1 perform more checks for ensuring that the output is XSD 574compliant. Default value is 0. 575This option automatically sets @option{fully_qualified} to 1. 576@end table 577 578For more information about the XML format, see 579@url{http://www.w3.org/XML/}. 580@c man end WRITERS 581 582@chapter Timecode 583@c man begin TIMECODE 584 585@command{ffprobe} supports Timecode extraction: 586 587@itemize 588 589@item 590MPEG1/2 timecode is extracted from the GOP, and is available in the video 591stream details (@option{-show_streams}, see @var{timecode}). 592 593@item 594MOV timecode is extracted from tmcd track, so is available in the tmcd 595stream metadata (@option{-show_streams}, see @var{TAG:timecode}). 596 597@item 598DV, GXF and AVI timecodes are available in format metadata 599(@option{-show_format}, see @var{TAG:timecode}). 600 601@end itemize 602@c man end TIMECODE 603 604@include config.texi 605@ifset config-all 606@set config-readonly 607@ifset config-avutil 608@include utils.texi 609@end ifset 610@ifset config-avcodec 611@include codecs.texi 612@include bitstream_filters.texi 613@end ifset 614@ifset config-avformat 615@include formats.texi 616@include protocols.texi 617@end ifset 618@ifset config-avdevice 619@include devices.texi 620@end ifset 621@ifset config-swresample 622@include resampler.texi 623@end ifset 624@ifset config-swscale 625@include scaler.texi 626@end ifset 627@ifset config-avfilter 628@include filters.texi 629@end ifset 630@end ifset 631 632@chapter See Also 633 634@ifhtml 635@ifset config-all 636@url{ffprobe.html,ffprobe}, 637@end ifset 638@ifset config-not-all 639@url{ffprobe-all.html,ffprobe-all}, 640@end ifset 641@url{ffmpeg.html,ffmpeg}, @url{ffplay.html,ffplay}, @url{ffserver.html,ffserver}, 642@url{ffmpeg-utils.html,ffmpeg-utils}, 643@url{ffmpeg-scaler.html,ffmpeg-scaler}, 644@url{ffmpeg-resampler.html,ffmpeg-resampler}, 645@url{ffmpeg-codecs.html,ffmpeg-codecs}, 646@url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters}, 647@url{ffmpeg-formats.html,ffmpeg-formats}, 648@url{ffmpeg-devices.html,ffmpeg-devices}, 649@url{ffmpeg-protocols.html,ffmpeg-protocols}, 650@url{ffmpeg-filters.html,ffmpeg-filters} 651@end ifhtml 652 653@ifnothtml 654@ifset config-all 655ffprobe(1), 656@end ifset 657@ifset config-not-all 658ffprobe-all(1), 659@end ifset 660ffmpeg(1), ffplay(1), ffserver(1), 661ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1), 662ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1), 663ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1) 664@end ifnothtml 665 666@include authors.texi 667 668@ignore 669 670@setfilename ffprobe 671@settitle ffprobe media prober 672 673@end ignore 674 675@bye 676