yading@10: @chapter Demuxers yading@10: @c man begin DEMUXERS yading@10: yading@10: Demuxers are configured elements in FFmpeg which allow to read the yading@10: multimedia streams from a particular type of file. yading@10: yading@10: When you configure your FFmpeg build, all the supported demuxers yading@10: are enabled by default. You can list all available ones using the yading@10: configure option @code{--list-demuxers}. yading@10: yading@10: You can disable all the demuxers using the configure option yading@10: @code{--disable-demuxers}, and selectively enable a single demuxer with yading@10: the option @code{--enable-demuxer=@var{DEMUXER}}, or disable it yading@10: with the option @code{--disable-demuxer=@var{DEMUXER}}. yading@10: yading@10: The option @code{-formats} of the ff* tools will display the list of yading@10: enabled demuxers. yading@10: yading@10: The description of some of the currently available demuxers follows. yading@10: yading@10: @section applehttp yading@10: yading@10: Apple HTTP Live Streaming demuxer. yading@10: yading@10: This demuxer presents all AVStreams from all variant streams. yading@10: The id field is set to the bitrate variant index number. By setting yading@10: the discard flags on AVStreams (by pressing 'a' or 'v' in ffplay), yading@10: the caller can decide which variant streams to actually receive. yading@10: The total bitrate of the variant that the stream belongs to is yading@10: available in a metadata key named "variant_bitrate". yading@10: yading@10: @anchor{concat} yading@10: @section concat yading@10: yading@10: Virtual concatenation script demuxer. yading@10: yading@10: This demuxer reads a list of files and other directives from a text file and yading@10: demuxes them one after the other, as if all their packet had been muxed yading@10: together. yading@10: yading@10: The timestamps in the files are adjusted so that the first file starts at 0 yading@10: and each next file starts where the previous one finishes. Note that it is yading@10: done globally and may cause gaps if all streams do not have exactly the same yading@10: length. yading@10: yading@10: All files must have the same streams (same codecs, same time base, etc.). yading@10: yading@10: The duration of each file is used to adjust the timestamps of the next file: yading@10: if the duration is incorrect (because it was computed using the bit-rate or yading@10: because the file is truncated, for example), it can cause artifacts. The yading@10: @code{duration} directive can be used to override the duration stored in yading@10: each file. yading@10: yading@10: @subsection Syntax yading@10: yading@10: The script is a text file in extended-ASCII, with one directive per line. yading@10: Empty lines, leading spaces and lines starting with '#' are ignored. The yading@10: following directive is recognized: yading@10: yading@10: @table @option yading@10: yading@10: @item @code{file @var{path}} yading@10: Path to a file to read; special characters and spaces must be escaped with yading@10: backslash or single quotes. yading@10: yading@10: All subsequent directives apply to that file. yading@10: yading@10: @item @code{ffconcat version 1.0} yading@10: Identify the script type and version. It also sets the @option{safe} option yading@10: to 1 if it was to its default -1. yading@10: yading@10: To make FFmpeg recognize the format automatically, this directive must yading@10: appears exactly as is (no extra space or byte-order-mark) on the very first yading@10: line of the script. yading@10: yading@10: @item @code{duration @var{dur}} yading@10: Duration of the file. This information can be specified from the file; yading@10: specifying it here may be more efficient or help if the information from the yading@10: file is not available or accurate. yading@10: yading@10: If the duration is set for all files, then it is possible to seek in the yading@10: whole concatenated video. yading@10: yading@10: @end table yading@10: yading@10: @subsection Options yading@10: yading@10: This demuxer accepts the following option: yading@10: yading@10: @table @option yading@10: yading@10: @item safe yading@10: If set to 1, reject unsafe file paths. A file path is considered safe if it yading@10: does not contain a protocol specification and is relative and all components yading@10: only contain characters from the portable character set (letters, digits, yading@10: period, underscore and hyphen) and have no period at the beginning of a yading@10: component. yading@10: yading@10: If set to 0, any file name is accepted. yading@10: yading@10: The default is -1, it is equivalent to 1 if the format was automatically yading@10: probed and 0 otherwise. yading@10: yading@10: @end table yading@10: yading@10: @section libquvi yading@10: yading@10: Play media from Internet services using the quvi project. yading@10: yading@10: The demuxer accepts a @option{format} option to request a specific quality. It yading@10: is by default set to @var{best}. yading@10: yading@10: See @url{http://quvi.sourceforge.net/} for more information. yading@10: yading@10: FFmpeg needs to be built with @code{--enable-libquvi} for this demuxer to be yading@10: enabled. yading@10: yading@10: @section image2 yading@10: yading@10: Image file demuxer. yading@10: yading@10: This demuxer reads from a list of image files specified by a pattern. yading@10: The syntax and meaning of the pattern is specified by the yading@10: option @var{pattern_type}. yading@10: yading@10: The pattern may contain a suffix which is used to automatically yading@10: determine the format of the images contained in the files. yading@10: yading@10: The size, the pixel format, and the format of each image must be the yading@10: same for all the files in the sequence. yading@10: yading@10: This demuxer accepts the following options: yading@10: @table @option yading@10: @item framerate yading@10: Set the frame rate for the video stream. It defaults to 25. yading@10: @item loop yading@10: If set to 1, loop over the input. Default value is 0. yading@10: @item pattern_type yading@10: Select the pattern type used to interpret the provided filename. yading@10: yading@10: @var{pattern_type} accepts one of the following values. yading@10: @table @option yading@10: @item sequence yading@10: Select a sequence pattern type, used to specify a sequence of files yading@10: indexed by sequential numbers. yading@10: yading@10: A sequence pattern may contain the string "%d" or "%0@var{N}d", which yading@10: specifies the position of the characters representing a sequential yading@10: number in each filename matched by the pattern. If the form yading@10: "%d0@var{N}d" is used, the string representing the number in each yading@10: filename is 0-padded and @var{N} is the total number of 0-padded yading@10: digits representing the number. The literal character '%' can be yading@10: specified in the pattern with the string "%%". yading@10: yading@10: If the sequence pattern contains "%d" or "%0@var{N}d", the first filename of yading@10: the file list specified by the pattern must contain a number yading@10: inclusively contained between @var{start_number} and yading@10: @var{start_number}+@var{start_number_range}-1, and all the following yading@10: numbers must be sequential. yading@10: yading@10: For example the pattern "img-%03d.bmp" will match a sequence of yading@10: filenames of the form @file{img-001.bmp}, @file{img-002.bmp}, ..., yading@10: @file{img-010.bmp}, etc.; the pattern "i%%m%%g-%d.jpg" will match a yading@10: sequence of filenames of the form @file{i%m%g-1.jpg}, yading@10: @file{i%m%g-2.jpg}, ..., @file{i%m%g-10.jpg}, etc. yading@10: yading@10: Note that the pattern must not necessarily contain "%d" or yading@10: "%0@var{N}d", for example to convert a single image file yading@10: @file{img.jpeg} you can employ the command: yading@10: @example yading@10: ffmpeg -i img.jpeg img.png yading@10: @end example yading@10: yading@10: @item glob yading@10: Select a glob wildcard pattern type. yading@10: yading@10: The pattern is interpreted like a @code{glob()} pattern. This is only yading@10: selectable if libavformat was compiled with globbing support. yading@10: yading@10: @item glob_sequence @emph{(deprecated, will be removed)} yading@10: Select a mixed glob wildcard/sequence pattern. yading@10: yading@10: If your version of libavformat was compiled with globbing support, and yading@10: the provided pattern contains at least one glob meta character among yading@10: @code{%*?[]@{@}} that is preceded by an unescaped "%", the pattern is yading@10: interpreted like a @code{glob()} pattern, otherwise it is interpreted yading@10: like a sequence pattern. yading@10: yading@10: All glob special characters @code{%*?[]@{@}} must be prefixed yading@10: with "%". To escape a literal "%" you shall use "%%". yading@10: yading@10: For example the pattern @code{foo-%*.jpeg} will match all the yading@10: filenames prefixed by "foo-" and terminating with ".jpeg", and yading@10: @code{foo-%?%?%?.jpeg} will match all the filenames prefixed with yading@10: "foo-", followed by a sequence of three characters, and terminating yading@10: with ".jpeg". yading@10: yading@10: This pattern type is deprecated in favor of @var{glob} and yading@10: @var{sequence}. yading@10: @end table yading@10: yading@10: Default value is @var{glob_sequence}. yading@10: @item pixel_format yading@10: Set the pixel format of the images to read. If not specified the pixel yading@10: format is guessed from the first image file in the sequence. yading@10: @item start_number yading@10: Set the index of the file matched by the image file pattern to start yading@10: to read from. Default value is 0. yading@10: @item start_number_range yading@10: Set the index interval range to check when looking for the first image yading@10: file in the sequence, starting from @var{start_number}. Default value yading@10: is 5. yading@10: @item video_size yading@10: Set the video size of the images to read. If not specified the video yading@10: size is guessed from the first image file in the sequence. yading@10: @end table yading@10: yading@10: @subsection Examples yading@10: yading@10: @itemize yading@10: @item yading@10: Use @command{ffmpeg} for creating a video from the images in the file yading@10: sequence @file{img-001.jpeg}, @file{img-002.jpeg}, ..., assuming an yading@10: input frame rate of 10 frames per second: yading@10: @example yading@10: ffmpeg -i 'img-%03d.jpeg' -r 10 out.mkv yading@10: @end example yading@10: yading@10: @item yading@10: As above, but start by reading from a file with index 100 in the sequence: yading@10: @example yading@10: ffmpeg -start_number 100 -i 'img-%03d.jpeg' -r 10 out.mkv yading@10: @end example yading@10: yading@10: @item yading@10: Read images matching the "*.png" glob pattern , that is all the files yading@10: terminating with the ".png" suffix: yading@10: @example yading@10: ffmpeg -pattern_type glob -i "*.png" -r 10 out.mkv yading@10: @end example yading@10: @end itemize yading@10: yading@10: @section rawvideo yading@10: yading@10: Raw video demuxer. yading@10: yading@10: This demuxer allows to read raw video data. Since there is no header yading@10: specifying the assumed video parameters, the user must specify them yading@10: in order to be able to decode the data correctly. yading@10: yading@10: This demuxer accepts the following options: yading@10: @table @option yading@10: yading@10: @item framerate yading@10: Set input video frame rate. Default value is 25. yading@10: yading@10: @item pixel_format yading@10: Set the input video pixel format. Default value is @code{yuv420p}. yading@10: yading@10: @item video_size yading@10: Set the input video size. This value must be specified explicitly. yading@10: @end table yading@10: yading@10: For example to read a rawvideo file @file{input.raw} with yading@10: @command{ffplay}, assuming a pixel format of @code{rgb24}, a video yading@10: size of @code{320x240}, and a frame rate of 10 images per second, use yading@10: the command: yading@10: @example yading@10: ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw yading@10: @end example yading@10: yading@10: @section sbg yading@10: yading@10: SBaGen script demuxer. yading@10: yading@10: This demuxer reads the script language used by SBaGen yading@10: @url{http://uazu.net/sbagen/} to generate binaural beats sessions. A SBG yading@10: script looks like that: yading@10: @example yading@10: -SE yading@10: a: 300-2.5/3 440+4.5/0 yading@10: b: 300-2.5/0 440+4.5/3 yading@10: off: - yading@10: NOW == a yading@10: +0:07:00 == b yading@10: +0:14:00 == a yading@10: +0:21:00 == b yading@10: +0:30:00 off yading@10: @end example yading@10: yading@10: A SBG script can mix absolute and relative timestamps. If the script uses yading@10: either only absolute timestamps (including the script start time) or only yading@10: relative ones, then its layout is fixed, and the conversion is yading@10: straightforward. On the other hand, if the script mixes both kind of yading@10: timestamps, then the @var{NOW} reference for relative timestamps will be yading@10: taken from the current time of day at the time the script is read, and the yading@10: script layout will be frozen according to that reference. That means that if yading@10: the script is directly played, the actual times will match the absolute yading@10: timestamps up to the sound controller's clock accuracy, but if the user yading@10: somehow pauses the playback or seeks, all times will be shifted accordingly. yading@10: yading@10: @section tedcaptions yading@10: yading@10: JSON captions used for @url{http://www.ted.com/, TED Talks}. yading@10: yading@10: TED does not provide links to the captions, but they can be guessed from the yading@10: page. The file @file{tools/bookmarklets.html} from the FFmpeg source tree yading@10: contains a bookmarklet to expose them. yading@10: yading@10: This demuxer accepts the following option: yading@10: @table @option yading@10: @item start_time yading@10: Set the start time of the TED talk, in milliseconds. The default is 15000 yading@10: (15s). It is used to sync the captions with the downloadable videos, because yading@10: they include a 15s intro. yading@10: @end table yading@10: yading@10: Example: convert the captions to a format most players understand: yading@10: @example yading@10: ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt yading@10: @end example yading@10: yading@10: @c man end DEMUXERS