视频编解码的理论和实践2:Ffmpeg视频编解码
近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术。因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术。
相关阅读推荐
《视频编解码的理论和实践1:基础知识介绍》
1、Ffmpeg介绍
《视频编解码的理论和实践1:基础知识介绍》介绍了视频编码的基础知识,本篇文章,我们一起看看实际应用中的视频编码是如何操作的。
在实际工程项目中,ffmpeg是应用最多的多媒体处理框架,它提供了音视频采集、编解码、图像处理,格式转换等功能,并且拥有很强的扩展能力,通过ffmpeg可以很容易集成第三方库(例如:x264、openh264等),通过这种能力,它可以实现更强大的功能。Ffmpeg由下面几个部分构成:
Libavformat:音视频格式处理
Libavcodec:音视频编解码
Libavfilter:音视频滤镜
Libavdevice:音视频设备采集
Libswscale:图像缩放、转换
Libswresample:音频重采样
Ffmpeg:一个命令行的转码工具
Ffplay:一个命令行播放器
Ffprobe:简单的媒体格式分析工具
2、Ffmpeg视频编码
视频编码是ffmpeg提供的基本功能之一,通过ffmpeg可以很容易实现视频编码操作。使用ffmpeg进行视频编码之前需要把x264、openh264等第三方编解码库集成到ffmpeg中才能使用。编码步骤如下:
(1) 注册编码器
(2) 根据名字或者ID查找你想使用的编码器(例如x264、x265、openh264等)
(3) 创建一个编码器上下文对象
(4) 在编码器上下文对象中设置编码器参数
(5) 打开编码器
(6) 读取一帧图像进行编码,一直重复该过程,直到处理结束
(7) 关闭编码器
示例代码如下:
avcodec_register_all(); // 注册所有可用的编码器
codec = avcodec_find_encoder_by_name(“libx264”); // 查找编码器
ctx = avcodec_alloc_context3(codec); // 创建编码器上下文
ctx->width = 1280; // 设置编码器参数
ctx->height = 720;
// ….其他的参数设置
avcodec_open2(ctx, codec, NULL); // 打开编码器
while(read_frame(frame)){
AVPacket pkt; // 存放编码之后的数据
int got_output = 0; // 是否成功编码得到一个图像
avcodec_encode_video2(ctx, &pkt, frame, &got_output); // 编码
if(got_output){
// 得到编码后的数据,进行后续操作
}
}
avcodec_free_context(&ctx); // 关闭编码器
可以看到,ffmpeg隐藏了大部分的编码细节,调用者不需要了解预测、变换、量化、熵编码等细节,这些细节都已经被ffmpeg封装好了,开发者只要把编码参数设置好,然后调用相关的接口函数,即可实现视频编码功能。当然,这知识最基本的编码功能,要想在画面质量和压缩率之间取得平衡,必须了解视频编码的细节,然后设置相应的参数
3、Ffmpeg视频解码
Ffmpeg自带了H264的视频解码器,开发者可选择直接使用ffmpeg自带的H264解码器或者第三方的解码库进行视频解码。和视频编码一样,解码操作的大部分细节都已经被ffmpeg隐藏起来了,开发者只需要设置好相关的解码参数,然后调用接口函数就可以实现解码功了。解码流程如下:
(1) 注册解码器
(2) 查找解码器
(3) 创建解码器上下文对象
(4) 设置解码参数
(5) 打开解码器
(6) 读取数据进行解码,直到结束
(7) 关闭解码器
代码示例如下:
avcodec_register_all(); //注册解码器
codec = avcodec_find_decoder_by_name(“h264”); // 查找解码器
ctx = avcodec_alloc_context3(codec); // 创建解码器上下文对象
//…设置解码参数
avcodec_open2(ctx, codec, NULL); // 打开解码器
while(read_packet(pkt)){
AVFrame frame; // 存放解码之后的图像数据
int got_frame = 0;
avcodec_decode_video2(ctx, frame, &got_frame, pkt); // 解码
if(got_frame){
// 解码得到一帧图像,进行后续操作…
}
}
avcodec_free_context(&ctx); // 关闭解码器
可以看到ffmpeg是个非常强大的多媒体处理框架,通过ffmpeg我们可以很容易进行音视频方面的处理。上面介绍的只是ffmpeg的冰山一角,要想熟练使用ffmpeg,必须花很多时间去熟练使用它。
更多即时通讯、音视频技术的干货文章,请关注网易云信博客。
视频编解码的理论和实践2:Ffmpeg视频编解码的更多相关文章
- 编解码再进化:Ali266 与下一代视频技术
过去的一年见证了人类百年不遇的大事记,也见证了多种视频应用的厚积薄发.而因此所带来的视频数据量的爆发式增长更加加剧了对高效编解码这样的底层硬核技术的急迫需求. 新视频编解码标准 VVC 定稿不久之后, ...
- 【视频编解码·学习笔记】3. H.264视频编解码工程JM的下载与编解码
一.下载JM工程: JM是H.264标准制定团队所认可的官方参考软件.网址如下 http://iphome.hhi.de/suehring/tml/ 从页面中可找到相应的工程源码,本次选择JM 8.6 ...
- 在线公开课 | 5G时代的视频云服务关键技术与实践
5G时代来临在即,视频技术将会如何发展呢?基于视频云服务的技术开发又有怎样的变化呢?为此,京东云视频云产品研发部高级总监魏伟为大家做出了详细解读. 魏伟拥有10多年视频行业研发经验,先后从事于AVS标 ...
- 课程报名 | 5G时代的视频云服务关键技术与实践
6月3日,工业和信息化部宣布将于近期发放5G商用牌照.这也意味着,中国正式进入了5G时代. 5G身上有很多新标签:"大规模天线"."新的编码技术"." ...
- iOS - 直播总结(理论到实践)
一.直播原理及流程 1.一个完整直播app原理 直播原理:把主播录制的视频,推送到服务器,在由服务器分发给观众观看. 直播环节:推流端(采集.美颜处理.编码.推流).服务端处理(转码.录制.截图.鉴黄 ...
- SEO从理论到实践
GITHUB:http://www.liu12fei08fei.top/blog/12seo.html 明白seo是什么 知道怎么做 SEO从理论到实践 什么是SEO? SEO和SEM的区别 SEO和 ...
- ffmpeg H264 编解码配置
ffmpeg H264编解码前面有文章介绍下,本文主要介绍一些参数配置. 编码: int InitEncoderCodec( int iWidth, int iHeight) { AVCodec * ...
- FFmpeg(三) 编解码相关函数理解
一.编解码基本流程 主要流程: 打开视频解码器(音频一样) 软解码.硬解码 进行编解码 下面先来看打开视频解码器 ①avcodec_register_all()//初始化解码 ②先找到解码器. 找解码 ...
- DevOps理论+实践之路
DevOps理论+实践之路 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以关注 ...
随机推荐
- vs2008C1902数据库管理程序不匹配
打开一大早vs2008,有这么奇怪的错误, 删了dll正好.图. 版权声明:本文博主原创文章.博客,未经同意不得转载.
- DragControl
原文:DragControl 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Vblegend_2013/article/details/837911 ...
- 对偶空间(dual linear space)
1. 定义 设 V 为定义在数域 F 上的向量空间,定义 V 上的线性函数是从 V 到 F 的映射:f:V→F,且满足 ∀x,y∈V,k∈F 有:f(x+y)=f(x)+f(y),f(ka)=kf(a ...
- WCF寄宿与IIS里时遇到的问题
[问题总结]WCF寄宿与IIS里时遇到的问题 最近在公司做了一个小的视频处理网站,由于视频处理,网站在不同的服务器上,所以处理视频的时候得在网站服务器上通过wcf请求视频处理服务器处理视频,并将结果返 ...
- UVa 11400 Lighting System Design(DP 照明设计)
意甲冠军 地方照明系统设计 总共需要n不同类型的灯泡 然后进入 每个灯电压v 相应电压电源的价格k 每一个灯泡的价格c 须要这样的灯泡的数量l 电压低的灯泡能够用电压高的灯泡替换 ...
- 搭建本地yum源和局域网yum源
搭建本地yum源和局域网yum源 由于很多客户环境是专网,不允许连网,无法使用网上的各种yum源,来回拷贝rpm包安装麻烦,还得解决依赖问题.所以想着搭建个本地/局域网YUM源,方便安装软件. 1 ...
- laravel 报错SQLSTATE[HY000] [2002] No such file or directory
在mac中执行php artisan migrate时报错 SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from i ...
- 谷歌将为 Mac 和 Windows 用户推出新的备份和同步应用
据报道,谷歌将于 6 月 28 日面向 Mac 和 Windows 用户发布一款新的备份和同步应用(Backup and Sync app). Google 刚刚宣布将推出其备份和同步应用程序,该工具 ...
- 隐藏system窗口你也行(就是那个cmd窗口,好多方法)
新process的启动,可以通过system(const char*)函数启动另外一个程序,但是有一个小问题,就是每次执行system函数的时候,都会弹出dos窗口(命令行嘛~~~),有没有什么方法能 ...
- 【Linux】简单明了查看内存使用和ubuntu的版本号及位数
1.查看ubuntu的版本号:cat /etc/issue 2.查看系统是32位的还是64位:getconf LONG_BIT 3.查看内存使用 free free命令可以用来查看系统内存使用情况,- ...