如下内容取自官网文档“Documentation-ffmpeg”和“Documentation-ffmpeg-all”
1 帮助信息
如下选项适用于 ff 系列工具:
-h, -?, -help, --help [arg]显示帮助信息。可指定一个可选参数,以显示针对此参数的帮助信息。如果不指定参数,仅显示基本选项。可用参数如下:long打印高级选项full打印所有选项,包括编码器、解码器、解复用器、复用器、滤镜等的共享或私有选项。decoder=decoder_name打印名为 decoder_name 的解码器的详细信息。使用 -decoders 选项可获取解码器列表。encoder=encoder_name打印名为 encoder_name 的编码器的详细信息。使用 -encoders 选项可获取编码器列表。demuxer=demuxer_name打印名为 demuxer_name 的解复用器的详细信息。使用 -formats 选项可获取解复用器和复用器列表。muxer=muxer_name打印名为 muxer_name 的复用器的详细信息。使用 -formats 选项可获取解复用器和复用器列表。filter=filter_name打印名为 filter_name 的滤镜的详细信息。使用 -filters 选项可获取滤镜列表。
2 通用选项
如下选项适用于 ff 系列工具:
-L显示许可证。-version显示版本。-formats显示可用格式(包含可用设备)。-demuxers显示可用的解复用器。-muxers显示可用的复用器。-devices显示可用的设备。-codecs显示 libavcodec 库支持的所有编解码器。编解码器(codec)是一种简称,媒体位流格式(media bitstream format)是一种更正式和准确的称法。-decoders显示可用的解码器。-encoders显示可用的编码器。-bsfs显示可用的位流滤镜(bitstream filters)。-protocols显示可用的协议。-filters显示可用的 libavfilter 滤镜。-pix_fmts显示可用的视频像素格式。-sample_fmts显示可用的音频采样格式。-layouts显示声道名称及标准声道布局。-colors显示可识别的颜色名。
3 AV 选项
这些选项由 libavformat、libavdevice 及 libavcodec 库直接提供。使用 -help 选项可查看 AV 选项列表。AV 选项有如下两类:
generic:通用选项可用于任意容器、编解码器或设备。容器/设备的通用选项位于 AVFormatContext 中,编解码器的通用选项位于 AVCodecContext 中。
private:私有选项仅用于特定的容器、编解码器或设备。私有选项位于选项对应的容器/设备/编解码器中。
例如要在一个默认为 ID3v2.4 为头的 MP3 文件中写入 ID3v2.3 头,需要使用 MP3 复用器的 id3v2_version 私有选项:
ffmpeg -i input.flac -id3v2_version 3 out.mp3
所有编解码器 AV 选项都是针对某路流的,所以 AV 选项后应跟随 stream_specifer。
注意 -nooption 语法不能被用于 bool 型的 AV 选项,应使用 -option 0/-option 1。
4 主选项
-f fmt (input/output)强制指定输入或输出文件格式。输入文件的格式通常是自动检测得到,而输出文件的格式一般是由文件扩展名猜测得到,所以大部分情况下并不需要此选项。-i url (input)输入文件 url。-y (global)静默覆盖输出文件。-n (global)不覆盖输出文件,如果输出文件已存在则立即退出。-stream_loop number (input)设置输入流的循环次数。0 表示不循环,-1 表示永久循环。-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)作输出选项时用于选择编码器,作输入选项时用于选择解码器,编码器或解码器都是用于一路或多路流的。参数 codec 是解码器/编码器的名字,或者指定为 copy,用于表示流不需要重编码。例如:ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT使用 libx264 编码所有视频流并拷贝所有音频流。对每路流来说,最后一个匹配的 c 选项起作用,所以ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT第 2 路视频流使用 libx264 编码,第 138 路音频流使用 libvorbis 编码,所有其他流直接拷贝。展开说明一下:上述命令行中,有“-c copy”、“-c:v:1 libx264”和“-c:a:137 libvorbis”三个 c 选项。对第 138 路音频流来说,第一个和第三个选项可匹配,因此起作用的是第三个选项(命令行中最后一个匹配的选项)。对第 2 路视频流来说,第一个和第二个选项可匹配,因此起作用的是第二个选项((命令行中最后一个匹配的选项)。对其他流而言,只能匹配第一个选项。-t duration (input/output)作输入选项时,限制输入的时长,即最多只读入 duration 时长的数据。作输出选项时,达到 duration 时长时就停止写输出。duration 是时间长度,遵循时长规范,参考 “ffmpeg-utils” 手册中的“Time duration” 章节。-to 选项和 -t 选项是互斥的,-t 选项优先。-to position (input/output)到达指定 position 位置时停止写输出或读输入。position 是时间刻度,遵循时长规范,参考 “ffmpeg-utils” 手册中的 “Time duration” 章节。-to 选项和 -t 选项是互斥的,-t 选项优先。-fs limit_size (output)设置文件尺寸限制,单位字节。达到设置值后就不会再写新的数据块了。输出文件尺寸比请求设置的值略大。-ss position (input/output)作输入选项(在 -i 之前)时,将在输入文件中执行 seek 操作,seek 至目标位置 position 处。注意在大多数格式中,seek 都不精确,ffmpeg 会 seek 至离 position 最近的 seek 点。当转码功能和 -accurate_seek 都使能(默认情况)时,在实际 seek 点和 position 间的一小段会被解码,但是会丢弃(如何丢弃?)。在作流拷贝(不需要转码)操作或使用了 -noaccurate_seek 选项时,这一小段会保留(如何保留?)。作输出选项(在输出 url 之前)时,会对输入一直解码并丢弃,直到到达 position 位置处。position 是时间刻度,遵循时长规范,参考 “ffmpeg-utils” 手册中的 “Time duration” 章节。-sseof position (input)与 -ss 选项类似,只不过 -ss 选项是相对于文件头,而此选项是相对于文件尾。position 值是负值,0 表示位于文件尾。-itsoffset offset (input)设置输入时间偏移。offset 遵循时长规范,参考 “ffmpeg-utils” 手册中的 “Time duration” 章节。输入文件的时间戳会加上 offset 值,使用相加后的新值作为新的时间戳。offset 取正值时表示对应的流将延时 offset 指定的时长。-timestamp date (output)设置容器中的录制时间戳。data 遵循日期规范,参考 “ffmpeg-utils” 手册中的 “Date” 章节。-metadata[:metadata_specifier] key=value (output,per-metadata)设置一个 metedata 键/值对。一个可选的 metadata_specifier 可用于设置流、章节或节目的 metadata。详情可参考 -map_metadata 文档。此选项会覆盖 -map_metadata选项设置的 metadata。此选项携带一个空值可以删除 metadata。例如,设置输出文件的标题:ffmpeg -i in.avi -metadata title="my title" out.flv设置第一路音频流的语言:ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT......-dframes number (output)设置输出的数据(data 类型,与 video/audio 类型对应)帧的数量。此选项已经过时,等价于 -frames:d 选项,应使用 -frames:d 替代此选项。-frames[:stream_specifier] framecount (output,per-stream)设置输出帧的数量。超过 framecount 帧数时将停止写输出。
5 视频选项
-vframes number (output)设置输出视频帧数。此选项已经过时,等价于 -frames:v,应使用 -frames:v 替代此选项。-r[:stream_specifier] fps (input/output,per-stream)设置帧率(Hz)。作输入选项时,忽略文件中的所有时间戳,生成以 fps 为帧率的新时间戳。此选项和用于某些输入格式(如 image2 和 v412)的-framerate 选项并不一样(在旧的 FFmpeg 版本中这两个选项是一样的)。如果有疑问,使用 -framerate 替换-r 输入选项。作输出选项时,重复或丢弃输入帧以获得 fps 指定的帧率。-s[:stream_specifier] size (input/output,per-stream)设置帧大小。作输入选项时,此选项是 video_size 私有选项的便捷方式,可被某些解复用器识别,用于帧大小未存储在文件中或帧大小可配置的情况,例如原始视频或视频采集。作输出选项时,此选项将在对应滤镜图的末尾插入 scale 视频滤镜,以缩放视频帧,这种情况请直接使用 scale 滤镜,将 scale 滤镜插入开头或其他位置,而不要使用此选项。-aspect[:stream_specifier] aspect (output,per-stream)设置 aspect 指定的视频显示宽高比。aspect 可以是浮点数字符串,也可以是 num:den 形式的字符串,其中 num 和 den 分别是宽高比的分子和分母。例如,“4:3”、“16:9”、“1.3333 ”和 “1.7777 ”都是有效的参数值。如果与 -vcodec copy 一起使用,它将影响存储在容器级别的宽高比,但不会影响存储在编码帧中的宽高比(如果存在的话)。-vn (input/output)作输入选项时,阻止文件中所有视频流被用于滤镜操作或自动/手动选择进任何输出。本选项禁止所有视频流,-discard 选项可单独禁止某一路视频流。作输出选项时,禁止视频录制,也就是禁止任何视频流的自动或手动选择。-vcodec codec (output)设置视频编解码器。等价于 -codec:v 选项。-pass[:stream_specifier] n (output,per-stream)用于进行两步视频编码,n 为 1 或 2,表示是第一次或第二次视频编码。第一次编码时,视频的统计信息会被记录到日志文件中(另见选项 -passlogfile),第二次编码时,该日志文件会被用来按照准确的比特率生成视频。第一次编码时可以停用音频并将输出设置为空,如下:ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NULffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null-passlogfile[:stream_specifier] prefix (output,per-stream)参数 prefix 指定两步视频编码中用到的日志文件名的前缀,默认前缀为 “ffmpeg2pass”。完整的文件名将是 PREFIX-N.log,其中 N 与输出流的编号相关。-vf filtergraph (output)创建由 filtergraph 指定的滤镜图,使用此滤镜图对流执行滤镜操作。本选项等价于-filter:v 选项, 参考 -filter 选项。
6 音频选项
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为 1
-an 不使能音频纪录
-acodec codec 使用 codec 编解码
7 音频/视频捕获选项
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394 专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置 DV1394 捕获
-av device 设置音频设备 比如/dev/dsp
8 高级选项
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以 bits 为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流(只工作于图像流,用于 ffserver 测试)