​ffmpeg​​是一个非常快速的视频和音频转换器,也可以从实时音频/视频源中获取。它还可以在任意采样率之间进行转换,并使用高质量的多相滤波器动态调整视频大小。

​ffmpeg​​​从任意数量的输入"文件"(可以是常规文件、管道、网络流、抓取设备等)中读取,并写入任意数量的输出"文件",这些文件由普通输出 URL 指定。在命令行上找到的任何不能解释为选项的内容都被视为输出 URL。​​-i​

原则上,每个输入或输出 URL 可以包含任意数量的不同类型的流(视频/音频/字幕/附件/数据)。允许的流数量和/或类型可能受到容器格式的限制。选择哪些流中的输入将进入哪个输出是自动完成的,也可以使用该选项完成(请参阅流选择一章)。​​-map​

若要在选项中引用输入文件,必须使用其索引(从 0 开始)。例如,第一个输入文件是 ,第二个是 ,等等。同样,文件中的流由其索引引用。例如 引用第三个输入文件中的第四个流。另请参阅流说明符一章。​​0​​​​1​​​​2:3​

作为一般规则,选项将应用于下一个指定的文件。因此,顺序很重要,您可以在命令行上多次使用相同的选项。然后,每个匹配项将应用于下一个输入或输出文件。此规则的例外是全局选项(例如详细级别),应首先指定。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。也不要混合属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

要将输出文件的视频比特率设置为 64 kbit/s,请执行以下操作:

    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

    要将输入文件的帧速率(仅对原始格式有效)强制为 1 fps 并将输出文件的帧速率强制为 24 fps,请执行以下操作:​

要将输出文件的帧速率强制为 24 fps,请执行以下操作:

原始输入文件可能需要格式选项。

详细说明​

每个输出的转码过程可以通过下图来描述:​​ffmpeg​

_______              ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|

​ffmpeg​​​调用 libavformat 库(包含解复用器)来读取输入文件并从中获取包含编码数据的数据包。当存在多个输入文件时,尝试通过跟踪任何活动输入流上的最低时间戳来使它们保持同步。​​ffmpeg​

然后,编码的数据包将传递到解码器(除非为流选择了流复制,否则有关说明,请参阅进一步)。解码器生成未压缩的帧(原始视频/PCM 音频/...),可以通过过滤进一步处理(请参阅下一节)。过滤后,帧被传递到编码器,编码器对帧进行编码并输出编码的数据包。最后,这些数据包被传递到多路复用器,后者将编码的数据包写入输出文件。