组成
ffmpeg是录制、转换以及流化音视频的完整的跨平台的解决方案。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,现在由Michael Niedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
相关术语解释如下:
术语 | 全称 | 说明 |
---|---|---|
ffmpeg | Fast forword mpeg | 音视频转换器 |
ffplay | Fast forword play | 用ffmpeg实现的播放器 |
ffserver | Fast forword server | 用ffmpeg 实现的rstp 服务器 |
ffprobe | Fast forword probe | 用来输入分析输入流 |
主要功能库如下:
libavutil:能使编程简化的函数库,如生成随机数、数据结构、教学案例、核心的多媒体程序等。
libavcodec:用于对音频和视频的编码和解码。
libavformat:用于对多媒体格式封装的复用与解复用。(复用与解复用为专业术语,后面会介绍到)
libavdevice:用于对输入/输出设备数据的数据的读与写,包括Video4Linux, Video4Linux2, VfW, and ALSA。
libavfilter:用于对多媒体滤镜的调用。
libswscale:是一个高度优化的图像缩放和颜色空间/像素格式转换操作的库。
libswresample:是一个高度优化的音频重采样、重排列颜色矩阵的操作的库。
调用命令规则:
ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
参数选项由三部分组成:(1)可选的一组全局参数。(2)一组或多组输入文件参数。(3)一组或多组输出文件参数。
其中,每组输入文件参数以‘-i’为结束标记;每组输出文件参数以输出文件名为结束标记,方括号表示可选项,花括号表示必选项。
简介
ffmpeg是一个能高速转换视频与音频的转换器,同时它还能抓取实时的视频和音频。ffmpeg可以使用高质量的多相滤镜去转换任意比特率的视频。
ffmpeg可以读取任意数量的输入文件(如规范的文件、管道、网络数据流、数据抓捕设备等),通过-i 调用;同样,可以写入任意数量的输出文件,输出文件由一个纯输出文件名指定的,在写输出文件参数时,任何不能被系统识别的命令项都将会被认为是输出文件。
各个输入和输入文件,在原则上,可以包含多个不同类型的数据流(video/audio/subtitle/attachment/data),这些不同类型的数据流会依据该文件封装的格式而定。输入文件中选择哪些数据流作为输出文件的数据流也都是自动化的,若想了解可以参考ffmpeg官网文档关于Stream的章节。
在使用输入文件的索引指向命令项时,索引值是以0开始计数,如2:3指的是第三个输入文件的第四个数据流。
按照一般规则,命令项的每一个命令默认都是指向下一个文件的,所以你可以多次使用同一个命令项指向下一个文件,但也有例外,如全局命令项就应该写在最前面。
在写命令行时,不要混淆输入文件和输出文件,输入文件写在前面,输出文件写在后面,输入文件和输出文件都有各自的命令项。
命令行调用例子:
(1)修改一个视频的比特率为64kbit/s
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
(2)修改一个视频的帧频数
ffmpeg -i input.avi -r 24 output.avi
(3)强制修改输入文件的帧频为1,同时生成一个帧频为24的输出文件
ffmpeg -r 1 -i input.m2v -r 24 output.avi