-
摘要
ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
-
描述
ffmpeg
是一个非常快的视频和音频转换器,还可以从实时音频/视频源获取。它还可以在任意采样率之间 转换和调整高质量的视频的多相滤波器从
ffmpeg
的输入“文件”(可以是普通文件,管道,网络流,抓设备等) ,由-i
选项指定任意数量的读取和写入到任意数量的输出“文件”,这由一个普通的输出文件名被指定。任何 命令行不能被解释为一个选项上发现被认为是一个输出文件名。每个输入或输出文件在原则上可以包含任意数量的不同类型(视频/音频/字幕/附件/数据)的流。允许数量 和/或类型的流可以由容器格式的限制。选择其中流从投入将进入其输出自动或与
-map
选项完成(见流选择章节)。是指输入文件的选项,则必须使用他们的索引(从0开始) 。例如第一输入文件是
0
,第二个为1
,等等。同样, 在一个文件流通过其索引所指。例如2:3
指的是在第三个输入文件中的第四数据流。也看到了流符章。作为一般规则,选择被施加到下一个指定的文件。因此,顺序很重要,你可以在命令行上多次相同的选项。 每次出现时则施加到下一个输入或输出文件。这条规则的例外是全局选项(例如冗长级) ,应首先规定。
不要混合输入和输出文件 - 首先指定所有输入文件,所有的输出文件。也不要混用属于不同的文件的选项。 所有选项仅适用于下一个输入或输出文件和文件之间重置。
-
设置输出文件以64千比特/秒的视频比特率:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
-
强制输出文件为24 fps的帧速率:
ffmpeg -i input.avi -r 24 output.avi
-
强制输入文件的帧频(只有原始格式有效),以1FPS和每秒24帧的帧速率输出文件:
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音频/…),它可以进一步通过过滤进行处理(见下一节)。过滤后,这些帧被传递到 编码器,其编码它们并输出编码的数据包。最后这些被传递到复用器,并写入编码数据包到输出文件。
-
过滤器 在编码之前,ffmpeg的可以处理原始音频和使用过滤器从libavfilter库视频帧。几个链接过滤器组成的 过滤器图,ffmpeg有两种filtergraphs的区分:简单和复杂。
- 简单过滤图 简单filtergraphs是那些具有正好一个输入和输出,这两个相同的类型。另外,在上述图他们可以通过 简单地插入解码和编码之间的附加步骤来表示:
| | | | | 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
过滤器。
- 流拷贝