【读书会第13期】+第一章 多媒体处理工具 FFmpeg 工具集
【摘要】 今天主要学习内容知识点回顾:FFmpeg的发展:法布里斯·贝拉 5.0 开源软件 FFmpeg的组成:包括 AVFormat、AVCodec、AVFilter、AVDevice、AVUtil、swresample、swscaleFFmpeg的工具集:ffmpeg 、ffplay、ffprobe 1.FFmpeg的发展FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功...
今天主要学习内容知识点回顾:
- FFmpeg的发展:法布里斯·贝拉 5.0 开源软件
- FFmpeg的组成:包括 AVFormat、AVCodec、AVFilter、AVDevice、AVUtil、swresample、swscale
- FFmpeg的工具集:ffmpeg 、ffplay、ffprobe
1.FFmpeg的发展
FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
- 开发者:法布里斯·贝拉
- 开发时间:2000年
- 目前版本:5.0
- 开源项目:https://github.com/FFmpeg/FFmpeg
- 使用情况:已经被很多开源项目所采用,比如 ijkplayer、VLC、MPlayer、Blender、Google Chrome等
2.FFmpeg的组成
FFmpeg 工程内部根据功能划分了不同的模块,包括 AVFormat、AVCodec、AVFilter、AVDevice、AVUtil、swresample、swscale。
- AVFormat 是 FFmpeg 的封装模块,文件格式和协议库,最重要的模块之一,其中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,比如 MP4、FLV、MKV、TS 等文件封装格式,RTMP、RTSP、HLS 等网络协议封装格式。另外,也支持自定义封装格式。封装了 Protocol 层和 Demuxer、Muxer 层。常用于读写文件及文件信息,比如 avformat_write_header(写文件头)、av_write_trailer(写文件尾)、av_read_frame (从文件中读取一帧编码后的图像/音频数据)、av_write_frame(往文件中写一帧编码后的图像/音频数据)、av_seek_frame(给定一个时间戳,移动读指针到对应位置)等等。
- AVCodec 是 FFmpeg 的编解码模块,其中实现了目前多媒体领域中的绝大多数媒体编解码格式,包括编码和解码两大部分,比如 MPEG4、H264、H265 等视频格式,AAC、MP3 等音频格式。另外,也支持自定义编解码格式。FFmpeg 默认不会添加 libx264、FDK-AAC 等库,但 FFmpeg 可以像一个平台一样,将其它第三方的 Codec 以插件的形式添加进来,并为开发者提供统一的接口。编解码需要用到的函数基本都在该库中,比如 avcodec_find_decoder(找到对应的第三方解码器)、avcodec_decode_video2(使用对应的解码器解码一帧图像/音频数据)。
- AVFilter 是 FFmpeg 的滤镜模块,其中实现了目前通用的音频、视频、字幕等滤镜处理框架。比如把 “drawbox=10:20:200:60:red@0.5” 这条命令,传递给函数 avfilter_graph_parse() 解析,并传递原始图像数据到该 filter 中,就能在图像坐标为 (10, 20) 的点上生成一个宽高为 (200, 60) 、透明度为 0.5 的红色矩形。
-
AVDevice 是 FFmpeg 的设备管理模块,输入输出设备库,包括音频设备和视频设备。
-
AVUtil 是 FFmpeg 的工具模块。核心工具库,最基础的模块之一,其它模块经常依赖该库做一些基本的音视频处理操作,比如 av_image_fill_arrays(填充原始图像数据到 AVFrame)、av_image_get_buffer_size(根据图像宽高、格式获取填充该图像需要的字节数)、av_get_pix_fmt_name(获取像素格式的名称) 等等。
-
swresample 是 FFmpeg 的音频转换模块,包括音频重采样、声道数调整、可转换音频的声道数、数据格式、采样率等格式等。
-
swscale 是 FFmpeg 的视频图像转换模块,包括图像缩放、可用于处理像素格式转换等。
3.FFmpeg的工具集
在 FFmpeg 官网 可以下载对应平台的可执行程序包(http://ffmpeg.org/download.html),下载(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-2022-07-18-git-cb22d5ea3c-full_build.7z)解压后就能在 bin 文件夹下能看到三个可执行程序:ffmpeg、ffplay、ffprobe
配置好环境变量后即可使用。
环境变量配置:
电脑——属性——高级系统设置——环境变量(解压路径D:\360安全浏览器下载\ffmpeg-2022-07-18-git-cb22d5ea3c-full_build\bin)
查看是否配置成功,配置完成后运行cmd,输入ffmpeg,若显示如下界面,则说明配置成功。
参考文档 https://ffmpeg.org/ffmpeg.html#Stream-specifiers-1
- ffmpeg 是 FFmpeg 工具集中的编解码工具。常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择:ffmpeg -i INPUT -codec:v h264 -codec:a aac -s 644x360 OUTPUT
- ffplay 是 FFmpeg 工具集中的播放器。常用命令
// 循环播放 10 次
ffplay INPUT -loop 10
// 播放视频中的第一路音频流
ffplay INPUT -ast 1
// 播放视频中的第一路视频流
ffplay INPUT -vst 1
// 指定宽高播放
ffplay INPUT -x WIDTH -y HEIGHT
- ffprobe 是 FFmpeg 工具集中的多媒体分析工具。用于查看媒体文件头信息的工具,常用命令
ffprobe INPUT
//查看文件格式、时长、码率等信息
ffprobe -show_format INPUT
//查看视频流、音频流的信息,包括编码器、帧率、采样率、宽高、像素格式、采样格式、码率、时长、总帧率等等,较为详细,是最常用的一个功能;
ffprobe -show_streams INPUT
//用于查看每一帧(解码前/解码后)的信息
ffprobe -show_frames INPUT
ffprobe -show_packets INPUT
...
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)