FFmpeg介绍及使用
1. FFmpeg简介
FFmpeg是音视频领域很有名的一个库, 这里从两方面介绍, 一方面根据FFMPEG的命令行工具介绍, 介绍这些命令行工具的使用方法, 满足一般用户要求. 还有一方面从组件/库的划分来介绍, 介绍FFMPEG是有哪些组件和库组成, 每一个库的作用, 便于后续的自定义开发.
全文整体脉络可以用一张图表示:
2. 从命令行工具角度介绍
FFmpeg命令行工具有以下四个:
- ffmepg
- ffprobe
- ffplay
- ffserver
2.1 ffmpeg命令
ffmpeg is a very fast video and audio converter that can also grab from a live audio/video source. It can also convert between arbitrary sample rates and resize video on the fly with a high quality polyphase filter.
ffmpeg主要作用是音视频转换, 这里转换有两个含义, 一个是封装容器的转换(比如mp4转flv), 一个是指封装格式的转换(比如h264转h265). 其次也支持图像大小转换, 音频重采样.
下面慢慢揭开ffmpeg命令的面纱:
对于ffmpeg, 当我们忘记了命令或者需要查找想要的命令时, 可以通过 ffmpeg --help
查看帮助, 此时会输出很多内容, 我们慢慢解读这些输出的内容:
Getting help: -h -- print basic options -h long -- print more options -h full -- print all options (including all format and codec specific options, very long) -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf See man ffmpeg for detailed description of the options. Print help / information / capabilities: -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 -formats show available formats -muxers show available muxers -demuxers show available demuxers -devices show available devices -codecs show available codecs -decoders show available decoders -encoders show available encoders -bsfs show available bit stream filters -protocols show available protocols -filters show available filters
最上面的Getting help:
是说如何获得帮助. 使用ffmpeg --help long
会输出高级参数, 使用ffmpeg --help full
会输出全部帮助信息. 使用ffmpeg -h topic
可以指定要输出的帮助类型.
接下来的-formats
/-muxers
/-demuxers
/-devices
/-codecs
/-encoders
/-bsfs
/-protocols
/-filters
分别表示打印出所有格式/复用/解复用/设备/编码器/解码器/bitstream filters/协议/滤镜. 我们接下来举几个例子说明:
2.1.1 ffmpeg -formats
当遇到无法解析的视频文件或者无法生成视频文件时, 可以使用这个命令查看是否支持对应的视频文件格式.
File formats: D. = Demuxing supported.E = Muxing supported DE h264 raw H.264 video DE flv FLV (Flash Video)
输出内容DE h264 raw H.264 video
分为3部分:
第一列DE
是封装格式的Demuxing(解复用)支持和Muxing(复用)支持.
第二列h264
是文件封装格式.
第三列raw H.264 video
是文件格式的详细说明, 表明是裸的h264视频, 也就是没有压缩过的h264.
2.1.1.1 ffmpeg -muxers
如果我们只想看复用格式, 可以使用ffmpeg -muxers
, 输出如下所示:
File formats: D. = Demuxing supported .E = Muxing supportedundefined E h264 raw H.264 video E flv FLV (Flash Video)
输出内容的解读方式和ffmpeg -formats
一样.
2.1.1.1.1 ffmpeg -h muxer=flv
当我们需要查看某种具体的复用格式时, 可以使用ffmpeg -h muxer=MUXER_NAME
来查看. 比如ffmpeg -h muxer=flv
输出内容如下, 其中包含了只有flv复用格式才支持的参数.
Muxer flv FLV (Flash Video): Common extensions: flv. Mime type: video/x-flv. Default video codec: flv1. Default audio codec: mp3. flv muxer AVOptions: -flvflags <flags> E........ FLV muxer flags (default 0) aac_seq_header_detect E........ Put AAC sequence header based on stream data no_sequence_end E........ disable sequence end for FLV no_metadata E........ disable metadata for FLV no_duration_filesize E........ disable duration and filesize zero value metadata for FLV add_keyframe_index E........ Add keyframe index metadata
FLV的muxer包含两大部分.
第一部分Muxer flv [FLV (Flash Video)]:
是FLV封装的默认配置描述, 如扩展名, MIME类型, 默认的视频编码格式, 默认的音频编码格式.
第二部分flv muxer AVOptions:
为FLV封装时支持的配置参数及相关说明, 通过这些参数, 我们可以更好的了解flv复用的能力.
2.1.1.2 ffmpeg -demuxers
如果我们只想看解复用格式, 可以使用ffmpeg -demuxers
, 输出如下所示:
File formats: D. = Demuxing supported .E = Muxing supported -- D flv FLV (Flash Video) D h264 raw H.264 video
输出内容的解读方式和ffmpeg -formats
一样.
2.1.1.2.1 ffmpeg -h demuxer=flv
当我们需要查看某种具体的解复用格式时, 可以使用ffmpeg -h demuxer=MUXER_NAME
来查看. 比如ffmpeg -h demuxer=flv
输出内容如下:
Demuxer flv FLV (Flash Video): Common extensions: flv. flvdec AVOptions: -flv_metadata <boolean> .D.V..... Allocate streams according to the onMetaData array (default false) -missing_streams <int> .D.V..XR. (from 0 to 255) (default 0)
FLV的demuxer的信息包含两大部分, 具体如下:
第一部分Demuxer flv [FLV (Flash Video)]:
为FLV解封装默认的配置, 如扩展文件名.
第二部分flvdec AVOptions:
是FLV解封装设置的参数和相关说明.
2.1.2 ffmpeg -decoders
ffmpeg -decoders
会输出所有支持的解码器, 输出内容如下:
Decoders: V..... = Video A..... = Audio S..... = Subtitle .F.... = Frame-level multithreading ..S... = Slice-level multithreading ...X.. = Codec is experimental ....B. = Supports draw_horiz_band .....D = Supports direct rendering method 1undefined VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
分为三列,
第一列VFS..D
共6个字段, 第一个字段可以取值V/A/S
, 表示这个解码器是音频编码器还是视频编码器还是字幕编码器, 第二个字段F
表示帧级别的多线程支持, 第三个字段S
表示分片级别的多线程, 第四个字段X
表示该编码属于实验版本, 第五个字段B
表示支持draw horiz band模式, 第六个字段D
表示支持直接渲染模式. 比如h264的VFS..D
表示视频解码器, 支持帧级别和分片级别的多线程, 支持直接渲染模式.
第二列h264
是编码格式.
第三列H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
是编码格式的详细说明.
2.1.2.1 ffmpeg -h decoder=h264
如果我们想知道h264
解码器的更多信息, 可以使用 ffmpeg -h decoder=h264
命令:
Decoder h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10: General capabilities: dr1 delay threads Threading capabilities: frame and slice H264 Decoder AVOptions: -enable_er <boolean> .D.V..... Enable error resilience on damaged frames (unsafe) (default auto) -x264_build <int> .D.V..... Assume this x264 version if no x264 version found in any SEI (from -1 to INT_MAX) (default -1)
第一部分Decoder h264 [H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]
是解码h264
时可以采用的常用支持, 和多线程支持. 这里的frame and slice
说明h264
支持帧级别/Slice级别的多线程解码.
第二部分H264 Decoder AVOptions:
是解码h264
可以采用的解码参数和说明.
2.1.3 ffmpeg -encoders
ffmpeg -encoders
会输出所有支持的解码器, 输出内容如下:
Decoders: V..... = Video A..... = Audio S..... = Subtitle .F.... = Frame-level multithreading ..S... = Slice-level multithreading ...X.. = Codec is experimental ....B. = Supports draw_horiz_band .....D = Supports direct rendering method 1undefined V..... libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264) V..... libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264) V..... h264_videotoolbox VideoToolbox H.264 Encoder (codec h264)
V..... libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
分为三列,
第一列V.....
共6个字段, 第一个字段可以取值V/A/S
, 表示这个编码器是音频编码器还是视频编码器还是字幕编码器, 第二个字段F
表示帧级别的多线程支持, 第三个字段S
表示分片级别的多线程, 第四个字段X
表示该编码属于实验版本, 第五个字段B
表示支持draw horiz band模式, 第六个字段D
表示支持直接渲染模式. 这里和解码器decoders
是一致的. 比如libx264
的V.....
表示视频编码器.
第二列libx264
是编码格式.
第三列H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
是编码格式的详细说明.
2.1.3.1 ffmpeg -h encoder=h264
如果我们想知道某个具体的编码器参数, 可以通过ffmpeg -h encoder=ENCODER_NAME
, 比如ffmpeg -h encoder=h264
输出如下:
Encoder libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10: General capabilities: delay threads Threading capabilities: auto Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 libx264 AVOptions: -preset <string> E..V..... Set the encoding preset (cf. x264 --fullhelp) (default "medium") -tune <string> E..V..... Tune the encoding params (cf. x264 --fullhelp) -profile <string> E..V..... Set profile restrictions (cf. x264 --fullhelp) -fastfirstpass <boolean> E..V..... Use fast settings when encoding first pass (default true) -level <string> E..V..... Specify level (as defined by Annex A) ...... Encoder libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB: General capabilities: delay threads Threading capabilities: auto Supported pixel formats: bgr0 bgr24 rgb24 libx264rgb AVOptions: -preset <string> E..V..... Set the encoding preset (cf. x264 --fullhelp) (default "medium") -tune <string> E..V..... Tune the encoding params (cf. x264 --fullhelp) ...... Encoder h264_videotoolbox VideoToolbox H.264 Encoder: General capabilities: delay Threading capabilities: none Supported pixel formats: videotoolbox_vld nv12 yuv420p h264_videotoolbox AVOptions: -profile <int> E..V..... Profile (from 0 to 4) (default 0) baseline E..V..... Baseline Profile main E..V..... Main Profile high E..V..... High Profile -level <int> E..V..... Level (from 0 to 52) (default 0) 1.3 E..V..... Level 1.3, only available with Baseline Profile ......
这里列出了三个h264编码器, 分别为libx264
, libx264rgb
, h264_videotoolbox
. 每个编码器的帮助都分为两个部分:
第一部分Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]:
是该h264编码器支持的基本编码方式. 对比这三个编码器, 可以发现虽然都是说基本编码能力支持, 多线程编码能力支持和支持的像素色彩格式, 但是不同编码器支持的能力差别很大.
第二部分libx264 AVOptions:
是该编码器编码h264
时可以采用的编码参数和说明. 不同的编码器的参数之前差别很大, 设置时需要注意.
2.1.4 ffmpeg -filters
如果想知道ffmpeg支持的滤镜/滤波器种类, 可以使用ffmpeg -filters
查看. ffmpeg的滤镜种类丰富, 功能强大, 叠加方便.
Filters: T.. = Timeline support .S. = Slice threading ..C = Command support A = Audio input/output V = Video input/output N = Dynamic number and/or type of input/output | = Source or sink filter undefined T.C overlay VV->V Overlay a video source on top of the input. TS. colorkey V->V Turns a certain color into transparency. Operates on RGB colors.
输出信息一共四列:
第一列总共三个字段TSC
, 第一个字段 T
表示时间轴支持, 第二个字段S
表示分片线程处理支持, 第三个字段C
表示命令支持.
第二列overlay
是滤镜名
第三列VV->V
是转换方式, 比如音视转音频, 视频转视频, 创建音频, 创建视频, 多个视频合并为一个视频等操作.
第四列Overlay a video source on top of the input.
是滤镜作用说明.
2.1.4.1 ffmpeg -h filter=colorkey
如果需要详细查看某个滤镜的详细介绍, 可以通过ffmpeg -h filter=FILTER_NAME
来查看. 比如ffmpeg -h filter=colorkey
输出如下:
Filter colorkey Turns a certain color into transparency. Operates on RGB colors. slice threading supported Inputs: #0: default (video) Outputs: #0: default (video) colorkey AVOptions: color <color> ..FV..... set the colorkey key color (default "black") similarity <float> ..FV..... set the colorkey similarity value (from 0.01 to 1) (default 0.01) blend <float> ..FV..... set the colorkey key blend value (from 0 to 1) (default 0)
colorkey
滤镜的输出信息主要包含两大部分:
第一部分Filter colorkey
说明了所支持的色彩格式信息, 支持的多线程处理方式, 以及输入输出支持.
第二部分colorkey AVOptions:
是所支持的参数和说明.
2.1.5 sample
- ffmpeg -i ~/input.rmvb -vcodec mpeg4 -b:v 200k -r 15 -an output.mp4
-vcodec codec force video codec ('copy' to copy stream)
Set the video codec. This is an alias for -codec:v
.
-b bitrate video bitrate (please use -b:v)
封装格式从RMVB转换为MP4, 视频编码转换为mpeg4, 视频码率转换为200kbit/s, 视频帧率转换为15fps, 转码后不包括音频(-an)
2.1.6 others
ffmpeg功能十分强大, 更详细命令可以参考
http://ffmpeg.org/ffmpeg.html
http://ffmpeg.org/ffmpeg-all.html
2.2 ffprobe
ffprobe gathers information from multimedia streams and prints it in human- and machine-readable fashion.
从ffprobe的介绍可知, ffprobe主要有两个作用, 一个是从多媒体文件中获得信息, 二是输出这些信息.
2.2.1 ffprobe -h
ffprobe命令比较多, 我们可以通过ffprobe -h
来查看.
-show_data show packets data -show_data_hash show packets data hash -show_error show probing error -show_format show format/container info -show_frames show frames info -show_format_entry entry show a particular entry from the format/container info -show_entries entry_list show a set of specified entries -show_log show log -show_packets show packets info -show_programs show programs info -show_streams show streams info -show_chapters show chapters info -count_frames count the number of frames per stream -count_packets count the number of packets per stream
常用的命令有-show_packets
, -show_streams
, -show_frames
, -show_packets
.
比如我们可以通过ffprobe -show_packets input.mp4
查看多媒体数据包信息. 其输出如下:
PACKET codectype=audio 多媒体类型, 视频包/音频包 stream_index=1 多媒体的stream多音 pts=9564160 多媒体的显示时间值 pts_time=216.874376 根据不同格式计算后的多媒体的显示时间 dts=9564160 多媒体的解码时间值 dts_time=216.874376 根据不同格式计算后的多媒体的解码时间 duration=1024 多媒体包占用的时间值 duration_time=0.023220 根据不同格式计算后的多媒体包所占用的时间值 convergence_duration=N/A convergence_duration_time=N/A size=364 多媒体包的大小 pos=14727208 多媒体包所在文件的便宜位置 flags=K 多媒体包标记, 如关键包和非关键包 /PACKET
还可以通过ffprobe -show_data -show_packets input.mp4
查看包中的具体数据:
PACKET codec_type=video stream_index=0 pts=19513494 pts_time=216.816600 dts=19510491 dts_time=216.783233 duration=3003 duration_time=0.033367 convergence_duration=N/A convergence_duration_time=N/A size=41 pos=14721293 flags=__ data= 00000000: 0000 0025 419a 2493 c21e 4ca6 07ff 0000 ...%A.$...L..... 00000010: 0300 0003 0000 0300 0003 0000 0300 0003 ................ 00000020: 0000 0300 0003 0001 ff .........
2.2.1.1 ffprobe -print_format / -of修改输出格式
-print_format format set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml)
-of format alias for -print_format
ffprobe -of csv --show_packets input.mp4
http://ffmpeg.org/ffprobe.html
http://ffmpeg.org/ffprobe-all.html
2.3 ffplay
FFplay is a very simple and portable media player using the FFmpeg libraries and the SDL library. It is mostly used as a testbed for the various FFmpeg APIs.
SDL,跨平台,便于测试ffmpeg的codec/format/filter
最新版不到四千行, IJKPlayer发源于此
2.3.1 ffplay -h
-fs force full screen -an disable audio -vn disable video -sn disable subtitling -ss pos seek to a given position in seconds -t duration play "duration" seconds of audio/video -bytes val seek by bytes 0=off 1=on -1=auto -seek_interval seconds set seek interval for left/right keys, in seconds -nodisp disable graphical display -noborder borderless window -volume volume set startup volume 0=min 100=max -f fmt force format -window_title window title set window title -af filter_graph set audio filters -showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT) -i input_file read specified file -codec decoder_name force decoder -autorotate automatically rotate videoAdvanced options: -cpuflags flags force specific cpu flags -hide_banner hide_banner do not show program banner -ast stream_specifier select desired audio stream -vst stream_specifier select desired video stream -sst stream_specifier select desired subtitle stream -pix_fmt format set pixel format -stats show status -fast non spec compliant optimizations -genpts generate pts -drp let decoder reorder pts 0=off 1=on -1=auto -lowres -sync type set audio-video sync. type (type=audio/video/ext) -autoexit exit at the end -exitonkeydown exit on key down -exitonmousedown exit on mouse down -loop loop count set number of times the playback shall be looped -framedrop drop frames when cpu is too slow -infbuf don't limit the input buffer size (useful with realtime streams) -vf filter_graph set video filters -rdftspeed msecs rdft speed -default generic catch all option -acodec decoder_name force audio decoder -scodec decoder_name force subtitle decoder -vcodec decoder_name force video decoder -find_stream_info read and decode the streams to fill missing information with heuristics
2.3.2 ffplay -ss 20 -t 10 output.mp4
2.3.3 ffplay -showmode 1 output.mp3
-showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT)
2.3.4 ffplay -debug mb_type output.mp4
-debug <flags> ED.VAS... print specific debug info (default 0)
pict .D.V..... picture info
bitstream .D.V.....
mb_type .D.V..... macroblock (MB) type
qp .D.V..... per-block quantization parameter (QP)
dct_coeff .D.V.....
green_metadata .D.V.....
skip .D.V.....
startcode .D.V.....
er .D.V..... error recognition
mmco .D.V..... memory management control operations (H.264)
bugs .D.V.....
buffers .D.V..... picture buffer allocations
thread_ops .D.VA.... threading operations
nomc .D.VA.... skip motion compensation
2.3.5 ffplay -flags2 export_mvs f14163.mp4 -vf codecview=mv=pf bf bb
调试宏块和运动矢量
https://trac.ffmpeg.org/wiki/Debug/MacroblocksAndMotionVectors
codecview AVOptions:
mv <flags> ..FV..... set motion vectors to visualize (default 0)
代码语言:txt复制 pf ..FV..... forward predicted MVs of P-frames
代码语言:txt复制 bf ..FV..... forward predicted MVs of B-frames
代码语言:txt复制 bb ..FV..... backward predicted MVs of B-frames
The following sections apply to ffmpeg versions older than October 21 2017.
Analyzing Macroblock Types
ffplay -debug vis_mb_type input.mp4
Analyzing QP Values
ffplay -debug vis_qp input.mp4
http://ffmpeg.org/ffplay.html
http://ffmpeg.org/ffplay-all.html
2.4 ffserver
ffserver is a streaming server for both audio and video. It supports several live feeds, streaming from files and time shifting on live feeds. You can seek to positions in the past on each live feed, provided you specify a big enough feed storage.
http://ffmpeg.org/ffserver.html
http://ffmpeg.org/ffserver-all.html
ffserver has been removed on 2018-01-06. If you still need it checkout commit 2ca65fc or use the 3.4 release branch Or try an alternative such as mkvserver_mk2 https://trac.ffmpeg.org/wiki/ffserver
https://trac.ffmpeg.org/wiki/ffserver
https://github.com/klaxa/mkvserver_mk2
Simple-RTMP-Server
https://github.com/ossrs/srs
3. 从组件/库角度介绍
3.1 libavutil:大杂烩, 函数不知道应该放哪就放这里.
The libavutil library is a utility library to aid portable multimedia programming. It contains safe portable string functions, random number generators, data structures, additional mathematics functions, cryptography and multimedia related functionality (like enumerations for pixel and sample formats). It is not a library for code needed by both libavcodec and libavformat.
http://www.ffmpeg.org/libavutil.html
http://www.ffmpeg.org/ffmpeg-utils.html
3.2 libswscale:视频格式转换与大小缩放
The libswscale library performs highly optimized image scaling and colorspace and pixel format conversion operations. Specifically, this library performs the following conversions: Rescaling: is the process of changing the video size. Several rescaling options and algorithms are available. This is usually a lossy process. Pixel format conversion: is the process of converting the image format and colorspace of the image, for example from planar YUV420P to RGB24 packed. It also handles packing conversion, that is converts from packed layout (all pixels belonging to distinct planes interleaved in the same buffer), to planar layout (all samples belonging to the same plane stored in a dedicated buffer or "plane").This is usually a lossy process in case the source and destination colorspaces differ.
http://www.ffmpeg.org/libswscale.html
http://www.ffmpeg.org/ffmpeg-scaler.html
3.3 libswresample:音频重采样
The libswresample library performs highly optimized audio resampling, rematrixing and sample format conversion operations. Specifically, this library performs the following conversions: Resampling: is the process of changing the audio rate, for example from a high sample rate of 44100Hz to 8000Hz. Audio conversion from high to low sample rate is a lossy process. Several resampling options and algorithms are available. Format conversion: is the process of converting the type of samples, for example from 16-bit signed samples to unsigned 8-bit or float samples. It also handles packing conversion, when passing from packed layout (all samples belonging to distinct channels interleaved in the same buffer), to planar layout (all samples belonging to the same channel stored in a dedicated buffer or "plane"). Rematrixing: is the process of changing the channel layout, for example from stereo to mono. When the input channels cannot be mapped to the output streams, the process is lossy, since it involves different gain factors and mixing. Various other audio conversions (e.g. stretching and padding) are enabled through dedicated options.
http://www.ffmpeg.org/libswresample.html
http://www.ffmpeg.org/ffmpeg-resampler.html
3.4 libavcodec:编解码
The libavcodec library provides a generic encoding/decoding framework and contains multiple decoders and encoders for audio, video and subtitle streams, and several bitstream filters.
AVCodecContext
http://www.ffmpeg.org/libavcodec.html
http://www.ffmpeg.org/ffmpeg-codecs.html
3.4.1 bitsream-filters
http://www.ffmpeg.org/ffmpeg-bitstream-filters.html
A bitstream filter operates on the encoded stream data, and performs bitstream level modifications without performing decoding.
https://stackoverflow.com/questions/32028437/what-are-bitstream-filters-in-ffmpeg
在不做码流解码的前提下,对已经编码后的比特流做特定的修改、调整。比如添加SEI, SEI可以做直播答题
https://zhuanlan.zhihu.com/p/33720871
3.5 libavformat:封装与解封装
The libavformat library provides a generic framework for multiplexing and demultiplexing (muxing and demuxing) audio, video and subtitle streams. It encompasses multiple muxers and demuxers for multimedia container formats. It also supports several input and output protocols to access a media resource.
http://www.ffmpeg.org/libavformat.html
http://www.ffmpeg.org/ffmpeg-formats.html
http://www.ffmpeg.org/ffmpeg-protocols.html
3.6 libavdevice:音视频输入/输出设备
The libavdevice library provides a generic framework for grabbing from and rendering to many common multimedia input/output devices, and supports several input and output devices, including Video4Linux2, VfW, DShow, and ALSA. The libavdevice library provides the same interface as libavformat. Namely, an input device is considered like a demuxer, and an output device like a muxer, and the interface and generic device options are the same provided by libavformat (see the ffmpeg-formats manual).
http://www.ffmpeg.org/libavdevice.html
http://www.ffmpeg.org/ffmpeg-devices.html
3.7 libavfilter:音视频滤镜
The libavfilter library provides a generic audio/video filtering framework containing several filters, sources and sinks.
http://www.ffmpeg.org/libavfilter.html
http://www.ffmpeg.org/ffmpeg-filters.html
4. 结语
本文暂且告一段落. "从组件/库角度介绍"写的比较简略, 内容主要是ffmpeg官网链接和内容, 因为这里需要结合FFmpeg源码才能更好的描述. 在后续文章介绍"如何debug ffmpeg源码", 以及"ffmpeg定制开发示例"时, 会更详细的描述FFmpeg组件/库.