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