|
|
|
*************** FFMPEG soft VCR documentation *****************
|
|
|
|
|
|
|
|
0) Introduction
|
|
|
|
---------------
|
|
|
|
|
|
|
|
FFmpeg is a very fast video and audio encoder. It can grab from
|
|
|
|
files or from a live audio/video source.
|
|
|
|
|
|
|
|
The command line interface is designed to be intuitive, in the sense
|
|
|
|
that ffmpeg tries to figure out all the parameters, when
|
|
|
|
possible. You have usually to give only the target bitrate you want.
|
|
|
|
|
|
|
|
FFmpeg can also convert from any sample rate to any other, and
|
|
|
|
resize video on the fly with a high quality polyphase filter.
|
|
|
|
|
|
|
|
1) Video and Audio grabbing
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
* FFmpeg can use a video4linux compatible video source and any Open
|
|
|
|
Sound System audio source:
|
|
|
|
|
|
|
|
ffmpeg /tmp/out.mpg
|
|
|
|
|
|
|
|
Note that you must activate the right video source and channel
|
|
|
|
before launching ffmpeg. You can use any TV viewer such as xawtv by
|
|
|
|
Gerd Knorr which I find very good. You must also set correctly the
|
|
|
|
audio recording levels with a standard mixer.
|
|
|
|
|
|
|
|
2) Video and Audio file format convertion
|
|
|
|
-----------------------------------------
|
|
|
|
|
|
|
|
* ffmpeg can use any supported file format and protocol as input:
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
* You can input from YUV files:
|
|
|
|
|
|
|
|
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
|
|
|
|
|
|
|
|
It will use the files:
|
|
|
|
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
|
|
|
|
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
|
|
|
|
|
|
|
|
The Y files use twice the resolution of the U and V files. They are
|
|
|
|
raw files, without header. They can be generated by all decent video
|
|
|
|
decoders. You must specify the size of the image with the '-s' option
|
|
|
|
if ffmpeg cannot guess it.
|
|
|
|
|
|
|
|
* You can input from a RAW YUV420P file:
|
|
|
|
|
|
|
|
ffmpeg -i /tmp/test.yuv /tmp/out.avi
|
|
|
|
|
|
|
|
The RAW YUV420P is a file containing RAW YUV planar, for each frame first
|
|
|
|
come the Y plane followed by U and V planes, which are half vertical and
|
|
|
|
horizontal resolution.
|
|
|
|
|
|
|
|
* You can output to a RAW YUV420P file:
|
|
|
|
|
|
|
|
ffmpeg -i mydivx.avi -o hugefile.yuv
|
|
|
|
|
|
|
|
* You can set several input files and output files:
|
|
|
|
|
|
|
|
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
|
|
|
|
|
|
|
|
Convert the audio file a.wav and the raw yuv video file a.yuv
|
|
|
|
to mpeg file a.mpg
|
|
|
|
|
|
|
|
* You can also do audio and video convertions at the same time:
|
|
|
|
|
|
|
|
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
|
|
|
|
|
|
|
|
Convert the sample rate of a.wav to 22050 Hz and encode it to MPEG audio.
|
|
|
|
|
|
|
|
* You can encode to several formats at the same time and define a
|
|
|
|
mapping from input stream to output streams:
|
|
|
|
|
|
|
|
ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
|
|
|
|
|
|
|
|
Convert a.wav to a.mp2 at 64 kbits and b.mp2 at 128 kbits. '-map
|
|
|
|
file:index' specify which input stream is used for each output
|
|
|
|
stream, in the order of the definition of output streams.
|
|
|
|
|
|
|
|
* You can transcode decrypted VOBs
|
|
|
|
|
|
|
|
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec
|
|
|
|
mp3 -ab 128 snatch.avi
|
|
|
|
|
|
|
|
This is a typicall DVD ripper example, input from a VOB file, output to
|
|
|
|
an AVI file with MPEG-4 video and MP3 audio, note that in this command we
|
|
|
|
use B frames so the MPEG-4 stream is DivX5 compatible, GOP size is 300
|
|
|
|
that means an INTRA frame every 10 seconds for 29.97 fps input video.
|
|
|
|
Also the audio stream is MP3 encoded so you need LAME support which is
|
|
|
|
enabled using '--enable-mp3lame' when configuring.
|
|
|
|
The mapping is particullary usefull for DVD transcoding to get the desired
|
|
|
|
audio language.
|
|
|
|
|
|
|
|
NOTE: to see the supported input formats, use 'ffmpeg -formats'.
|
|
|
|
|
|
|
|
2) Invocation
|
|
|
|
-------------
|
|
|
|
|
|
|
|
* The generic syntax is :
|
|
|
|
|
|
|
|
ffmpeg [[options][-i input_file]]... {[options] output_file}...
|
|
|
|
|
|
|
|
If no input file is given, audio/video grabbing is done.
|
|
|
|
|
|
|
|
As a general rule, options are applied to the next specified
|
|
|
|
file. For example, if you give the '-b 64' option, it sets the video
|
|
|
|
bitrate of the next file. Format option may be needed for raw input
|
|
|
|
files.
|
|
|
|
|
|
|
|
By default, ffmpeg tries to convert as losslessly as possible: it
|
|
|
|
uses the same audio and video parameter fors the outputs as the one
|
|
|
|
specified for the inputs.
|
|
|
|
|
|
|
|
* Main options are:
|
|
|
|
|
|
|
|
-L show license
|
|
|
|
-h show help
|
|
|
|
-formats show available formats, codecs, protocols, ...
|
|
|
|
-f fmt force format
|
|
|
|
-i filename input file name
|
|
|
|
-y overwrite output files
|
|
|
|
-t duration set the recording time
|
|
|
|
-title string set the title
|
|
|
|
-author string set the author
|
|
|
|
-copyright string set the copyright
|
|
|
|
-comment string set the comment
|
|
|
|
-b bitrate set video bitrate (in kbit/s)
|
|
|
|
|
|
|
|
* Video Options are:
|
|
|
|
|
|
|
|
-s size set frame size [160x128]
|
|
|
|
-r fps set frame rate [25]
|
|
|
|
-b bitrate set the video bitrate in kbit/s [200]
|
|
|
|
-vn disable video recording [no]
|
|
|
|
-bt tolerance set video bitrate tolerance (in kbit/s)
|
|
|
|
-sameq use same video quality as source (implies VBR)
|
|
|
|
-ab bitrate set audio bitrate (in kbit/s)
|
|
|
|
|
|
|
|
* Audio Options are:
|
|
|
|
|
|
|
|
-ar freq set the audio sampling freq [44100]
|
|
|
|
-ab bitrate set the audio bitrate in kbit/s [64]
|
|
|
|
-ac channels set the number of audio channels [1]
|
|
|
|
-an disable audio recording [no]
|
|
|
|
|
|
|
|
* Advanced options are:
|
|
|
|
|
|
|
|
-map file:stream set input stream mapping
|
|
|
|
-g gop_size set the group of picture size
|
|
|
|
-intra use only intra frames
|
|
|
|
-qscale q use fixed video quantiser scale (VBR)
|
|
|
|
-qmin q min video quantiser scale (VBR)
|
|
|
|
-qmax q max video quantiser scale (VBR)
|
|
|
|
-qdiff q max difference between the quantiser scale (VBR)
|
|
|
|
-qblur blur video quantiser scale blur (VBR)
|
|
|
|
-qcomp compression video quantiser scale compression (VBR)
|
|
|
|
-vd device set video device
|
|
|
|
-vcodec codec force video codec
|
|
|
|
-me method set motion estimation method
|
|
|
|
-bf frames use 'frames' B frames (only MPEG-4)
|
|
|
|
-hq activate high quality settings
|
|
|
|
-4mv use four motion vector by macroblock (only MPEG-4)
|
|
|
|
-ad device set audio device
|
|
|
|
-acodec codec force audio codec
|
|
|
|
-deinterlace deinterlace pictures
|
|
|
|
-benchmark add timings for benchmarking
|
|
|
|
-hex dump each input packet
|
|
|
|
-psnr calculate PSNR of compressed frames
|
|
|
|
-vstats dump video coding statistics to file
|
|
|
|
|
|
|
|
The output file can be "-" to output to a pipe. This is only possible
|
|
|
|
with mpeg1 and h263 formats.
|
|
|
|
|
|
|
|
3) Protocols
|
|
|
|
|
|
|
|
ffmpeg handles also many protocols specified with the URL syntax.
|
|
|
|
|
|
|
|
Use 'ffmpeg -formats' to have a list of the supported protocols.
|
|
|
|
|
|
|
|
The protocol 'http:' is currently used only to communicate with
|
|
|
|
ffserver (see the ffserver documentation). When ffmpeg will be a
|
|
|
|
video player it will also be used for streaming :-)
|
|
|
|
|
|
|
|
4) File formats and codecs
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
Use 'ffmpeg -formats' to have a list of the supported output
|
|
|
|
formats. Only some formats are handled as input, but it will improve
|
|
|
|
in the next versions.
|
|
|
|
|
|
|
|
5) Tips
|
|
|
|
-------
|
|
|
|
|
|
|
|
- For streaming at very low bit rate application, use a low frame rate
|
|
|
|
and a small gop size. This is especially true for real video where
|
|
|
|
the Linux player does not seem to be very fast, so it can miss
|
|
|
|
frames. An example is:
|
|
|
|
|
|
|
|
ffmpeg -g 3 -r 3 -t 10 -b 50 -s qcif -f rv10 /tmp/b.rm
|
|
|
|
|
|
|
|
- The parameter 'q' which is displayed while encoding is the current
|
|
|
|
quantizer. The value of 1 indicates that a very good quality could
|
|
|
|
be achieved. The value of 31 indicates the worst quality. If q=31
|
|
|
|
too often, it means that the encoder cannot compress enough to meet
|
|
|
|
your bit rate. You must either increase the bit rate, decrease the
|
|
|
|
frame rate or decrease the frame size.
|
|
|
|
|
|
|
|
- If your computer is not fast enough, you can speed up the
|
|
|
|
compression at the expense of the compression ratio. You can use
|
|
|
|
'-me zero' to speed up motion estimation, and '-intra' to disable
|
|
|
|
completly motion estimation (you have only I frames, which means it
|
|
|
|
is about as good as JPEG compression).
|
|
|
|
|
|
|
|
- To have very low bitrates in audio, reduce the sampling frequency
|
|
|
|
(down to 22050 kHz for mpeg audio, 22050 or 11025 for ac3).
|
|
|
|
|
|
|
|
- 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).
|
|
|
|
|
|
|
|
- When converting video files, you can use the '-sameq' option which
|
|
|
|
uses in the encoder the same quality factor than in the decoder. It
|
|
|
|
allows to be almost lossless in encoding.
|