FFmpeg基本工作流程及语法概念
基本工作流程
基本语法概念
安装 FFMPEG 后,只需在终端上输入ffmpeg即可运行该程序。 FFMPEG 的基本流程非常直观。看下面这个非常基本的例子。
获取.wav格式的音频文件(例如:mysong.wav)并将其转换为 Mp3 音频文件,因此创建一个名为mysong.mp3的新文件。 假设文件mysong.wav已经在当前工作目录中,输入如下命令:
ffmpeg -i mysong.wav mysong.mp3
-i表示Input。 此输入可以是计算机中的本地文件,也可以是来自远程 URL 的文件。
在输出文件末尾指定的文件扩展名将使 FFMPEG 自动选择 Mp3 格式,并为该类型的文件提供一些最佳选项。 但是如果同时处理许多视频或不同的音频文件可能比这更复杂一些。 可能希望为该 mp3 输出选择特定的比特率,或者您的WAV 文件可能需要在转换发生之前进行预处理,例如使用标准响度归一化滤波器:
ffmpeg -i mysong.wav -af loudnorm -c:a mp3 -b:a 256k -ar 48000 mysong.mp3
这将采用相同的原始文件,但这次它将对其进行处理,然后将其转换为 mp3 文件:
ffmpeg -i mysong.wav:将处理输入文件mysong.wav
-af loudnorm :将应用Audio Filter Loudnorm,它将执行标准音频响度归一化
-c:a mp3:表示Codec Audio mp3。 此选项将指定我们要导出 mp3 文件
-b:a 256k:表示Bitrate of the Audio,将生成一个比特率为256 Kbit/s的音频文件
-ar 48000:表示Audio Rate。 此选项将进一步指定我们要创建具有特定音频采样率(在本例中为 48000 KHz)的输出文件。
相同的语法结构适用于视频文件。 举个例子:Apple ProRes 文件master.mov必须转换为h264:
ffmpeg -i master.mov master.mp4
输出文件上使用的扩展名将触发 FFMPEG 的几个默认选项,以便在 mp4 容器中生成高质量的 h264 文件。 但是我们可能想要一个更小的文件或一个特定的音频选项,或者可能需要从5.1音轨进行立体声缩混,或者我们可能想对一个3个小时的URL视频仅处理和输出其前2分30秒 :
ffmpeg -i https://www.dropbox.com/master.mov -t 00:02:30 -c:v h264 -b:v 3M -c:a aac -b:a 128k -ar 44100 -ac 2 master.mp4
-i:表示Input
-t:表示仅处理该指定时间段的数据
-c:v:表示Codec Video
-b:v:表示Video Bitrate,即每秒所需的视频数据量,以兆比特(Megabit)表示
-c:a:表示Audio Codec
-b:a:表示Audio Bitrate,即每秒所需的音频数据量,以千比特(kilobit)表示
-ar:表示Audio Rate,也称为采样率(Sampling Rate)。样本是在该音轨中对某个特定时间的测量,快照(Snapshot)。例如用1和0的二进制语言描述。 每秒重复该测量数万次; 采集快照的频率表示采样率或采样频率,以千赫兹(kiloHertz)为单位,单位表示每秒1000 次。 例如,音频 CD 的采样率为 44.1kHz,这意味着每秒对模拟信号进行44100次采样。
-ac 2:表示2 Audio Channels (Left+Right) 。当必须对包含多个音轨的音频文件进行混音(down-mix)时,例如Dolby Surround 5.1/7.1或其它类似音轨,那么此选项将很有用,
帮助命令的自解释能力
ffmpeg -h、ffmpeg -pix_fmts 这类帮助命令本身就很有价值。遇到“支持什么格式、选项叫什么、参数范围是多少”这类问题,先查帮助,再去搜资料。
像素格式和色彩空间的含义参见 常见的图片颜色编码;源码编译和调试参见 FFmpeg编译及调试。
设备接入
在 Windows 下打开 USB 摄像头,通常走 dshow。录制、预览、推流这三类动作最好分开记,不要堆成一段长命令,否则过后自己也看不懂。
日志接管
嵌入式或桌面程序集成 FFmpeg 时,av_log_set_callback() 是一个很实用的接入点。核心目标不是“把所有日志都打出来”,而是把严重级别、模块归属和现有日志系统接起来。
滤镜 API 的核心模型
libavfilter 的核心不是某个具体特效,而是 Filter Graph:
- 输入端一般是
buffer - 中间是功能性
filter - 输出端一般是
buffersink
想清楚这个模型之后,无论是 scale、overlay、drawtext 还是音频重采样,本质上都是在图里插节点。
与 GStreamer 的关系
GStreamer 更像一套完整的多媒体框架,而不是单纯的命令行工具,真正开始用它时必须以官方文档为主,再结合具体平台资料(例如 Rockchip 的平台说明)。如果问题已经落到某个厂商提供的二进制库或图像加速库符号缺失,那重点就不是 GStreamer 语法,而是平台依赖和运行时库版本。