FFmpeg中常用的工具主要是ffmpeg、ffprobe、ffplay,分别用于多媒体的编解码,内容分析、播放。本文主要介绍这三个工具的常用命令
1.ffmpeg 常用命令
# 查看ffmpeg命令的基础信息
ffmpeg --help
# 查看ffmpeg命令高级参数部分
ffmpeg --help long
#查看ffmpeg命令全部参数
ffmpeg --help full
#查询指令具体信息
ffmpeg -h muxer=flv
ffmpeg -h encoder=h264
ffmpeg -h filter=colorkey
通过ffmpeg --help 可以看到ffmpeg常见的命令大概分为6个部分,具体如下:
- ffmpeg信息查询部分
- 公共操作参数部分
- 文件主要操作参数
- 视频操作参数
- 音频操作参数
- 字幕操作参数
参数介绍
ffmpeg信息查询参数
| 参数 | 释义 |
|---|---|
| -L | show license |
| -h topic | show help |
| -? topic | show help |
| -help topic | show help |
| --help topic | show help |
| -version | show version |
| -buildconf | show build configuration # 构建选项,支持哪些功能模块, 比如libfdk-aac libx264 libvpx |
| -formats | show available formats # 文件格式(协议标准) ,比如rtmp,hls,rtp |
| -muxers | show available muxers # 封装格式 比如flv,mp3 mp4 |
| -demuxers | show available demuxers # 解封装格式 比如mp3 h264 |
| -devices | show available devices # 封装/解封装的设备 ,比如sdl sdl2 xv |
| -codecs | show available codecs # 编解码器 比如aac,h264 |
| -decoders | show available decoders # 解码器 比如aac,h264 |
| -encoders | show available encoders # 编码器 比如aac, libx264 |
| -bsfs | show available bit stream filters # 字节流过滤 比如aac_adtstoasc |
| -protocols | show available protocols # 协议 比如rtmp,hls |
| -filters | show available filters # 过滤器, 比如vflip |
| -pix_fmts | show available pixel formats # 像素格式,比如yuv420p,rgb24 |
| -layouts | show standard channel layouts # 声道格式, 比如stereo(立体声) |
| -sample_fmts | show available audio sample formats # 音频采样格式, 比如s16 s16p, fltp |
| -colors | show available color names # 颜色支持,比如Red, Green, Blue |
| -sources device | list sources of the input device # 采集设备,比如摄像头 |
| -sinks device | list sinks of the output device # 水印 |
| -hwaccels | show available HW acceleration methods # HW加速 |
公共参数
| 参数 | 释义 |
|---|---|
| -loglevel loglevel | set logging level |
| -v loglevel | set logging level |
| -report | generate a report |
| -max_alloc bytes | set maximum size of a single allocated block |
| -y | overwrite output files # 覆盖文件 |
| -n | never overwrite output files |
| -ignore_unknown | Ignore unknown stream types |
| -filter_threads | number of non-complex filter threads |
| -filter_complex_threads | number of threads for -filter_complex |
| -stats | print progress report during encoding # 过程信息 |
| -max_error_rate maximum error rate | ratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success. |
| -bits_per_raw_sample number | set the number of bits per raw sample |
| -vol volume | change audio volume (256=normal) |
主要参数
| 参数 | 释义 |
|---|---|
| -f fmt | force format # 强转码 |
| -c codec | codec name # 指定编码格式 |
| -codec codec | codec name |
| -pre preset | preset name |
| -map_metadata outfile[,metadata]:infile[,metadata] | set metadata information of outfile from infile |
| -t duration | record or transcode "duration" seconds of audio/video # 处理时长 |
| -to time_stop | record or transcode stop time |
| -fs limit_size | set the limit file size in bytes |
| -ss time_off | set the start time offset # 开始事件 |
| -sseof time_off | set the start time offset relative to EOF |
| -seek_timestamp | enable/disable seeking by timestamp with -ss |
| -timestamp time | set the recording timestamp ('now' to set the current time) |
| -metadata string=string | add metadata |
| -program title=string:st=number... | add program with specified streams |
| -target type | specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-") |
| -apad | audio pad |
| -frames number | set the number of frames to output # 指定帧数显示 |
| -filter filter_graph | set stream filtergraph # 过滤器 |
| -filter_script filename | read stream filtergraph description from a file |
| -reinit_filter | reinit filtergraph on input parameter changes |
| -discard | discard |
| -disposition | disposition |
视频参数
| 参数 | 释义 |
|---|---|
| -vframes number | set the number of video frames to output # 输出视频帧数, 60/25 |
| -r rate | set frame rate (Hz value, fraction or abbreviation) # 视频码率 |
| -s size | set frame size (WxH or abbreviation) # 画面大小,widthxheight |
| -aspect aspect | set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) # 纵横比 |
| -bits_per_raw_sample number | set the number of bits per raw sample |
| -vn | disable video # 禁用视频 |
| -vcodec codec | force video codec ('copy' to copy stream) # 指定编解码器 |
| -timecode hh:mm:ss[:;.]ff | set initial TimeCode value. |
| -pass n | select the pass number (1 to 3) |
| -vf filter_graph | set video filters # 视频过滤器 |
| -ab bitrate | audio bitrate (please use -b:a) # 音频码率 |
| -b bitrate | video bitrate (please use -b:v) # 视频码率 |
| -dn | disable data |
音频参数
| 参数 | 释义 |
|---|---|
| -aframes number | set the number of audio frames to output # 设置要输出的音频帧数 |
| -aq quality | set audio quality (codec-specific) # 指定音频编码质量 fltp |
| -ar rate | set audio sampling rate (in Hz) # 采样率,如44100hz |
| -ac channels | set number of audio channels # 采样通道,比如双通道 |
| -an | disable audio # 禁用声音 |
| -acodec codec | force audio codec ('copy' to copy stream) # 指定编解码器 |
| -vol volume | change audio volume (256=normal) # 设置起始声音 |
| -af filter_graph | set audio filters # 指定过滤器 |
| -b:a bitrate | audio bitrate (please use -b:a) # 音频码率 比如192kbps |
字幕参数
| 参数 | 释义 |
|---|---|
| -s size | set frame size (WxH or abbreviation) |
| -sn | disable subtitle |
| -scodec codec | force subtitle codec ('copy' to copy stream) |
| -stag fourcc/tag | force subtitle tag/fourcc |
| -fix_sub_duration | fix subtitles duration |
| -canvas_size size | set canvas size (WxH or abbreviation) |
| -spre preset | set the subtitle options to the indicated preset |
1.1 ffmpeg 封装转换
ffmpeg转封装功能包含在AVFormat模块中,通过libavformat库进行Mux和Demux操作;多媒体文件的格式有很多种,这些格式的很多参数在Mux和Demux的操作参数中是公用的
| 参数 | 类型 | 释义 |
|---|---|---|
| -avioflags | 标记 | format的缓冲设置,默认为0,就是有缓冲 |
| direct | 无缓冲状态 | |
| -probesize | 整数 | 在进行媒体数据处理前获得文件内容的大小,可用在预读取文件头时提高速度,也可以设置设置足够大的值来读取到足够多的音视频数据信息 |
| -formatprobesize | 整数 | 文件格式的字节数 (0~ 2.14748e+09) (default 1048576) |
| -fflags | 标记 | |
| flush_packets | 立即将packets数据刷新写入文件中 | |
| ignidx | 忽略index | |
| genpts | 输出时按照正常规则产生pts | |
| nofillin | 不填写可以精确计算缺失的值 | |
| igndts | 忽略dts | |
| discardcorrupt | 丢失损坏的帧 | |
| sortdts | 尝试以dts的顺序为准输出 | |
| fastseek | 快速seek(定位)操作,但不够精确 | |
| nobuffer | 直接读取或写出,不存入buffer,用于在直播采集时降低延迟 | |
| bitexact | 不写入随机或不稳定的数据 | |
| -seek2any | BOOL | 支持时,允许在解复用器级别查找非关键帧 (default false) |
| -analyzeduration | 整数 | 指定解析媒体所需要花销的时间,这里设置值越高,解析越准确,如果在直播中为了降低延迟,这个值可以设置得更低些(0 ~ I64_MAX) (default 0) |
| -output_ts_offset | 整数 | 设置输出文件的起始时间 |
| -codec_whitelist | 列表 | 设置可以解析的codec的白名单 |
| -format_whitelist | 列表 | 设置可以解析的format的白名单 |