ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
ffmpeg
是一个非常快的视频和音频转换器,还可以从实时音频/视频源获取。它还可以在任意采样率之间 转换和调整高质量的视频的多相滤波器
从ffmpeg
的输入“文件”(可以是普通文件,管道,网络流,抓设备等) ,由-i
选项指定任意数量的读取和写入到任意数量的输出“文件”,这由一个普通的输出文件名被指定。任何 命令行不能被解释为一个选项上发现被认为是一个输出文件名。
每个输入或输出文件在原则上可以包含任意数量的不同类型(视频/音频/字幕/附件/数据)的流。允许数量 和/或类型的流可以由容器格式的限制。选择其中流从投入将进入其输出自动或与-map
选项完成(见流选择章节)。
是指输入文件的选项,则必须使用他们的索引(从0开始) 。例如第一输入文件是0
,第二个为1
,等等。同样, 在一个文件流通过其索引所指。例如2:3
指的是在第三个输入文件中的第四数据流。也看到了流符章。
作为一般规则,选择被施加到下一个指定的文件。因此,顺序很重要,你可以在命令行上多次相同的选项。 每次出现时则施加到下一个输入或输出文件。这条规则的例外是全局选项(例如冗长级) ,应首先规定。
不要混合输入和输出文件 - 首先指定所有输入文件,所有的输出文件。也不要混用属于不同的文件的选项。 所有选项仅适用于下一个输入或输出文件和文件之间重置。
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
ffmpeg -i input.avi -r 24 output.avi
ffmpeg -r 1 -i input.m2v -r 24 output.avi
可能需要对原始输入文件的格式选项
ffmpeg
每个输出代码转换过程可以由以下图描述:
| | | | | input | demuxer | encoded data | decoder | file | ———> | packets | —–+ |__| |____| | v ____ | | | decoded | | frames | |__| ___ ______ | | | | | | | output | <——– | encoded data | <—-+ | file | muxer | packets | encoder |__| |______|
ffmpeg
的调用了libavformat库(含分流器)来读取输入文件并获得含有从他们编码的数据包。 当有多个输入文件,ffmpeg
试图保持同步通过在任何活动的输入流跟踪最低的时间戳。
编码的数据包然后被传递到解码器(除非复制音频流被选择用于流,见进一步的说明)。解码器产生的未 压缩帧(原始视频/PCM音频/…),它可以进一步通过过滤进行处理(见下一节)。过滤后,这些帧被传递到 编码器,其编码它们并输出编码的数据包。最后这些被传递到复用器,并写入编码数据包到输出文件。
| | | | | decoded | | encoded data | | frames |\ _ | packets | |__| \ /||____| \ _____ / simple || | / encoder filtergraph | filtered |/ | frames | |___|
简单filtergraphs配置了每个流的筛选器选项(视频和音频分别-vf和-af别名)。一个简单的FilterGraph 动态视频可以看一下这样的例子:
_______ _____________ _______ ________
| | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______| |_____________| |_______| |________|
需要注意的是一些过滤器改变框架属性而不是画面的内容。例如在实施例中的fps
过滤器上方改变帧的数目, 但不触及帧内容。又如setpts
滤波器,其仅设置时间戳否则传递帧不变。
复杂filtergraphs是那些不能被描述为简单地施加到一个流的线性处理链。是这种情况下,例如,当图 具有多个输入和/或输出,或当输出流的类型和输入类型不同。它们可以被表示为以下图:
_________
| |
| input 0 |\ __________
|_________| \ | |
\ _________ /| output 0 |
\ | | / |__________|
_________ \| complex | /
| | | |/
| input 1 |---->| filter |\
|_________| | | \ __________
/| graph | \ | |
/ | | \| output 1 |
_________ / |_________| |__________|
| | /
| input 2 |/
|_________|
复杂filtergraphs配置有-filter_complex选项。注意,此选项是全局的,因为复杂FilterGraph动态, 就其性质,不能明确地与单个流或文件相关联。
该-lavfi选项相当于-filter_complex。
一个复杂FilterGraph动态的简单的例子是overlay
滤波器,它有两个视频输入和一个视频输出,含有一个视频 重叠在另一个的上面。其音频对应的amix
过滤器。