音视频笔记

news2024/11/19 9:29:32

音视频笔记

基础理论知识

雷神的博客
[总结]视音频编解码技术零基础学习方法

视频压缩

H264码流结构

码流结构:原来你是这样的H264

H265码流结构

音视频基础:H265/HEVC&码流结构

FFMPEG

雷神的博客
[总结]FFMPEG视音频编解码零基础学习方法

FFMPEG中最关键的结构体

结构体之间的关系

  • AVFrame
  • AVFormatContext
  • AVCodecContext
    ffmpeg 编码器AVCodecContext 的配置参数和视频解码的重要成员讲解
AVFormatContex * pFormatCtxEnc;
AVCodecContext * pCodecCtxEnc;
 
AVStream * video_st;
AVOutputFormat * pOutputFormat;
 
pOutputFormat = av_guess_format(NULL,/*文件名*/,NULL); //根据文件后缀来猜测文件的格式
 
pFormatCtxEnc = avformat_alloc_context();
 
pFormatCtxEnc->oformat = pOutputFormat;
video_st = avformat_new_stream(pFormatCtxEnc,0);
/*AVCodecContext 相当于虚基类,需要用具体的编码器实现来给他赋值*/
pCodecCtxEnc = video_st->codec; 
 
//编码器的ID号,这里我们自行指定为264编码器,实际上也可以根据video_st里的codecID 参数赋值
pCodecCtxEnc->codec_id = AV_CODEC_ID_H264;
 
//编码器编码的数据类型
pCodecCtxEnc->codec_type = AVMEDIA_TYPE_VIDEO;
 
//目标的码率,即采样的码率;显然,采样码率越大,视频大小越大
pCodecCtxEnc->bit_rate = 200000;
 
//固定允许的码率误差,数值越大,视频越小
pCodecCtxEnc->bit_rate_tolerance = 4000000;
 
//编码目标的视频帧大小,以像素为单位
pCodecCtxEnc->width = 640;
pCodecCtxEnc->height = 480;
 
//帧率的基本单位,我们用分数来表示,
//用分数来表示的原因是,有很多视频的帧率是带小数的eg:NTSC 使用的帧率是29.97
pCodecCtxEnc->time_base.den = 30;
pCodecCtxEnc->time_base = (AVRational){1,25};
pCodecCtxEnc->time_base.num = 1;
 
//像素的格式,也就是说采用什么样的色彩空间来表明一个像素点
pCodecCtxEnc->pix_fmt = PIX_FMT_YUV420P;
 
//每250帧插入1个I帧,I帧越少,视频越小

pCodecCtxEnc->gop_size = 250;
 
//两个非B帧之间允许出现多少个B帧数
//设置0表示不使用B帧
//b 帧越多,图片越小
pCodecCtxEnc->max_b_frames = 0;
 
//运动估计
pCodecCtxEnc->pre_me = 2;
 
//设置最小和最大拉格朗日乘数
//拉格朗日乘数 是统计学用来检测瞬间平均值的一种方法
pCodecCtxEnc->lmin = 1;
pCodecCtxEnc->lmax = 5;
 
//最大和最小量化系数
pCodecCtxEnc->qmin = 10;
pCodecCtxEnc->qmax = 50;
 
//因为我们的量化系数q是在qmin和qmax之间浮动的,
//qblur表示这种浮动变化的变化程度,取值范围0.0~1.0,取0表示不削减
pCodecCtxEnc->qblur = 0.0;
 
//空间复杂度的masking力度,取值范围 0.0-1.0
pCodecCtxEnc->spatial_cplx_masking = 0.3;
 
//运动场景预判功能的力度,数值越大编码时间越长
pCodecCtxEnc->me_pre_cmp = 2;
 
//采用(qmin/qmax的比值来控制码率,1表示局部采用此方法,)
pCodecCtxEnc->rc_qsquish = 1;
 
//设置 i帧、p帧与B帧之间的量化系数q比例因子,这个值越大,B帧越不清楚
//B帧量化系数 = 前一个P帧的量化系数q * b_quant_factor + b_quant_offset
pCodecCtxEnc->b_quant_factor = 1.25;
 
//i帧、p帧与B帧的量化系数便宜量,便宜越大,B帧越不清楚
pCodecCtxEnc->b_quant_offset = 1.25;
 
//p和i的量化系数比例因子,越接近1,P帧越清楚
//p的量化系数 = I帧的量化系数 * i_quant_factor + i_quant_offset
pCodecCtxEnc->i_quant_factor = 0.8;
pCodecCtxEnc->i_quant_offset = 0.0;
 
//码率控制测率,宏定义,查API
pCodecCtxEnc->rc_strategy = 2;
 
//b帧的生成策略
pCodecCtxEnc->b_frame_strategy = 0;
 
//消除亮度和色度门限
pCodecCtxEnc->luma_elim_threshold = 0;
pCodecCtxEnc->chroma_elim_threshold = 0;
 
//DCT变换算法的设置,有7种设置,这个算法的设置是根据不同的CPU指令集来优化的取值范围在0-7之间
pCodecCtxEnc->dct_algo = 0;
 
//这两个参数表示对过亮或过暗的场景作masking的力度,0表示不作
pCodecCtxEnc->lumi_masking = 0.0;
pCodecCtxEnc->dark_masking = 0.0;
  • AVIOContext
  • AVCodec
  • AVStream
  • AVPacket

转码流程图
在这里插入图片描述
图来源

FFmpeg5开发C++

FFmpeg5开发入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1583_AURIX_TC275_SMU的控制以及FSP

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) SMU的软件控制接口主要是实现了一些控制命令,用于控制SMU的状态机以及FSP。具体的内容在上面的一部分表格以及接下来的一页中的表格中有介绍。 涉及到ed命令,用几个…

NC6 Error to init aggVOStyle,Please check the back log

由于近期调整及抵消模板的公式字段长度不够,就修改了元数据的字符长度,结果导致修改保存后保存,报错如下(如果大家有什么好的解决方案,欢迎评论留言一起探讨学习): 错误日志: 11:1…

Slurm中集群配置文件slum.conf

1.slurm.conf简介slurm.conf是一个ASCII文件,它描述了一般的Slurm 配置信息、要管理的节点、有关如何将这些节点分组到分区中,以及各种调度与这些分区关联的参数。此文件应为在群集中的所有节点上保持一致。可以通过设置SLURM_CONF在执行时修改文件位置 …

初识网络:IP、端口、网络协议、TCP-IP五层模型

目录 一、了解IP地址: 二、了解端口号: 三、网络协议 网络协议的三要素: ①语法 ②语义 ③时序 四、协议的分层(TCP/IP五层模型) ①应用层 ②传输层(也称为运输层) ③网络层 ④数据链路层 ⑤物理层 五、A用户通过QQ给B发送一…

【Java基础知识 2】Java中常用的48个关键字和2个保留字 || Java命名规范(从此告别起名难)

本文已收录专栏 🌲《Java进阶之路》🌲 目录 本文已收录专栏 🌲《Java进阶之路》🌲 Java中常用的48个关键字和2个保留字 关键字 保留字 Java命名规范(从此告别起名难) 01、包(package&#…

Spring MVC 整合 Shiro 权限控制

Apache Shiro 是一个功能强大且灵活的开放源代码安全框架,可以细粒度地处理认证 (Authentication),授权 (Authorization),会话 (Session) 管理和加密 (cryptography) 等企业级应用中常见的安全控制流程。 Apache Shiro 的首要目标是易于使用和…

python实现excel和csv中的vlookup函数

本篇博客会介绍如何使用python在excel和csv里实现vlookup函数的功能,首先需要简单了解一下python如何操作excel 1. python处理excel 1.1 删除excel中指定行 在文件夹里创建了一个excel文件,可以看到里面放的是三国人物的数据 会发现在【蜀】里&#…

ESP-IDF:在C++环境下实现动态数组例程,包括初始化,添加数值,查找,删除,打印等功能

代码: /* 动态数组 */ struct DYNAMICARRAY { int *pAddress; int size; int capacity; }; DYNAMICARRAY *initialDynamicArray() { DYNAMICARRAY *p (DYNAMICARRAY *)malloc(sizeof(DYNAMICARRAY)); p->size 0; p->capacity 5; p->pAddress (int *)…

数据结构与算法--python版-01

文章目录基本概念数据存储方式算法案例基本概念 程序 数据结构 算法 数据结构,数据的存储(物理结构)及相互间的关联关系(逻辑结构); 线性表(顺序表、链表、队列、栈),一个前驱,一…

口语语言理解最新进展及前沿

口语语言理解 作为任务型对话系统的核心组件,目的是为了获取用户询问语句的框架语义表示信息,进而将这些信息为对话状态的追踪模块DSTDSTDST, 以及自然语言生成模块NLGNLGNLG所使用 SLUSLUSLU任务通常包含以下两个任务: 意图识别任务: intent detectio…

企企购商城 | 破解降本难题,非生采购“利器”来了

近年来,疫情反复无常,全球市场环境动荡不安,在瞬息万变的环境下,很多企业都处于降本处境,采购降本成了其中的重要一环。其中,非生采购作为贯穿企业各个职能板块的采购活动,众多国际先进的企业已…

应用PID算法对ABS系统的仿真和分析

1、内容简介略635-论文V2 可以交流、咨询、答疑2、内容说明摘要:本文旨在设计一种利用模糊控制理论优化的pid控制器,控制abs系统,达到对滑移率最佳控制范围的要求 ,所提出的方案采用级联控制架构:设计用于外环中的车轮…

零基础开始QT绘图(6)

前面我们开始提到了GraphicView的使用,也提到GraphicsItem的使用,并且开始了自定义GraphicsItem的编写,而且上次我们的GraphicsItem也是可以拖动了,但这离我们需要的效果还有一定的距离。 所以,这次,我们进…

工程电磁设备在2018年杭州电磁大会的报告

1 方法原理 本篇是对多频电磁方法,应用的解读。 本汇报讲述了EMI传感器的基本情况,以及用手持多频电磁仪进行实际探测应用的例子。 什么是电磁感应?用发射装置(TX)激发谐波,产生一次场(Primary field),地下导体目标会相应产生涡流电磁场,产生二次场,被接收装置(RX…

「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

1 什么是 CSRF 面试的时候的著名问题:"谈一谈你对 CSRF 与 SSRF 区别的看法" 这个问题,如果我们用非常通俗的语言讲的话,CSRF 更像是钓鱼的举动,是用户攻击用户的;而对于 SSRF 来说,是由服务器…

14.0、Linux-yum方式安装 docker

14.0、Linux-yum方式安装 docker 第一步: 检测 CentOS7 -> cat /etc/redhat-release 第二步: 用以下命令安装准备环境 -> yum -y install gcc yum -y install gcc-c 第三步: 如果之前安装过 docker 的,先用以下命令删…

【每日一题】【LeetCode】【第十三天】移动零

解决之路 题目描述 测试案例(部分) 第一次 看到这题目,第一时间还真想到了双指针法(暴力解法是个会写代码的都能第一时间想到,所以自己学会了尽量不第一时间用暴力解法) right的初始位置元素若为0&…

Jenkins-Slave分布式架构搭建

♥ Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译、部署等。 ♥ 将jenkins项目发布在不同服务器上(分布jenkins工作空间,部署项目到不同…

java 简单了解spring之(IOC容器)

IOC 容器 是spring的一个重要组成部分 IOC 翻译过来叫控制反转 他在做的事是 降低计算机代码的耦合度 这个过程叫IOC 通过控制反转 对象在被创建时 由一个调控系统内所有对象的外界实体将将其所依赖的对象引用传递给他,也可以说,依赖被注入到对象中 说简…

[oeasy]python0048_取整_int_float_浮点型_cast_扮演_tab_制表键_制表符

转化为10进制 回忆上次内容 上次 把其他进制 转化回 十进制 用的是 int 函数 int 来自于 integer 同源词 还有 integrateentire意思都是完整的 完整的 和 零散的 相对 可以把 零散的小数 转化为 完整的整数吗?🤔 取整 可以 把一个浮点型的小数 取…