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

音视频小白系统入门笔记-0

本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅

音视频小白系统入门课 音视频基础+ffmpeg原理

绪论

ffmpeg推流 ffplay/vlc拉流 使用rtmp协议

ffmpeg -i <source_path> -f flv rtmp://<rtmp_server_path>

为什么会推流失败?

默认命令行方式可能导致音频和视频不同步原始是最快的播放速率,修改为`ffmpeg -re -i <source_path> -f flv rtmp://<rtmp_server_path>`  以原始播放速率播放

为什么清晰度不高?

`-f flv` 会按照默认方式对视频重新进行编码,导致视频质量下降`ffmpeg -re -i <source_path> -c:v copy -f flv rtmp://<rtmp_server_path>`

环境变量

`PATH` :命令行程序如果不是通过地址指定,将通过`PATH`进行搜索
`PKG_CONFIG_PATH` :`pkg-config`参数在这个环境变量的目录下找库的执行文件和头文件,实际上是找到对应库的`.pc`文件,而`.pc`文件中包含有库和头文件的信息
在`~/.bashrc | ~/.bash_profile`文件中设置Linux | Mac 的环境变量,然后通过`source`命令生效

PKG_CONFIG_PATHLD_LIBRARY_PATH有什么区别?

https://www.cnblogs.com/doubleconquer/p/17862780.html`pkg-config` 输出的参数最终会被 `gcc/clang` 和 `ld` 使用,但 **它本身不参与链接或运行**。

安装ffmpeg

Mac系统可以直接使用brew安装,类Unix系统可以使用源码安装,源码安装好处是更加灵活。Windows系统安装稍微复杂

可执行工具:

`ffmpeg`:推流,音视频处理`ffplay`:拉流,播放流媒体文件`ffprobe`:侦测多媒体文件格式、基本信息

库:

`libavcodec`:编解码`libavdevice`:管理设备`libavfilter`:过滤,特效`libavformat`:多媒体格式处理`libavutil`:基本工具`libpostproc`:没什么用`libswresmaple`:音频重采样`libswscale`:视频缩放默认生成动态库(`.dylib/.so`),也可以生成静态库(`.a`)

为什么有时候ffmpeg编译出来没有ffplay工具?

https://blog.csdn.net/chendongpu/article/details/123688442应该是旧版本需要手动enable

音频基础

处理流程

共享端:音视频采集(调用API) → 音视频编码

传输

观看端:音视频解码 → 音视频渲染 (调用驱动API)

音频数据流

采集后得到数字信号PCM数据 → 编码器aac/mp3编码 → 压缩后的数据aac/mp3 → 套马甲形成多媒体文件mp4/flv

多媒体文件mp4/flv → 脱马甲(解封装) → 解码 → PCM

为什么要套马甲(封装)?

1. 便于传输和存储:多媒体文件格式(如mp4/flv)提供了标准化的容器,可以同时存储音频、视频、字幕等多种数据2. 包含元数据:多媒体容器可以存储诸如时长、创建时间、编码格式等重要信息3. 支持流媒体:特定的容器格式支持流式传输,允许在下载完整文件前就开始播放4. 同步音视频:容器格式包含时间戳等信息,确保音视频在播放时能够正确同步

音频基础知识

声音:物体振动 → 通过介质传输能量 → 介质刺激耳膜 → 被人脑识别

人类的听觉频率范围(介质振动频率):次声波 20Hz 可听声波 20kHz 超声波

说话:85 — 1100 Hz

声音的三要素 → 波的三要素

音调 → 波的频率 频率较高悦耳

音量 → 波的振幅

音色 → 谐波

什么是谐波?

谐波是在基频(基本频率)上叠加的整数倍频率的波。当一个物体振动时,除了产生基本频率的声波外,还会同时产生2倍、3倍等整数倍频率的波。这些波的叠加形成了独特的音色。例如:当一根琴弦振动时,除了产生基频(最低频率的声波),还会产生2倍频率(第二谐波)、3倍频率(第三谐波)等。不同乐器发出相同音调的声音听起来不一样,就是因为它们产生的谐波组成不同。

谐波有什么用?

1. 音质优化:在音频处理中,了解谐波可以帮助进行更好的音质调节和优化2. 音频压缩:某些音频压缩算法会考虑谐波特性来实现更有效的压缩3. 音色合成:在音乐制作中,通过调整谐波可以创造不同的音色效果

模拟信号经过采样得到数字信号(根据奈奎斯特定理,采样率超过最高频率的2倍不会失真),普遍采样率在48kHz

为什么采样率需要是最高频率的2倍?

1. 重建原始信号:根据奈奎斯特定理,要完整重建一个连续的模拟信号,采样率必须至少是信号最高频率的2倍。这是因为每个周期至少需要两个采样点才能确定一个正弦波的频率和相位。2. 避免混叠效应:如果采样率低于信号最高频率的2倍,高频信号会被错误地解释为低频信号,这种现象称为"混叠"。这会导致重建的信号失真。3. 数学证明:假设采样率低于2倍频率,那么在信号重建时,由于采样点不足,同一组采样点可能对应多个不同频率的正弦波,系统无法确定原始信号的真实频率。4. 实际应用:在实践中,为了保证更好的信号质量,通常会采用更高的采样率,比如音频常用的44.1kHz或48kHz。

位深/采样大小:一个采样用多少bit存放。常用16bit

采样率:采样频率 8k(打电话) 16k 32k 44.1k 48k

声道数:单声道、双声道(人耳)、多声道

码率:采样率声道数位深

PCM格式:裸数据,记录采样信息

WAV格式:封装数据,一般用于封装PCM数据,加上元信息,最主要就是位深、采样率和声道数(以及其他一些大小等)

RIFF 是 WAV 的容器格式,通过**分块(Chunk)**组织数据,使用小端序存储数字。

**大端序(Big-Endian)** 和 **小端序(Little-Endian)** 是两种不同的字节存储顺序,用于定义多字节数据(如整数、浮点数)在内存或文件中的排列方式。它们的区别主要体现在字节的排列顺序上,直接影响数据的解析和跨平台兼容性。
  • 关键块"RIFF"(顶层)、"fmt "(参数)、"data"(音频数据)。
  • 应用场景:WAV、AVI、WebP 等均基于 RIFF 结构。

相关文章:

  • 多光谱相机与高光谱相机的区别
  • AI搜索引擎的局限性
  • 代码随想录算法训练营Day30 | 01背包问题(卡码网46. 携带研究材料)、Leetcode416.分割等和子集
  • 车载软件架构 --- Autosar OS MCU多核启动
  • Python(16)Python文件操作终极指南:安全读写与高效处理实践
  • TikTok账号养号难题解决方案:利用TK矩阵系统助力账号快速成长
  • 爱普生SG3225EEN低抖动差分晶振在网络通信的应用
  • JAVA如何操作文件?(超级详细)
  • Kimi-VL:开源多模态视觉语言模型的崭新突破
  • 爬虫框架 - Coocan
  • 2.2 函数返回值
  • 今日行情明日机会——20250415
  • 聊聊Spring AI Alibaba的DocumentParser
  • Visual Studio + OpenCV C++ 安装与配置教程
  • PTA:古风排版
  • 37-串联所有单词的子串
  • 贪心算法(20)(java)整数替换
  • 通过python实现bilibili缓存视频转为mp4格式
  • 《Ethical Implications of ChatGPT in Higher Education: A Scoping Review》全文翻译
  • 流量统计--Maven依赖
  • 来上海喝云南咖啡!上海国际咖啡文化节助力咖啡产业破圈出海
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 经营业绩持续稳中向好,国铁集团2024年度和2025年一季度财务决算公布
  • 铁路迎来节前出行高峰,今日全国铁路预计发送旅客1870万人次
  • 美航母撞船后又遇战机坠海,专家:长时间作战部署疲于奔命是主因
  • 关于新冠疫情防控与病毒溯源的中方行动和立场