]> git.sesse.net Git - ffmpeg/blobdiff - doc/avconv.texi
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / doc / avconv.texi
index 32808fd32c49ccd2925d4583d70e773890656e4b..3be40b7069903cef4c5514d3a55cffd796cbba5c 100644 (file)
@@ -65,6 +65,20 @@ specified for the inputs.
 
 @c man end DESCRIPTION
 
+@chapter Stream selection
+@c man begin STREAM SELECTION
+
+By default avconv tries to pick the "best" stream of each type present in input
+files and add them to each output file. For video, this means the highest
+resolution, for audio the highest channel count. For subtitle it's simply the
+first subtitle stream.
+
+You can disable some of those defaults by using @code{-vn/-an/-sn} options. For
+full manual control, use the @code{-map} option, which disables the defaults just
+described.
+
+@c man end STREAM SELECTION
+
 @chapter Options
 @c man begin OPTIONS
 
@@ -83,6 +97,34 @@ input file name
 @item -y
 Overwrite output files.
 
+@item -c[:@var{stream_type}][:@var{stream_index}] @var{codec}
+@item -codec[:@var{stream_type}][:@var{stream_index}] @var{codec}
+Select an encoder (when used before an output file) or a decoder (when used
+before an input file) for one or more streams. @var{codec} is the name of a
+decoder/encoder or a special value @code{copy} (output only) to indicate that
+the stream is not to be reencoded.
+
+@var{stream_type} may be 'v' for video, 'a' for audio, 's' for subtitle and 'd'
+for data streams.  @var{stream_index} is a global zero-based stream index if
+@var{stream_type} isn't given, otherwise it counts only streams of the given
+type. If @var{stream_index} is omitted, this option applies to all streams of
+the given type or all streams of any type if @var{stream_type} is missing as
+well (note that this only makes sense when all streams are of the same type or
+@var{codec} is @code{copy}).
+
+For example
+@example
+avconv -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
+@end example
+encodes all video streams with libx264 and copies all audio streams.
+
+For each stream, the last matching @code{c} option is applied, so
+@example
+avconv -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
+@end example
+will copy all the streams except the second video, which will be encoded with
+libx264, and the 138th audio, which will be encoded with libvorbis.
+
 @item -t @var{duration}
 Restrict the transcoded/captured video sequence
 to the duration specified in seconds.
@@ -92,13 +134,16 @@ to the duration specified in seconds.
 Set the file size limit.
 
 @item -ss @var{position}
-Seek to given time position in seconds.
-@code{hh:mm:ss[.xxx]} syntax is also supported.
+When used as an input option (before @code{-i}), seeks in this input file to
+@var{position}. When used as an output option (before an output filename),
+decodes but discards input until the timestamps reach @var{position}. This is
+slower, but more accurate.
+
+@var{position} may be either in seconds or in @code{hh:mm:ss[.xxx]} form.
 
 @item -itsoffset @var{offset}
 Set the input time offset in seconds.
 @code{[-]hh:mm:ss[.xxx]} syntax is also supported.
-This option affects all the input files that follow it.
 The offset is added to the timestamps of the input files.
 Specifying a positive offset means that the corresponding
 streams are delayed by 'offset' seconds.
@@ -145,12 +190,6 @@ avconv -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
 @item -dframes @var{number}
 Set the number of data frames to record.
 
-@item -scodec @var{codec}
-Force subtitle codec ('copy' to copy stream).
-
-@item -newsubtitle
-Add a new subtitle stream to the current output stream.
-
 @item -slang @var{code}
 Set the ISO 639 language code (3 letters) of the current subtitle stream.
 
@@ -164,7 +203,7 @@ Set the number of video frames to record.
 @item -r @var{fps}
 Set frame rate (Hz value, fraction or abbreviation), (default = 25).
 @item -s @var{size}
-Set frame size. The format is @samp{wxh} (avserver default = 160x128, avconv default = same as source).
+Set frame size. The format is @samp{wxh} (ffserver default = 160x128, avconv default = same as source).
 The following abbreviations are recognized:
 @table @samp
 @item sqcif
@@ -271,11 +310,13 @@ It is of little use elsewise.
 @item -bufsize @var{size}
 Set video buffer verifier buffer size (in bits).
 @item -vcodec @var{codec}
-Force video codec to @var{codec}. Use the @code{copy} special value to
-tell that the raw codec data must be copied as is.
-@item -sameq
+Set the video codec. This is an alias for @code{-codec:v}.
+@item -same_quant
 Use same quantizer as source (implies VBR).
 
+Note that this is NOT SAME QUALITY. Do not use this option unless you know you
+need it.
+
 @item -pass @var{n}
 Select the pass number (1 or 2). It is used to do two-pass
 video encoding. The statistics of the video are recorded in the first
@@ -285,8 +326,8 @@ at the exact requested bitrate.
 On pass 1, you may just deactivate audio and set output to null,
 examples for Windows and Unix:
 @example
-avconv -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y NUL
-avconv -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y /dev/null
+avconv -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
+avconv -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
 @end example
 
 @item -passlogfile @var{prefix}
@@ -295,9 +336,6 @@ prefix is ``av2pass''. The complete file name will be
 @file{PREFIX-N.log}, where N is a number specific to the output
 stream.
 
-@item -newvideo
-Add a new video stream to the current output stream.
-
 @item -vlang @var{code}
 Set the ISO 639 language code (3 letters) of the current video stream.
 
@@ -319,8 +357,6 @@ pixel formats.
 Set SwScaler flags.
 @item -g @var{gop_size}
 Set the group of pictures size.
-@item -intra
-Use only intra frames.
 @item -vdt @var{n}
 Discard threshold.
 @item -qscale @var{q}
@@ -533,7 +569,7 @@ Show QP histogram.
 @item -vbsf @var{bitstream_filter}
 Bitstream filters available are "dump_extra", "remove_extra", "noise", "h264_mp4toannexb", "imxdump", "mjpegadump", "mjpeg2jpeg".
 @example
-avconv -i h264.mp4 -vcodec copy -vbsf h264_mp4toannexb -an out.h264
+avconv -i h264.mp4 -c:v copy -vbsf h264_mp4toannexb -an out.h264
 @end example
 @item -force_key_frames @var{time}[,@var{time}...]
 Force key frames at the specified timestamps, more precisely at the first
@@ -563,20 +599,7 @@ and is mapped to the corresponding demuxer options.
 @item -an
 Disable audio recording.
 @item -acodec @var{codec}
-Force audio codec to @var{codec}. Use the @code{copy} special value to
-specify that the raw codec data must be copied as is.
-@item -newaudio
-Add a new audio track to the output file. If you want to specify parameters,
-do so before @code{-newaudio} (@code{-acodec}, @code{-ab}, etc..).
-
-Mapping will be done automatically, if the number of output streams is equal to
-the number of input streams, else it will pick the first one that matches. You
-can override the mapping using @code{-map} as usual.
-
-Example:
-@example
-avconv -i file.mpg -vcodec copy -acodec ac3 -ab 384k test.mpg -acodec mp2 -ab 192k -newaudio
-@end example
+Set the audio codec. This is an alias for @code{-codec:a}.
 @item -alang @var{code}
 Set the ISO 639 language code (3 letters) of the current audio stream.
 @end table
@@ -616,9 +639,7 @@ Bitstream filters available are "dump_extra", "remove_extra", "noise", "mp3comp"
 
 @table @option
 @item -scodec @var{codec}
-Force subtitle codec ('copy' to copy stream).
-@item -newsubtitle
-Add a new subtitle stream to the current output stream.
+Set the subtitle codec. This is an alias for @code{-codec:s}.
 @item -slang @var{code}
 Set the ISO 639 language code (3 letters) of the current subtitle stream.
 @item -sn
@@ -626,7 +647,7 @@ Disable subtitle recording.
 @item -sbsf @var{bitstream_filter}
 Bitstream filters available are "mov2textsub", "text2movsub".
 @example
-avconv -i file.mov -an -vn -sbsf mov2textsub -scodec copy -f rawvideo sub.txt
+avconv -i file.mov -an -vn -sbsf mov2textsub -c:s copy -f rawvideo sub.txt
 @end example
 @end table
 
@@ -640,53 +661,74 @@ Synchronize read on input.
 @section Advanced options
 
 @table @option
-@item -map @var{input_file_id}.@var{input_stream_id}[:@var{sync_file_id}.@var{sync_stream_id}]
+@item -map [-]@var{input_file_id}[:@var{input_stream_type}][:@var{input_stream_id}][,@var{sync_file_id}[:@var{sync_stream_type}][:@var{sync_stream_id}]]
 
-Designate an input stream as a source for the output file. Each input
+Designate one or more input streams as a source for the output file. Each input
 stream is identified by the input file index @var{input_file_id} and
 the input stream index @var{input_stream_id} within the input
-file. Both indexes start at 0. If specified,
-@var{sync_file_id}.@var{sync_stream_id} sets which input stream
+file. Both indices start at 0. If specified,
+@var{sync_file_id}:@var{sync_stream_id} sets which input stream
 is used as a presentation sync reference.
 
-The @code{-map} options must be specified just after the output file.
-If any @code{-map} options are used, the number of @code{-map} options
-on the command line must match the number of streams in the output
-file. The first @code{-map} option on the command line specifies the
+If @var{input_stream_type} is specified -- 'v' for video, 'a' for audio, 's' for
+subtitle and 'd' for data -- then @var{input_stream_id} counts only the streams
+of this type. Same for @var{sync_stream_type}.
+
+@var{input_stream_id} may be omitted, in which case all streams of the given
+type are mapped (or all streams in the file, if no type is specified).
+
+The first @code{-map} option on the command line specifies the
 source for output stream 0, the second @code{-map} option specifies
 the source for output stream 1, etc.
 
+A @code{-} character before the stream identifier creates a "negative" mapping.
+It disables matching streams from already created mappings.
+
+For example, to map ALL streams from the first input file to output
+@example
+avconv -i INPUT -map 0 output
+@end example
+
 For example, if you have two audio streams in the first input file,
-these streams are identified by "0.0" and "0.1". You can use
-@code{-map} to select which stream to place in an output file. For
+these streams are identified by "0:0" and "0:1". You can use
+@code{-map} to select which streams to place in an output file. For
 example:
 @example
-avconv -i INPUT out.wav -map 0.1
+avconv -i INPUT -map 0:1 out.wav
 @end example
-will map the input stream in @file{INPUT} identified by "0.1" to
+will map the input stream in @file{INPUT} identified by "0:1" to
 the (single) output stream in @file{out.wav}.
 
 For example, to select the stream with index 2 from input file
-@file{a.mov} (specified by the identifier "0.2"), and stream with
-index 6 from input @file{b.mov} (specified by the identifier "1.6"),
+@file{a.mov} (specified by the identifier "0:2"), and stream with
+index 6 from input @file{b.mov} (specified by the identifier "1:6"),
 and copy them to the output file @file{out.mov}:
 @example
-avconv -i a.mov -i b.mov -vcodec copy -acodec copy out.mov -map 0.2 -map 1.6
+avconv -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
 @end example
 
-To add more streams to the output file, you can use the
-@code{-newaudio}, @code{-newvideo}, @code{-newsubtitle} options.
+To select all video and the third audio stream from an input file:
+@example
+avconv -i INPUT -map 0:v -map 0:a:2 OUTPUT
+@end example
 
-@item -map_metadata @var{outfile}[,@var{metadata}]:@var{infile}[,@var{metadata}]
-Set metadata information of @var{outfile} from @var{infile}. Note that those
-are file indices (zero-based), not filenames.
-Optional @var{metadata} parameters specify, which metadata to copy - (g)lobal
+To map all the streams except the second audio, use negative mappings
+@example
+avconv -i INPUT -map 0 -map -0:a:1 OUTPUT
+@end example
+
+Note that using this option disables the default mappings for this output file.
+
+@item -map_metadata[:@var{metadata_type}][:@var{index}] @var{infile}[:@var{metadata_type}][:@var{index}]
+Set metadata information of the next output file from @var{infile}. Note that
+those are file indices (zero-based), not filenames.
+Optional @var{metadata_type} parameters specify, which metadata to copy - (g)lobal
 (i.e. metadata that applies to the whole file), per-(s)tream, per-(c)hapter or
 per-(p)rogram. All metadata specifiers other than global must be followed by the
-stream/chapter/program number. If metadata specifier is omitted, it defaults to
+stream/chapter/program index. If metadata specifier is omitted, it defaults to
 global.
 
-By default, global metadata is copied from the first input file to all output files,
+By default, global metadata is copied from the first input file,
 per-stream and per-chapter metadata is copied along with streams/chapters. These
 default mappings are disabled by creating any mapping of the relevant type. A negative
 file index can be used to create a dummy mapping that just disables automatic copying.
@@ -694,7 +736,7 @@ file index can be used to create a dummy mapping that just disables automatic co
 For example to copy metadata from the first stream of the input file to global metadata
 of the output file:
 @example
-avconv -i in.ogg -map_metadata 0:0,s0 out.mp3
+avconv -i in.ogg -map_metadata 0:s:0 out.mp3
 @end example
 @item -map_chapters @var{input_file_index}
 Copy chapters from input file with index @var{input_file_index} to the next
@@ -770,40 +812,7 @@ an output mpegts file:
 avconv -i infile -streamid 0:33 -streamid 1:36 out.ts
 @end example
 @end table
-
-@section Preset files
-
-A preset file contains a sequence of @var{option}=@var{value} pairs,
-one for each line, specifying a sequence of options which would be
-awkward to specify on the command line. Lines starting with the hash
-('#') character are ignored and are used to provide comments. Check
-the @file{ffpresets} directory in the Libav source tree for examples.
-
-Preset files are specified with the @code{vpre}, @code{apre},
-@code{spre}, and @code{fpre} options. The @code{fpre} option takes the
-filename of the preset instead of a preset name as input and can be
-used for any kind of codec. For the @code{vpre}, @code{apre}, and
-@code{spre} options, the options specified in a preset file are
-applied to the currently selected codec of the same type as the preset
-option.
-
-The argument passed to the @code{vpre}, @code{apre}, and @code{spre}
-preset options identifies the preset file to use according to the
-following rules:
-
-First avconv searches for a file named @var{arg}.ffpreset in the
-directories @file{$av_DATADIR} (if set), and @file{$HOME/.avconv}, and in
-the datadir defined at configuration time (usually @file{PREFIX/share/avconv})
-in that order. For example, if the argument is @code{libx264-max}, it will
-search for the file @file{libx264-max.ffpreset}.
-
-If no such file is found, then avconv will search for a file named
-@var{codec_name}-@var{arg}.ffpreset in the above-mentioned
-directories, where @var{codec_name} is the name of the codec to which
-the preset file options will be applied. For example, if you select
-the video codec with @code{-vcodec libx264} and use @code{-vpre max},
-then it will search for the file @file{libx264-max.ffpreset}.
-@c man end
+@c man end OPTIONS
 
 @chapter Tips
 @c man begin TIPS
@@ -843,11 +852,6 @@ To have a constant quality (but a variable bitrate), use the option
 '-qscale n' when 'n' is between 1 (excellent quality) and 31 (worst
 quality).
 
-@item
-When converting video files, you can use the '-sameq' option which
-uses the same quality factor in the encoder as in the decoder.
-It allows almost lossless encoding.
-
 @end itemize
 @c man end TIPS
 
@@ -953,7 +957,7 @@ You can encode to several formats at the same time and define a
 mapping from input stream to output streams:
 
 @example
-avconv -i /tmp/a.wav -ab 64k /tmp/a.mp2 -ab 128k /tmp/b.mp2 -map 0:0 -map 0:0
+avconv -i /tmp/a.wav -map 0:a -b 64k /tmp/a.mp2 -map 0:a -b 128k /tmp/b.mp2
 @end example
 
 Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
@@ -964,7 +968,7 @@ stream, in the order of the definition of output streams.
 You can transcode decrypted VOBs:
 
 @example
-avconv -i snatch_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec libmp3lame -ab 128k snatch.avi
+avconv -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
 @end example
 
 This is a typical DVD ripping example; the input is a VOB file, the
@@ -1008,16 +1012,11 @@ only formats accepting a normal integer are suitable.
 You can put many streams of the same type in the output:
 
 @example
-avconv -i test1.avi -i test2.avi -vcodec copy -acodec copy -vcodec copy -acodec copy test12.avi -newvideo -newaudio
+avconv -i test1.avi -i test2.avi -map 0.3 -map 0.2 -map 0.1 -map 0.0 -c copy test12.nut
 @end example
 
-In addition to the first video and audio streams, the resulting
-output file @file{test12.avi} will contain the second video
-and the second audio stream found in the input streams list.
-
-The @code{-newvideo}, @code{-newaudio} and @code{-newsubtitle}
-options have to be specified immediately after the name of the output
-file to which you want to add them.
+The resulting output file @file{test12.avi} will contain first four streams from
+the input file in reverse order.
 
 @end itemize
 @c man end EXAMPLES
@@ -1039,7 +1038,7 @@ file to which you want to add them.
 @settitle avconv video converter
 
 @c man begin SEEALSO
-avplay(1), avprobe(1), avserver(1) and the Libav HTML documentation
+ffplay(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation
 @c man end
 
 @c man begin AUTHORS