音视频一、音视频本质及ffmpeg安装

音视频应用领域变化:10多年前基本是先去下载文件,下载完成后,在电脑端播放本地文件;现在基本是电脑或手机在线播放音视频。以前电脑端下载一个文件,视频文件格式如.rmvb,.avi,等等,它们是一个整体,如果只下载一半是无法播放的。所以现在我们在网络上不再传输rmvb、avi;我们现在传视频流和音频流,不再区分视频文件格式。市场需求导致了以前学习音视频是学习视频文件格式,现在学习音视频是学习编码,如H264和H265等。一个是以磁盘文件为载体,现在是以网络为载体。

在播放器上查看编码信息.png

音视频分为视频和音频。我们通常说的视频一般指音视频。从专业角度上说,视频即可视的图像信息;音频指带有频率的声波或者存储声音内容的文件。

大家应该有过这样的经历,在观看视频时,发现声音和画面存在延迟。经常是画面过去几秒后,才播放对应的声音。因为在音视频中,主要存在两种数据,视频数据和音频数据,他们是单独进行处理的,当出现不同步时,就会出现声音和视频画面对不上的情况。

我们在用播放器进行音视频播放时,肯定遇见过播放格式不支持的问题,那么什么是格式?

1.1视频封装格式

1.1.1视频文件格式

我们对视频文件很熟悉,我们经常看到的是视频文件格式,那么视频文件格式与视频封装格式之间是什么样的对应关系呢?下面是几种常用的 视频文件后缀类型 与其相对应的 封装格式

视频文件格式 视频封装格式
.avi AVI(Audio Video Interleaved)
.wmv、.asf WMV(Windows Media Video)
.mpg、.mpeg、.vob、.dat、.3gp、.mp4 MPEG(Moving Picture Experts Group)
.mkv Matroska
.rm、.rmvb Real Video
.mov QuickTime File Format
.flv Flash Video

封装格式(也叫容器),就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,用来盛放饭菜的容器。

1.1.2视频封装格式

我们常见的视频封装格式有:.mov、.avi、.mpg、.vob、.mkv、.rm、.rmvb等等。为什么会有这么多种不同的文件格式?那是因为它们通过不同的方式实现了视频这件事情,至于这个不同在哪里,那就需要了解一下接下来要说的「视频封装格式」这个概念了。

视频封装格式,简称视频格式,相当于一种存放视频信息的容器,它里面包含了视频信息音频信息和相关的配置信息(例如:视频和音频的关联信息、如何解码等)。视频封装格式最直接的反映就是视频文件格式,如下表 👇

视频文件格式 视频封装格式 释义
.avi AVI(Audio Video Interleave) 图像质量好,但体积过于庞大,压缩标准不统一,存在高低版本兼容问题。
.wmv WMV(Windows Media Video) 可边下载边播放,很适合网上播放和传输
.mpg .mpeg .mpe .dat .vob .asf .3gp .mp4 MPEG(Moving Picture Experts Group) 由运动图像专家组制定的视频格式,有三个压缩标准,分别是 MPEG-1、MPEG-2、和 MPEG-4,它为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。
.mkv Matroska 一种新的视频封装格式,它可将多种不同编码的视频及 16 条以上不同格式的音频和不同语言的字幕流封装到一个 Matroska Media 文件当中。
.rm、.rmvb Real Video Real Networks 公司所制定的音频视频压缩规范称为 Real Media。用户可以使用 RealPlayer 根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。
.mov QuickTime File Format Apple 公司开发的一种视频格式,默认的播放器是苹果的 QuickTime。这种封装格式具有较高的压缩比率和较完美的视频清晰度等特点,并可以保存 alpha 通道。
.flv Flash Video 由 Adobe Flash 延伸出来的一种网络视频封装格式。这种格式被很多视频网站所采用。

1.1.3 容器

将已经编码压缩好视频数据和音频数据按照一定的格式放到一个文件中,这个文件可以称为容器。当然可以理解为这只是一个外壳

播放器上的画面、声音和字幕

通常,除了音频数据和视频数据外,还会存放一些视频同步的元数据:例如字幕,这种多数据会给不同的程序来处理,但是在传输和存储的时候,又是被绑定在一起的。

1.2音视频编码方式简介

视频编码的原始数据从摄像头采集。视频采集的数据叫YUV。音频亦是如此,音频采集的原始数据是线性PCM。

编码的本质是压缩,压缩方式不一样,就取了不同的名字。音视频编码格式有几百种,我们只需要知道一些主流的就行。

1.2.1视频编码方式

  • 视频编码的作用: 将视频像素数据(RGB,YUV 等)压缩成视频码流,从而降低视频的数据量。
名称 推出机构 推出时间 目前使用领域
HEVC(H.265) MPEG/ITU-T 2013 研发中
H.264 MPEG/ITU-T 2003 各个领域
MPEG4 MPEG 2001 不温不火
MPEG2 MPEG 1994 数字电视
VP9 Google 2013 研发中
VP8 Google 2008 不普及
VC-1 Microsoft Inc. 2006 微软平台

1.2.2音频编码方式

音频编码的作用: 将音频采样数据(PCM 等)压缩成音频码流,从而降低音频的数据量。 常用的音频编码方式有以下几种:

名称 推出机构 推出时间 目前使用领域
AAC MPEG 1997 各个领域(新)
MP3 MPEG 1993 各个领域(旧)
WMV Microsoft Inc. 1999 微软平台
AC-3 Dolby Inc. 1992 电影

1.2.3 H264是怎么来的?

不得不提两大机构ITU-T和ISO。

  • ITU-T:中文名称是国际电信联盟电信标准分局(ITU-T for ITU Telecommunication Standardization Sector), 它是国际电信联盟管理下的专门制定电信标准的分支机构。该机构创建于1993年,前身是国际电报电话咨询委员会(CCITT 是法语Comité Consultatif International Téléphonique et Télégraphique的缩写,英文是International Telegraph and Telephone Consultative Committee),总部设在瑞士日内瓦。
  • ISO:国际标准化组织(International Organization for Standardization,简称为ISO)。这个组织没必要介绍了,随处可见。
  • MPEG(Moving Picture Experts Group,动态图像专家组)是ISO(International Standardization Organization,国际标准化组织)与IEC(International Electrotechnical Commission,国际电工委员会)于1988年成立的专门针对运动图像和语音压缩制定国际标准的组织。

ITU-T成名时间早一点,它想做的事情是统一一个标准,推出了H261,推出之后反响不错,在此基础上推出了H262。ISO在看到这种情况后,想抢占市场,也推出了它的第一版Mpeg1,后来在此基础上也开发了Mpeg2。此时,造成了市场上兼容出现了问题,在此期间ITU-T又推出了H263,H263当时超过了市面上所有编码格式。ISO在看到这种情况后,终于选择了握手言和,一起开发。在ITU-T和ISO的合作下,基于H263开发出了H264。在H264开发完成后,两个机构在这种格式取名上出现了分歧,ITU-T坚持叫H264,但在ISO机构的命名为Mpeg4-avc。在取名上谁也不让步,造成了一种格式两种叫法的情况。两种叫法的共存现象,导致了在一些播放器上会出现H264-MPEG-4 AVC这种奇怪的命名。

编码格式发展历程

一个网上曝出的真实的面试题:请说说H264和MPEG-4 AVC的区别?如果对这段历史不清楚的话,那遇到这个问题,场面将会非常的搞笑。

另外:H265在ISO的命名叫做HEVC

H.265:高效率视频编码是一种视频压缩标准,H.264/MPEG-4的继任者。可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势,尚未有大众化编码软件出现 。

1.3验证音视频文件由音频和视频组成

安装FFMpeg,https://evermeet.cx/ffmpeg/,下载当前最新ffmpeg-5.0.1和ffplay-5.0.1,解压后是两个可执行文件。

可执行文件: 1.ffmpeg 用于转码、推流、dump媒体文件 2.ffplay 用于播放媒体文件 3.ffprobe 用于获取媒体文件信息 4.ffserver 用于简单流媒体服务器

要想在终端中能使用,咱们把这两个文件放到/usr/local/bin目录下,一般这个目录都是已经配置过的。直接打开终端看到下面内容,说明安装成功。如果不行,再配置一下bash_profile。执行vim ~/.bash_profile

chenshuangchao@chenshuangchaodeMacBook-Pro Downloads % ffmpeg -version
ffmpeg version 5.0.1-tessus  https://evermeet.cx/ffmpeg/  Copyright (c) 2000-2022 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.17)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
libavutil      57. 17.100 / 57. 17.100
libavcodec     59. 18.100 / 59. 18.100
libavformat    59. 16.100 / 59. 16.100
libavdevice    59.  4.100 / 59.  4.100
libavfilter     8. 24.100 /  8. 24.100
libswscale      6.  4.100 /  6.  4.100
libswresample   4.  3.100 /  4.  3.100
libpostproc    56.  3.100 / 56.  3.100
  • libavutil:核心工具库,做一些基本音视频处理操作。

  • libavcodec:音视频各种格式的编解码。

  • libavformat:用于各种音视频封装格式的生成和解析。

  • libadvice:用于硬件的音视频采集。

  • libavfilter:音视频滤镜库。

  • libswscale:图像进行格式转换模块。

  • libswresample:用于音频重采样。

  • libswresample:这个是老版本下编译出来,新版本用libswresample代替。

  • libpostproc:后期处理模块。

利用ffmpeg将音频中的音频数据和视频数据抽取出来。然后将提取出来的文件通过ffplay进行播放。在网络数据中,视频文件就是一个H264的码流,音频文件就是一个aac的码流。音频数据只有声音,没有画面。视频数据只有画面,没有声音。

通过如下两个命令提取音频和视频:

 chenshuangchao@chenshuangchaodeMacBook-Pro ~ % cd /Users/chenshuangchao/Desktop/音视频专题
 chenshuangchao@chenshuangchaodeMacBook-Pro 音视频专题 % ffmpeg -i input.mp4 -acodec copy -vn output.aac
 chenshuangchao@chenshuangchaodeMacBook-Pro 音视频专题 % ffmpeg -i input.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264

利用ffplay播放out.h264

ffplay -stats -f h264 out.h264

总大小8746KB,视频大小6484KB,音频大小2210KB。还有52KB的数据存放封装格式需要的配置,如轨道信息,封装格式信息。

1.4 本章相关面试题总结

什么是音视频封装格式?如上。

什么是视频轨和音频轨?将从摄像头和麦克风采集的数据,按某种格式封装的数据,就是视频轨和音频轨,就是一种封装格式。音视频有很多种数据结构,那么就存在很多不同种类的视频轨和音频轨。

一个封装格式是否只有一个音频轨和一个视频轨?在音视频领域里面,视频轨和音频轨都可以有多个。例如,两个不同的音频轨,就形成了混音。

视频轨和音频轨是否存在顺序?视频轨和音频轨是没有顺序的。打个比喻,视频轨是饭,音频轨是菜,封装格式就是一个碗。怎么存饭,怎么存菜随便你,你可以饭放在上面,也可以菜放到上面,也可以混合着放。封装格式就是容器。不同的排列就是封装格式。可以根据视频轨和音频轨,在生成音视频文件的时候打包成不同的封装格式。

换一种说法,把视频流和音频流放到一个载体文件中,进行封装,需要一个容器进行排列。放在一个容器中,就需要知道数据是怎么排列的,排列的方式不一样,我们就把它叫做不同的容器。

视频轨跟视频流有什么区别呢?视频轨是指一个视频文件所有的视频数据, 视频流是指一小段视频数据。视频流是为了一点一点的数据传输而产生的一种概念。视频轨是为了对一整个数据进行分析,而提出的一种的概念。

视频流音频流是压缩数据还是非压缩数据?常用的H264也是压缩数据。音频也是压缩数据,真正音频是线性的,但是我们计算机中的音频是离散的,通过采样,因为人眼和人耳的视觉和听觉欺骗,会感觉是连续的。

为什么要编码?编码的本质就是为了压缩。H264是一种编码。压缩的方式不一样就叫不同的格式。

总结:

1.音视频是音频、视频、字幕等组成,至少包含音频数据和视频数据。
2.了解视频文件格式的优劣;视频文件格式与视频封装格式之间的对应关系。
3.稍微认识一下ffmpeg,知道有命令可以做一些操作。
4.了解一下音视频编码格式,清楚H264是编码格式的一种。
5.命名上的历史。
最后附上两张在安卓端和iOS端在创建编码器时的参数:

在安卓端实例化一个编码器使用哪种命名?或者问MediaCodec实例化一个H264的编码器传什么名称?
因为ISO的国际影响力更大,所以在安卓中,使用Mpeg4-avc,传参"vedio/avc"。
因为命名的问题,在安卓端面试有时会被问到,安卓是否支持H265?
但是业界都叫H264。苹果端的格式命名那就有点任性了,力推ITU-T。

安卓中创建一个编码器使用的格式.png
iOS中选择编码器格式.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容