![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ffmpeg-mac
文章平均质量分 56
学习ffmpeg时在mac环境下的记录
一叶知秋@qqy
这个作者很懒,什么都没留下…
展开
-
FFmpeg多媒体文件处理(ffmpeg打印音视频Meta信息)
打印音/视频信息avdevice_register_all()avformat_open_input()/avformat_close_inputav_dump_format()实战int main(int argc, const char * argv[]) { int ret = 0; AVFormatContext *fmt_ctx = NULL; //创建AVFormatContext格式上下文指针 av_log_set_level(AV_LOG_I原创 2021-07-31 21:50:40 · 456 阅读 · 0 评论 -
FFmpeg多媒体文件处理(ffmpeg处理流数据的基本概念)
多媒体文件概念多媒体文件其实是个容器在容器里有很多流(Stream/Track)每种流是由不同的编码器编码的从流里读出的数据称为包在一个包中含着一个或多个帧几个重要结构体AVFormatContext 格式上下文AVStream 流和轨的概念AVPacket 一个个包ffmpeg在操作流数据的基本步骤...原创 2021-07-31 20:57:26 · 342 阅读 · 0 评论 -
FFmpeg多媒体文件处理(ffmpeg操作目录及list的实现)
操作目录重要函数avio_open_dir() 打开目录avio_read_dir() 读取目录中每一项文件的信息,包括文件的大小等avio_close_dir() 关闭目录,释放资源操作目录重要结构体AVIODirContext 操作目录的上下文AVIODirEntry 目录项,用于存放文件名,文件大小等信息实战 简单的ls命令在linux、mac等系统下,终端输入ls就可以看见当前目录下有哪些文件,他们的属性是什么使用ls -alt,可以查看更详细的信息#include &原创 2021-07-29 23:20:29 · 727 阅读 · 0 评论 -
FFMPEG多媒体文件处理(ffmpeg文件的删除与重命名)
文件的删除与重命名avpriv_io_delete() 删除ffmpeg文件avpriv_io_move() 重命名ffmpeg文件所有对文件操作,对目录操作都是在libavformat子模块下,即要引入这个头文件include <libavformat/avformat.h>删除文件例子:ret = avpriv_io_delete("./mytestfile.txt"),ret小于0失败在终端寻找库的位置,使用pkg-config --libs libavformat原创 2021-07-29 22:44:01 · 972 阅读 · 0 评论 -
FFmpeg多媒体文件处理(FFMPEG日志系统)
FFMPEG日志系统include <libavutil/log.h> 引用ffmpeg头文件av_log_set_level(AV_LOG_DEBUG) 设置ffmpeg日志级别,debug级别是ffmpeg最低的级别av_log(NULL, AV_LOG_INFO, “…%S\N”, op) 打印日志,第一个参数一般设置为NULL,先忽略,后面说,第二个参数是日志级别,第三个是可变参数,用法与printf是类似的。常用日志级别AV_LOG_ERRORAV_LOG_WARNI原创 2021-07-29 22:17:28 · 269 阅读 · 0 评论 -
FFmpeg多媒体文件处理(ffmpeg初级开发介绍)
初级开发内容这个系列开始对ffmpeg进行学习,主要涉及到以下几个方面:FFmpeg日志的使用及目录操作介绍FFmpeg的基本概念及常用结构体对复用/解复用及流操作的各种实战FFmpeg代码结构库名含义libavcodec提供了一系列编码器的实现libavformat实现在流协议,容器格式及基本IO访问libavutl包括了hash器,解码器和各种工具函数libavfilter提供了各种音视频过滤器libavdevice提供了访问捕获设备原创 2021-07-28 22:59:47 · 161 阅读 · 0 评论 -
RTMP传输(RTMP消息)
RTMP消息格式RTMP是由RTMP Header 和RTMP Body组成的。RTMP Header 包括 Basic Header, Message Header, Extened TimeStampBasic HeaderBasic Header的第一个字节分为两部分fmt(占2位)和后面的数字x(占6位)如果x是0 就在增加一个字节CSID,标识的范围是2^6 -------2^6 + 2^8如果x是1 就在增加3个字节CSID1 CSID2 CSID3,标识的范围是 2^6 + 2^原创 2021-07-26 23:21:13 · 435 阅读 · 0 评论 -
RTMP传输(创建RTMP流)
协议中RTMP流的创建真实创建RTMP流真实推RTMP流真实播RTMP流原创 2021-07-26 22:39:29 · 256 阅读 · 0 评论 -
RTMP传输(RTMP连接的建立)
RTMP协议应用范围:娱乐直播的传输和点播协议HLS 是由苹果公司推出的,用来替换RTMP协议。但由于前期各个厂家的投入。替换的可能性微乎其微。RTMP相对于HLS 的效率和实时性上要高很多。RTMP依赖于TCP协议。RTMP是在TCP之上的,client和server的connection也是通过三次握手。管道中的虚线表示建立链接后的stream。橙色的流指的是客户端发布节目到服务端,服务端接收到流时会直接接收,有客户订阅时通过蓝色流传出去。RTMP创建流的基本流程socket建立T原创 2021-07-26 22:22:18 · 957 阅读 · 0 评论 -
VSCode+MakeFile+SSH Remote Debug
简介VSCode一直被冠以最强的编辑器,其自身是支持SSH远程连接以及Debug功能,所以在查找了相当多的资料后整理了一下远程调试设备的方法,通过SSH远程连接ubuntu(这里采用的是ubuntu18.04),直接访问编辑linux下的代码,并通过MakeFile文件进行编译,最后实现远程debug代码。值得注意的是,现在仅仅是在linux上验证测试过,未在实体设备上验证,如有需求自行验证,原理相同,理论是可用的。SSH连接如果在之前就使用过ssh,安装openssh-server、wget、cu原创 2021-07-26 15:50:25 · 1903 阅读 · 0 评论 -
视频编码解码(x264参数)
x264参数分类预设值在libx264中有一些参数是预先设置好的,直接使用就可以,不用自己去设置。preset fast/slowpreset的参数主要调节编码速度和质量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢,要根据自己的需求去设置,然后编码器就会根据我们的要求去数据编码结果。例如设置very fast,是最主要用在实时通讯的领域,编码器在编码时追求的原创 2021-07-25 23:11:57 · 2629 阅读 · 0 评论 -
视频编码解码(H264编码实战)
基本步骤打开编码器在打开编码器时,要设置一些参数,例如具体使用的哪一个编码器,编H264时要使用libx264,编H265时要使用libx265。还需要设置GOP,码流大小、分辨率宽和高也需要设置。转换NV12到YUV420PNV12是mac下采集视频的格式,NV12是一个包裹的格式,分两层,第一层是Y,第二层是UVUV进行交替存储,yuv420P是编码器libx264要求的格式。转换时可以采用ffmpeg自身的swscale转换,还可以用google开发的libyuv,还可以自己手工写原创 2021-07-25 21:49:58 · 1753 阅读 · 1 评论 -
FFmpeg获取设备可用视频设备及其支持格式
当使用ffmpeg获取摄像头图像时,涉及到摄像头的设备名,以及设置分辨率等等,虽然可以根据经验去做大概的猜测,但是对于我这样子的小白来说就没有什么经验了,所以还是查询一下比较稳妥。使用如下的命令去查询都有那些设备:ffmpeg -f avfoundation -list_devices true -i ""返回如下界面:在AVFoundation video devices中有两个设备名。一个是[0],指的是摄像头的采集界面,另一个是[1],指的是屏幕的捕捉界面。还有就是下面的AVFound原创 2021-07-24 15:50:00 · 2400 阅读 · 0 评论 -
ffmpeg配置H264
H264编码器下载在刚接触ffmpeg时,我一直都是认为所有的资源,所有的编码器都是已经集成在ffmoeg源码包内了,随着使用的需求要求在配置ffmpeg时去打开相应的enable,然后编译源码安装就可以。但是后来随着学习,在使用libx264即H264编码器时,才发现,这些第三方库是需要自己下载安装的,然后ffmpeg才可以去调用这些外部的编码器(动态库的方式)。使用下面的命令实现libx264源码的下载:git clone https://code.videolan.org/videolan/x原创 2021-07-24 15:17:42 · 3529 阅读 · 0 评论 -
视频编解码(h264分析工具)
H264分析工具Elecard Stream Eye这是最常用最有名的一款分析工具,使用它可以分析目前所有的遇见的编码器,例如264、265等等。下载地址:https://www.elecard.com/products/video-analysisCodecVisa同样是一款很有名的工具,也是非常全,包括mac端、linux端、windows端。二者依然是Elecard Stream Eye更为好用,但是价格也是更为贵一些。雷神开发的工具雷神开发的工具是基于ffmpeg,像运动原创 2021-07-18 21:53:21 · 12526 阅读 · 3 评论 -
视频编码解码(PPS与Slice Header)
PPS重要参数entropy_coding_mode_flag -> 熵编码 1表示使用CABAC,0表示CALVCnum_slice_groups_minus1 -> 分片数量weighted_pred_flag -> 在P/SP Slice中加权预测的方法weighted_bipred_idc -> 在B Slice中加权预测的方法pic_init_qp_minus26/pic_init_qs_minus26 -> 初始化量化参数,实际参数在Slice Hea原创 2021-07-18 21:00:29 · 361 阅读 · 0 评论 -
视频编解码(SPS重要参数)
SPS重要参数pic_width_in_minus1 - > 图像宽度包含的宏块个数-1第一行中mbs部分指的是宏块的数量,pic_width_in_minus1即图像宽度包含的宏块个数-1,当计算真实的图像宽度时,需要用pic_width_in_minus1加一,然后整体乘宏块的宽度。pic_heigh_in_minus1 -> 图像高度包含的宏块个数-1pic_heigh_in_minus1也是一样的原理。所以在拿到SPS的这两个属性时,就可以知道图像的宽高各是多少。原创 2021-07-18 17:47:30 · 1356 阅读 · 1 评论 -
视频编码解码(H264中的profile和level)
主要内容即将开始另一系列的笔记,主要是1涉及以下内容SPS/PPS/Slice Header常见的分析工具ffmpeg视频编码Profile与Level这是本节主要涉及的内容H264 Profile对压缩视频特性的描述,profile越高,就说明采用了越高级的压缩特性。在图中可以看得出第一级是以CONSTRAINED BASELINE为核心,发展出来MAIN Profile和BASELINE以及BASELINE的延伸EXTEND Profile。在核心的CONSTRAINED BA原创 2021-07-18 14:01:43 · 5888 阅读 · 0 评论 -
H264编码原理(H264码流)
H264码流H264码流分层NAL层 Network Abstraction Layer,视频数据网络抽象层在H264的整个分层中,第一层称为NAL层,这一层的作用主要是方便我们在网络上传输视频流。因为在网络上传递数据时,经常有丢包、延迟、乱序等现象,而NAL层可以在接受段检测出这种不同的异常情况,然后进行处理,否则仅仅只是以byte数组进行传递时,一旦发生这种异常情况,我们是没有好的解决方法等。例如丢包了,监测到后就可以知道丢了哪个包,可以让对方重新传输一个。如果是乱序了,可以根据NAL原创 2021-07-18 00:43:44 · 628 阅读 · 1 评论 -
H264编码原理(无损压缩)
无损压缩DCT变换经过有损压缩后的数据是分散在二维图标中的各个节点上,数据比较分散时不利于压缩,通过DCT变换,所有的分散数据都被集中在一块,左上角右下角等等。DCT可以将数据由分散变为集中,利于压缩处理数据。在DCT处理前是第一幅图中一个个凸起的方块,可以看出数据量十分分散,但是处理后将所有数据都放在了一个角落,变得聚集,这样非常有益于有损压缩的数据处理。VLC压缩当所有的数据通过DCT变换之后,就可以进行具体的无损压缩了。所谓VLC就是可变长的编码,原理就是将26个字母,常出现的字符原创 2021-07-15 23:51:11 · 2580 阅读 · 0 评论 -
H264编码原理(帧间压缩技术)
帧间压缩技术帧间压缩原理GOP帧间压缩一定是同一个GOP内的相邻帧间进行压缩,两个GOP的帧间差异较大是无法进行帧间压缩的,同一个GOP的帧间压缩是因为每一个GOP内的帧都是强相关的。参考帧所谓的参考帧是后面的帧要参考前面的帧,进行帧间压缩。运动估计(宏块+运动矢量)通过宏块匹配的方式,找到运动矢量,运动矢量就是记录了一个宏块从一个地方运动到另一个地方而且是有方向的。所谓的运动估计就是通过宏块匹配的方法,最终实现找到运动矢量。运动补偿(解码)找到残差值,在解码的时候把残差原创 2021-07-11 18:15:51 · 1004 阅读 · 0 评论 -
H264编码原理(帧内压缩技术)
帧内压缩的理论相邻像素差别不大,所以可以进行宏块预测人对亮度的敏感度超过色度YUV很容易将亮度与色度进行分开帧内预测如图所示,左侧显示的是H264对于帧内预测提供的9种模式对于每一个宏块的预测都可能是不一样的,根据某一个宏块为基础,在这个宏块下边或者右边的宏块应该是什么样子进行推算时,有9种模式进行选择,具体选则某一种会根据内部算法快速定位应该使用哪一种模式。其选则模式的最基本原则是这9种吗,模式中,哪一种是最接近原来的4x4的宏块就选择哪一种。具体的算法实现可以去翻一翻相原创 2021-07-11 16:54:42 · 1703 阅读 · 1 评论 -
H264编码原理(宏块)
H264压缩技术帧内压缩技术,解决的是空域数据冗余问题假设一张图片是天蓝色背景,整个天蓝色背景就可以用很小的数据量进行存储,背景前的人也会有对应的算法进行处理。帧间压缩技术,解决的是时域数据冗余问题所谓时域就是随之时间的推移,每个时间段都会有一帧数据,一帧一帧的数据间,可以做参考。例如第一帧是I帧,虽然压缩比不是太高,但是第二帧可以根据第一帧做参考,可以获得更高的压缩比。也就是将同一GOP组中的相同数据存储在参考帧内,后面的帧可以用更少的数据记录。整数离散余弦变换(DCT),将空间的原创 2021-07-10 23:02:00 · 1918 阅读 · 0 评论 -
H264编码原理(I帧B帧P帧)
I帧B帧P帧编码帧的分类I帧(intraframe frame),关键帧,采用帧内压缩技术,IDR帧属于I帧。每个GOP组中第一帧肯定是I帧,而且还是一种特殊的I帧,也可以称为IDR帧。一个GOP中可能有很多I帧,但是只有一个IDR帧。如果一组中有很多帧,超过了h264限制,会强制塞一个I帧,防止出现错误时,出现串联,因为后面所有非I帧的解码都要依据I帧中的数据进行解码,都是依赖于I帧的。P帧(forward Predicted frame),向前参考帧。压缩时只参考前面以处理的帧,采用帧原创 2021-07-10 17:20:01 · 3517 阅读 · 2 评论 -
H264编码原理(H264压缩比与GOP)
H264压缩比条件:1、YUV格式为YUV420。 乘1.5倍,rgb是3倍2、分辨率为640x4803、帧率为15原视频未压缩需要6404801.5158 = 55296000(bit),约55M (一秒).H264建议码流为500kps结果: 约1/100码流参考值常用的h264建议码流都并非科学计算得出的,而是各个厂家经过大量实践得出的经验值。常用的查询网址:https://docs.agora.io/cn这是声网总结的经验值,声网在音视频领域是比较权原创 2021-07-07 22:59:43 · 7563 阅读 · 2 评论 -
mac下怎么将终端命令安装的软件加进系统环境变量中
简介当使用brew安装软件时,以ffmpeg为例,如果不将其加入进系统环境变量中,就只能到安装后的bin目录下才能调用。其编译安装配置完整过程看我另一篇文章添加链接描述FFmpeg安装与配置(windows与mac)配置环境变量安装成功后要输入ffmpeg的全路径才能调用ffmpeg命令:/usr/local/ffmpeg/bin/ffmpeg -version我们可以配置环境变量,配置环境变量后可以直接通过ffmpeg -version来调用命令。先执行下面命令打开环境变量配置文件:sud原创 2021-06-27 01:17:23 · 1037 阅读 · 0 评论 -
mac下安装gedit
在mac下安装ffmpeg时需要使用命令行调起文本编辑器,个人习惯使用ubuntu下的gedit,但是在ubuntu下gedit默认是安装的,但是mac下并没有,所以需要安装下。1.打开终端,通过Homebrew查找下geditbrew search gedit2.找到gedit,安装:brew install gedit此时有错误提示3、意外我以为是因为没有python环境,就想着安习惯的python3.9,但是也是一个报错,按照下面的提示:使用如下命令安装上了python3.8原创 2021-06-27 00:32:52 · 3982 阅读 · 1 评论