Android 多媒体技术及Ffmpeg课后作业 | 青训营笔记

110 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的的第9天

一、前言

今天学习到的是Android 客户端专场 学习资料二】第四届字节跳动青训营中的Android的# 探索多媒体直播技术,根据学习资料中的内容,根据本节课的学习,了解掌握了视频基本元素,视频压缩,直播直播推拉流协议的基本原理;在掌握以上内容的同时,并完成了本节课的课后作业——使用Ffmpeg对视频的简单处理

课后作业Ffmpeg的使用与实践,实现效果如图所示:(使用ffmpeg指令处理视频)

截屏2022-07-31 13.38.06.png

截屏2022-07-31 13.38.21.png 核心代码与注释在文章中会有说明;

二、本节课知识点大纲:

1. 视频基本元素

2. 视频压缩

3. 直播推拉流协议

4. Ffmpeg处理视频

三、视频基本元素:

像素

是指在由一个数字序列表示的图像中的一个最小单位,称为像素,通常表现为一个小方格。每个像素有自己的颜色值,一般为RGB 三原色来表示

RGB 三原色

每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案

分辨率

指的是纵横方向的像素数量,一般表示为:宽高 (or 长宽),720*1080等

码率 / 比特率

表示单位时间内传送 bit 的数目,单位bps,表示是单位时间播放连续的媒体如压缩后的音视频的bit数量,也称为码流

Tips:越高的比特率,需要更高的带宽来支撑,否则会带来卡顿、成本等问题;太低的比特率,可能会导致视频画面过度压缩,模糊不清通过改变码率可以让视频文件在保持帧率、分辨率的情况下减少文件体积

帧 &  帧率*

帧(Frame)

理解帧就是视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。

帧率  (Frame Rate)

每秒传输帧数通俗来讲就是指动画或视频的画面数、帧率。每秒钟帧数越多,所显示的动作就会越流畅。 FPS 也可以理解为我们常说的刷新率。当刷新率太低时我们肉眼都能感觉到屏幕的闪烁、不连贯

封装

对于任何一部视频来说,只有图像,没有声音,肯定是不行的。所以,视频编码后,加上音频编码,要一起进行封装。

视频压缩

视频播放的本质:将视频画面从封装文件中进行解码、渲染

帧内压缩 / 空间压缩

帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似,帧内一般采用有损压缩算法,达不到很高的压缩比。

帧间压缩 / 时间压缩

帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的,通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比.一般是无损压缩。

视频编码格式 H264 VS H265

H265 压缩比更高,需要更多的算力

H264 : AVC 更普及

H265 : HEVC 更小体积

四、直播推拉流协议

CDN:Content Delivery Network

建立并覆盖在Internet 之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。

推拉流协议

RTMP   Real-Time Messaging Protocol

HTTP-FLV:HTTP +  FLV

HLS   HTTP Live Streaming

客户端工作

image.png

推流端

采集方式:摄像头、屏幕、图像采集卡等

图像处理的场景:美颜、绿幕、头饰

拉流端

五、Ffmpeg处理视频——课后作业

截屏2022-07-31 13.56.40.png

  1. 使用 ffmpeg 提取 mp4 文件中的视频数据并封装到新的 mp4 文件:

ffmpeg -i ASOUL.mp4 -vcodec copy -acodec copy ASOUL.mov

截屏2022-07-31 13.59.31.png

  1. 尝试使用 ffmpeg 提取 mp4 文件中的音频数据并封装到新的 mp3 文件:

ffmpeg -i ASOUL.mp4 -an -vcodec copy ASOUL.mp3

截屏2022-07-31 14.01.13.png

3.使用 ffprobe 查看一下题目 1.a 中提取出来的视频文件信息,看一下这个文件还是否有音轨? ffprobe -show_packets ASOUL.mov

image.png

如上图所示:音频信息为:

Stream #0:1[0x2]: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)

4.尝试将视频转换为gif:

将视频 MP4 转化为 GIF

ffmpeg -i ASOUL.mp4 ASOUL.gif

将视频中的一部分转换为GIF

// 从视频中第二秒开始,截取时长为3秒的片段转化为 gif
ffmpeg -t 3 -ss 00:00:02 -i ASOUL.mp4 ASOUL.gif

转化高质量 GIF

// 默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率
ffmpeg -i ASOUL.mp4 -b 2048k ASOUL.gif

将 GIF 转化为 MP4

ffmpeg -f gif -i ASOUL.gif ASOUL.mp4

截屏2022-07-31 14.09.18.png 转换后的效果:

截屏2022-07-31 14.10.22.png

补充:对于还不没有安装配置Ffmpeg环境的小伙伴,可以参考一下我之前的文章:Android 探索多媒体直播技术-ffmpeg的安装与配置 | 青训营笔记

六、引用参考:

课外补充引用:

文章学习来源:

感谢以上作者的文章,今天的学习收获满满!!Thanks and HappyCoding!