FFmpeg入门
FFmpeg的基本组成
(1)FFmpeg的封装模块 AVFormat
(2)FFmpeg的编解码模块AVCodec
(3)FFmpeg的滤镜模块AVFilter
(4)FFmpeg的视频图像转换计算模块swscale
(2)FFmpeg的音频转换计算模块swresample
一些常用命令
分离音频命令:
ffmpeg -i xxx.avi -vn xxx.mp3
-i表示源文件 -vn表示不转换视频
分离视频命令:
ffmpeg -i xxx.avi -an xxx.mp4
-an表示不转换音频
显示设备 ffmpeg -devices
显示-dshow的设备 ffmpeg -list_devices true -f dshow -i dummy (dummy的意义是打印完毕就结束)
录音命令 ffmpeg -f dshow -i audio=”麦克风阵列 (英特尔® 智音技术)” hello.mp3
录制视频命令 ffmpeg -f dshow -i video=”Integrated Webcam” test.mp4
播放PCM音频文件 ffplay -ar 44100 -ac 2 -f s16le pcmFile.pcm
Tips
AndroidStudio中有时写C++代码会没有自动提示,此时需要
1 在local.properties文件中配置NDK路劲:ndk.dir=D:\SDK\ndk\21.1.6352462
2 将我们的源代码在CMakeLists.txt文件中添加到add_library()这个方法里,添加完如果还不行尝试重新打开应用
CMAKE message函数的TAG,
(无) = 重要消息;
STATUS = 非重要消息;
WARNING = CMake 警告, 会继续执行;
AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;
SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;
FATAL_ERROR = CMake 错误, 终止所有处理过程;
注意
1 不要使用逗号
2 错误TAG,会终止当前正在运行的
QT 引入静态库与动态库
LIBS += -L/usr/local/lib -lvlc 不需要lib前缀
LIBS += /usr/local/lib/libvlc.a 需要要lib前缀
[
FFmpeg关键结构体简介:
AVFormatContext
封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装 格式相关信息。
iformat:输入视频的AVInputFormat
nb_streams :输入视频的AVStream 个数
streams :输入视频的AVStream []数组
duration :输入视频的时长(以微秒为单位)
bit_rate :输入视频的码率
AVInputFormat
每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。
name:封装格式名称
long_name:封装格式的长名称
extensions:封装格式的扩展名
id:封装格式ID 一些封装格式处理的接口函数
AVStream
视频文件中每个视频(音频)流对应一个该结构体。
id:序号
index:在封装格式AVFormatContext的streams数组中的位置
codecpar: AVCodecParameters包含了一些流的属性,codec_type(媒体类型), codec_id(解码器ID)
time_base:该流的时基
r_frame_rate:该流的帧率
AVCodecContext
编码器上下文结构体,保存了视频(音频)编解码相关信息
codec:编解码器的AVCodec
width, height:图像的宽高(只针对视频)
pix_fmt:像素格式(只针对视频)
sample_rate:采样率(只针对音频)
channels:声道数(只针对音频)
sample_fmt:采样格式(只针对音频)
AVCodec
每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。
name:编解码器名称
long_name:编解码器长名称
type:编解码器类型
id:编解码器ID
一些编解码的接口函数
AVPacket
存储一帧压缩编码数据。
pts:显示时间戳
dts :解码时间戳
data :压缩编码数据
size :压缩编码数据大小
stream_index :所属的AVStream
AVFrame
存储一帧解码后像素(采样)数据。
data:解码后的图像像素数据(音频采样数据)
linesize:对视频来说是图像中一行像素的大小;对音频来说是整个音 频帧的大小。
width, height:图像的宽高(只针对视频)。
key_frame:是否为关键帧(只针对视频) 。
pict_type:帧类型(只针对视频) 。例如I,P,B。