原文地址:http://ffmpeg.org/ffmpeg-all.html#Synopsis
用法
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
FFmpeg
ffmpeg 是一个非常快速的视频和音频转换器,也可以从在线音频/视频源中获取。 它还可以在任意采样率之间进行转换,并使用高质量的多相滤波器动态调整视频大小。
ffmpeg 可以配合 “-i” 参数输入各种不限数量的多媒体输入流(可以是常规的为多媒体文件,或者管道、网络流、抓取设备等),并写入任意数量的输出多媒体文件,输入地址位置由指定的输入路径确定。
原则上,每个输入或输出URL可以包含任何数量的不同类型的流(视频/音频/字幕/附件/数据)。 允许的流的数量和/或类型可以受容器格式的限制。 选择哪些输入将通过哪些输入自动完成或使用-map选项进行输出。要在选项中引用输入文件,必须使用它们的索引(从0开始)。 例如。 第一个输入文件是0,第二个是1,等等。类似地,文件中的流由它们的索引引用。 例如。 2:3指的是第三个输入文件中的第四个流。 另请参阅Stream说明符章节。
作为一般规则,选项将应用于下一个指定的文件。 因此,顺序很重要,您可以在命令行上多次使用相同的选项。 然后将每次出现应用于下一个输入或输出文件。 此规则的例外是全局选项(例如详细级别),应首先指定。
不要混合输入和输出文件 – 首先指定所有输入文件,然后指定所有输出文件。 也不要混合属于不同文件的选项。 所有选项仅适用于下一个输入或输出文件,并在文件之间重置。
- 将视频的比特率转化为64 kbit/s:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
- 强制输出视频的帧速率为24fps:
ffmpeg -i input.m2v -r 24 output.avi
- 强制输入视频文件的帧速率为 1fps,输出视频文件的帧速率为 24fps.
ffmpeg -r 1 -i input.m2v -r 24 output.avi
转码过程
_______ ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|
ffmpeg调用libavformat库(包含音视频分离器)来读取输入文件并从中获取包含编码数据的数据包。 当有多个输入文件时,ffmpeg会尝试通过跟踪任何活动输入流上的最低时间戳来保持它们的同步。
然后将编码的数据包传递给解码器(除非为流选择了流复制,进一步参见说明)。 解码器产生未压缩的帧(原始视频/ PCM音频/ …),可以通过过滤进一步处理(参见下一节)。 在过滤之后,帧被传递到编码器,编码器对它们进行编码并输出编码的分组。 最后将这些传递给复用器,复用器将编码的数据包写入输出文件。