FFmpeg:Fast Forward Moving Picture Experts Group
FFmpeg 命令行工具的使用
在 FFmpeg 官网 可以下载对应平台的可执行程序包,比如 Windows 平台的下载地址是:https://ffmpeg.zeranoe.com/builds/,下载解压后就能在 bin 文件夹下能看到三个可执行程序:ffmpeg、ffplay、ffprobe,配置好环境变量后即可使用。
ffprobe
ffprobe 是用于查看媒体文件头信息的工具,常用命令有:
ffprobe INPUT
ffprobe -show_format INPUT
ffprobe -show_streams INPUT
ffprobe -show_frames INPUT
ffprobe -show_packets INPUT
...
show_format 用于查看文件格式、时长、码率等信息,较为简略;
show_streams 用于查看视频流、音频流的信息,包括编码器、帧率、采样率、宽高、像素格式、采样格式、码率、时长、总帧率等等,较为详细,是最常用的一个功能;
show_frames、show_packets 用于查看每一帧(解码前/解码后)的信息,可以配合 select_streams 使用;
关于 ffprobe 的更多命令可以查看官网文档:ffprobe Documentation
ffplay
ffplay 是用于播放媒体文件的工具,常用命令有:
ffplay INPUT -loop 10 // 循环播放 10 次
ffplay INPUT -ast 1 // 播放视频中的第一路音频流
ffplay INPUT -vst 1 // 播放视频中的第一路视频流
ffplay INPUT -x WIDTH -y HEIGHT // 指定宽高播放
...
播放原始音频/视频数据:
ffplay INPUT.pcm -f s16le -channels 2 -ar 44100
ffplay -f rawvideo -pixel_format yuv420p -s 480*480 INPUT.yuv(或 rgb)
指定播放过程中音视频同步的方式:
// 以音频(或视频、或外部时钟)作为基准进行音视频同步
ffplay INPUT -sync audio(或 video、ext)
关于 ffplay 的更多命令可以查看官网文档:ffplay Documentation
ffmpeg
ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择:
ffmpeg -i INPUT -codec:v h264 -codec:a aac -s 644x360 OUTPUT
更详细的内容可以查看官网文档:ffmpeg Documentation
通用选项
还有一些命令可以用于查看 ffmpeg 支持的编解码器、像素格式、采样格式等信息,即上面 3 个文档都有的 Generic options 部分,上述三个命令都可以查看这些信息,比如:
ffmpeg -encoders
ffprobe -sample_fmts
ffplay -pix_fmts
FFmpeg 源码结构
主要组成
这部分直接引用自雷神的博客:FFMPEG中最关键的结构体之间的关系
FFMPEG中结构体很多。最关键的结构体可以分成以下几类:
a) 解协议(http,rtsp,rtmp,mms)
AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)
b) 解封装(flv,avi,rmvb,mp4)
AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat存储输入视音频使用的封装格式。每种视音频封装格式都对应一个AVInputFormat 结构。
c) 解码(h264,mpeg2,aac,mp3)
每个AVStream存储一个视频/音