Linux驱动19 --- FFMPEG

发布于:2025-07-25 ⋅ 阅读:(18) ⋅ 点赞:(0)

 目录

 一、音视频基础知识

1.1 介绍

1.2 视频

        视频常见格式

        视频帧的格式

                视频采集设备

                linux 中关于视频设备的内核驱动                

                        V4L2

                        YUV

                        视频帧 --- 必须记住

                        视频编码格式

               H.264

1.3 音频

        常见的音频格式

        音频的原始格式

        影响音频质量的参数

        影响音频质量的参数

        音频的编码格式

        Linux 下音频开发必要工具

1.4 软件编解码和硬件编解码

二、FFMPEG

2.1 介绍

2.2 FFMPEG 简介

2.3 FFMPEG 编译 

        让可执行程序在系统任何地方都可以起作用

        配置库路径

2.4 FFMPEG 的应用


一、音视频基础知识

1.1 介绍

        音视频开发是当前驱动编程的核心之一 ,和摄像头有关

        当前阶段主要会学习:视频的解码,音频的解码

1.2 视频

        点成线,线成面 ,多个连续画面的切换 --- 视频

        MCU 开发中的视频:动图

                你需要将动图分割为一个一个的图片

                图片依次取模,图片依次显示 --- 组成动图

        视频是由一帧一帧的画面组成的

        视频常见格式

                mp4、mkv 等

                视频是由图片组成的

                常见的图片格式 --- jpg,png,bmp,jpeg 等等

                在开发中显示的图片格式都是 --- RGB

                屏幕的像素点组成是 RGB 三色灯

        视频帧的格式

                MJPEG、YUV(YUYV,YCbCr)

                        部分情况下称之为视频的原始格式、视频采集格式

                视频帧的格式来自于视频采集设备

                视频采集设备 --- 采集到的并不是 RGB 格式

                视频采集设备

                        常见的就是:摄像头

                在 Linux 系统中,有默认的摄像头开发方法

                linux 中关于视频设备的内核驱动                
                        V4L2

                        V4L2 是 Video for linux2 的简称,为 linux 中关于视频设备的内核驱动。在 Linux 中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video 下,如果只有一个视频设备,通常为/dev/video0。V4L2 在设计时,是要支持很多广泛的设备的,它们之中只有一部分在本质上是真正的视频设备。

                        在嵌入式设备中,/dev/video 有好几个

                        在 ubuntu 下可以通过安装插件来使用摄像头

                        下载指令:sudo apt install cheese

                        执行指令:cheese

                        摄像头采集到的格式:在程序中通过 V4L2 的相关 API 进行获取

                        不同的视频图像格式支持的分辨率是不一样

                        不同的分辨率对应的视频帧数又是不同的

                        影响视频质量的参数

                                分辨率、帧率、图像格式

                                参数均和视频采集设备有关

                                采集设备决定了视频质量的参数

                                这些参数可以通过视频采集设备获取

                        YUV

                        YUV,是一种颜色编码方法。常使用在各个视频处理组件中。 YUV 在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。

                        Y'代表明亮度(luma;brightness)而 U 与 V 存储色度(色讯;chrominance;color)部分;亮度(luminance)记作 Y,而 Y'的 prime 符号记作伽玛校正。

                        U:表示蓝色

                        V:表示红色

                        Y′UV,YUV,YCbCr,YPbPr 所指涉的范围,常有混淆或重叠的情况。从历史的演变来说,其中 YUV 和 Y'UV 通常用来编码电视的模拟信号,而 YCbCr 则是用来描述数字的视频信号,适合视频与图片压缩以及传输,例如 MPEG、JPEG。但在现今,YUV通常已经在电脑系统上广泛使用。

                        主要在于应用场景区别

                        YUV 主要有三种格式:YUV444,YUV422,YUV420

                        YUV444 --- 一个 Y 分量占用一个 UV 分量

                                例如:仅作为理解

                                Y 分量占一个字节,U 分量占一个字节,V 分量占一个字节

                                        4 个像素点需要 12 字节

                                YUV422 --- 两个 Y 分量占用一个 UV 分量

                                        4 个像素点需要 8 字节

                                YUV420 --- 四个 Y 分量占用一个 UV 分量

                                        4 个像素点需要 6 字节

                        压缩比率越来越高,相同的视频占用的空间越来越小

                        视频采集设备在采集之初就已经压缩了一次了,但是对于视频数据的传输和存储需要更高的压缩方式

                        视频帧 --- 必须记住

                                通过不同帧的大小缩减整体视频的大小

                                I 帧、P 帧、B 帧

                                I 帧:完全帧、关键帧   ---  包含了一帧图像的完整数据

                                P 帧:预测帧   ---  根据上一张图像的内容,来完成当前图像的显示

                                B 帧:双向帧、双向差别帧  ---  根据上一帧图像和下一帧图像,补全当前的图像

                                I、P、B 帧的大小依次越来越小

                        视频编码格式

                                视频的进一步压缩

                                H264、H265

                                H.264

                                我们是协议/标准的使用者,而不是制定者

                                同时也是 MPEG-4 第十部分,是由 ITU-T 视频编码专家组(VCEG)和 ISO/IEC 动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC(或者 AVC/H.264 或者 H.264/MPEG-4 AVC 或 MPEG-4/H.264 AVC)而明确的说明它两方面的开发者。

                                H.264 作为 MPEG-4 第十部分,由国际电联(ITU-T)的视频编码专家组(VCEG)与 ISO/IEC 的动态图像专家组(MPEG)共同推出的高度压缩数字视频编解码器标准,广泛应用于各种视频处理领域。而 H.265,即 HEVC(高效率视频编码),在 H.264 基础上进行了改进优化,包括码流、编码质量、延时等方面的提升,旨在提高压缩效率、增强鲁棒性和错误恢复能力,同时降低实时时延和复杂度

                                最常遇到的面试问题:

                                H264 和 H265 之间的区别? --- 上面的区别

                                你为什么选择 H264/在使用上的区别?

                                        H265 对硬件的要求更高,H264 在查找资料上要更占优势

                                移植、使用

                                        移植:将需要的库,在 ubuntu 上通过交叉编译工具配置之后,将所需的库复制到开发板环境中

                                        使用:程序的编译,运行

1.3 音频

        常见的音频格式

                mp3,wav,flac,aac 等,这些音频格式都是压缩过的音频格式了

        音频的原始格式

        PCM

        脉冲编码调制(PulseCodeModulation),简称 PCM。是对连续变化的模拟信号进行抽样、量化和编码产生的数字信号。PCM 的优点就是音质好,缺点就是体积大。PCM 可以提供用户从 2M 到 155M 速率的数字数据专线业务,也可以提供话音、图象传送、远程教学等其他业务。PCM 有两个标准(表现形式):E1 和 T1。

        现实生活中比较接近 PCM 的音频载体:黑胶唱片

        影响音频质量的参数

                音频采集设备和音频输出设备

                音频采集设备 --- 麦克风/咪头

                音频输出设备 --- 扬声器

                查看自己的音频设备

                音频采集设备:arecord -L

                音频输出设备:aplay -L

        影响音频质量的参数

                声音对于采集设备来说是一个模拟量

                采集设备需要将模拟量转为数字量 --- 进行存储

                采样率:每秒钟采样音频的次数

                        8KHz、16KHz、44.1KHz、48KHz

                采样数:确定多少次数据为一帧数据

                        1024、1152

                        对于很多的音频格式,使用 1024 会不支持

                采样位数:8 位、16 位

                声道数:双声道,单声道

        音频的编码格式

                AAC,G711A,MP2

                AAC:AAC(Advanced Audio Coding),中文名:高级音频编码。出现于1997 年,基于 MPEG-2 的音频编码技术。由 Fraunhofer IIS、杜比实验室、AT&T、索尼等公司共同开发,目的是取代 MP3 格式。

                G711A:G.711 是一种由国际电信联盟(ITU-T)制定的音频编码方式,又称为 ITU-T G.711。它是国际电信联盟 ITU-T 定制出来的一套语音压缩标准,它代表了对数 PCM(logarithmic pulse-code modulation)抽样标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为 8k 每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。起压缩率为 1:2, 即把 16 位数据压缩成 8 位。G.711 是主流的波形声音编解码器。

                mp2,是 MPEG 音频文件,(MPEG-1 音讯部份)中订立之有损性音讯压缩格式。此标准还制订了 MPEG-1 Audio Layer I (MP1)和 MPEG-1 Audio Layer III (MP3)。个人电脑和互联网音乐流行 MP3,MP2 则多用于广播。

                后续的 MP2 的音频和 H264 的视频共同合成一个音视频文件

        Linux 下音频开发必要工具

        ALSA

        ALSA 是 Advanced Linux Sound Architecture 的缩写,高级 Linux 声音架构的简称,它在 Linux 操作系统上提供了音频和 MIDI(Musical Instrument DigitalInterface,音乐设备数字化接口)的支持。在 2.6 系列内核中,ALSA 已经成为默认的声音子系统,用来替换 2.4 系列内核中的 OSS(Open Sound System,开放声音系统)

1.4 软件编解码和硬件编解码

        软件编解码:全靠 CPU 去算

        硬件编解码:靠 GPU 或者 NPU 去计算

        GPU --- 比较纯粹的渲染显示图像的

        NPU --- 训练模型

                人脸识别,行为识别,物品识别等等

        硬件编解码的优点:快

        软件编程码的优点:硬件编解码需要通过 API 去调用硬件设备

                简单

二、FFMPEG

2.1 介绍

        音视频开发会用到音视频专门的库文件

        通用免费的:FFMPEG,SDL

        嵌入式开发中还有不开源的:后续还会使用其中一个 --- RkMedia

2.2 FFMPEG 简介

        FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用 LGPL 或 GPL 许可证。它提供了录制、转换以及流化音视频的完整解决方案。

        官网 https://ffmpeg.org/ ,版本不同,FFMEPG 的 API 接口也不一定相同

2.3 FFMPEG 编译 

        必要库:sudo apt install yasm libx264-dev libsdl2-dev libmp3lame-dev libopus-dev libavdevice-dev libfdk-aac-dev

        FFMPEG 通过参数的配置来选择不同的工作环境以及不同的应用场景

        编译成功之后得到以下 4 个文件夹

        其中 bin 就是可执行程序

        lib 就是使用的赖库

        让可执行程序在系统任何地方都可以起作用

        ffmpeg:ffmpeg 中的核心指令

                几乎除了播放,剩下的都可以用

        ffplay:主要用来播放音视频

        ffprobe:获取音视频文件的信息的 --- 极少用

        配置库路径

2.4 FFMPEG 的应用

        http://www.360doc.com/content/22/0724/11/9824753_1041178087.shtml        


网站公告

今日签到

点亮在社区的每一天
去签到