Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AVI封装格式

AVI封装格式

原创
作者头像
monktan
发布于 2021-12-01 11:27:48
发布于 2021-12-01 11:27:48
1.4K0
举报
文章被收录于专栏:音视频自留地音视频自留地

1.AVI文件格式详解

https://blog.csdn.net/chenyonken/article/details/79174500

2.avi文件格式解析

https://blog.csdn.net/occupy8/article/details/40678471

1 AVI概述

AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式。AVI格式允许视频和音频交错在一起同步播放,支持256色和RLE压缩,但AVI文件并未限定压缩标准,因此,AVI文件格式只是作为控制界面上的标准,不具有兼容性,用不同压缩算法生成的AVI文件,必须使用相应的解压缩算法才能播放出来。

在介绍AVI文件前,我们要先来看看RIFF文件结构。AVI文件采用的是RIFF文件结构方式,RIFF(Resource Interchange File Format,资源互换文件格式)是微软公司定义的一种用户管理Windows环境中多媒体数据的文件格式,波形音频wave,MIDI和数字视频AVI都采用这种格式存储。RIFF文件的实际数据中,使用了列表(List)和块(Chunk)的形式来组织。列表可以嵌套列表和块。整个RIFF文件可以看成一个数据库,其数据块ID为RIFF ,称为RIFF块。一个RIFF文件中只允许存在一个RIFF块。RIFF块中包含一系列的子块,其中有一种子块的ID为“List”,称为LIST块,LIST块中可以再包含一系列的子块,但除了LIST块外的其他所有的子块都不能再包含子块。 RIFF和LIST块分别比普通的数据块多了一个被称为形式类型(Form Type)或者列表类型(List Type)的数据域。

整体就是RIFF-len-”avi”-LIST-len-”hdrl”-avih-strlaud-strh-strfh264-strl-strh-strf

RIFF块(RIFF结构)

“RIFF”表示字符串(Chunk ID)

RIFF文件大小(数据块的大小)

形式类型或者列表类型“AVI”,”WAVE” …….

RIFF文件大小=实际数据长度+4(形式类型或者列表类型的大小)。 也就是说RIFF文件大小不包括“RIFF”域和“文件大小”域本身的大小(共8个字节),如文件大小域数据为28 69 6B 00,则实际为0x006b6928,转换为十进制为7039272,实际在Windows系统下看到的文件大小为7039280,即换算成实际大小时要加上8。可能文件大小值是低字节在前。

LIST块(LIST结构)

“LIST”表示字符串(Chunk ID)

LIST块大小

形式类型或者列表类型

LIST实际数据

LIST块大小域=实际的列表数据+4(形式类型或者列表类型域的大小)也就是说listSize值不包括“LIST”域和listSize域本身的大小。如该位置数据为5E 00 00 00 ,即0x0000005E,转换成十进制为94,实际总长为102bytes,即换算成列表总长度是要加上8。但是有一点要特别注意的是,当前List具体包括到哪里,可能会有List嵌套。如截图中,选中的部分为一个hdrl的List;其中包含两个strl的List,一个音频,一个视频;每个strl List又包含一个strh和一个strf。

Chunk块(Chunk结构,普通块)

Chunk ID——表示块类型的四字符码

Chunk 块大小——记录了整个块的大小

Chunk数据

Chunk块大小=实际的块数据长度,而不包括ckID域和ckSize域本身的大小

从00000000-000007F3为一个WindowsAVI文件的信息区部分:

它是文件的第一个LIST块。在它的内部记录着整个文件的系统构成,如告诉播放软件“我是一个AVI文件”,“在我体内有几个数据流”,“每个数据流包含着什么数据——图像,声音或其他”,“如果是图像数据流,那么它的大小,颜色,压缩方式,播放速度等等是怎样规定的”,“如果是声音数据流,那么它的压缩方式,播放效果等等又将有何规定”……在这些信息区中还有多个附属的LIST块,也就是前面提到的“子块”,它们用来记录每个数据流的全部信息。而这些附属LIST块与数据流之间保持着一一对应的关系,即第一个附属LIST块对应与00号数据流;第二个附属LIST块对应01号数据流……要想解释数据流,我们必须先了解AVI文件中数据块是什么。在AVI文件中,数据块是被放置在数据区中的一个有起始标识(由“数据流识别码”和“数据块存储方式识别码”组成,请参见对数据区部分的说明),并指明大小和数据内容的数据段,那么,数据流就是那些相互之间具有练习的同种数据类型的数据块集合。

代码语言:txt
AI代码解释
复制
00000000-00000003、多媒体文件识别码:RIFF 
00000004-00000007、文件大小(10EDICH字节)——8字节 
00000008-0000000B、AVI文件识别码 
0000000C-0000000F、第一个LIST块识别码 
00000010-00000013、第一个LIST块的大小(168H字节) 
00000014-00000017、hdrl部分识别码,代表后面的数据记录着此文件的格式 
00000018-0000001B、hdrl部分所包含的avih块识别码,此模块记录着本文件的初始化信息 
0000001C-0000001F、avi块大小(38H字节) 
00000020-00000023、每帧画面显示所维持多少个百万分之一秒,本例为1046h,即6667百万分之一秒约0.07秒。所以在播放此文件时,你看到的画面约每秒15帧

2 AVI Layout(AVI文件层次划分)

AVI Layout(AVI文件层次划分)

    1. 信息块——包括文件的通用信息,定义数据格式,所用的压缩算法等参数
    1. 数据块——包含实际数据流,即图像和声音序列数据。这是文件的主体,也是决定文件容量的主要部分。视频文件的大小等于该文件的数据率乘以该视频播放的时间长度
    1. 索引块——索引块包含数据块列表好它们在文件中的位置,以提供文件内数据随机存取能力。

2.1 信息块

AVI文件时目前使用的最复杂的RIFF文件,他能同时存储同步表现的音频视频数据。AVI的RIFF块的形式类型是AVI,它包含3个子块,如下所述。

  • 一.信息块:ID为“hdrl”的LIST块,定义AVI文件的数据格式 “hdrl”LIST块包含两个子块,一个是ID为“avih”的子块和一个是ID为”strl”的LIST块。undefined“avih”块结构:用于记录AVI文件的全局信息,比如流的数量,视频图像的宽和高等: typedef struct { DWORD ChunID; // 必须为'avih' DWORD ChunkSize; //本数据结构的大小,不包括最初的8個位元組(ID和Size兩個域) DWORD dwMicroSecPerFrame ; //显示每帧所需的时间ns,定义avi的显示速率 DWORD dwMaxBytesPerSec; //最大的数据传输率 DWORD dwPaddingGranularity; //记录块的长度需为此值的倍数,通常是2048 DWORD dwFlages; //AVI文件的特殊属性,如是否包含索引块,音视频数据是否交叉存储 DWORD dwTotalFrame; //文件中的总帧数 DWORD dwInitialFrames; //说明在开始播放前需要多少桢 DWORD dwStreams; //文件中包含的数据流个数 DWORD dwSuggestedBufferSize; //建议使用的缓冲区的大小, //通常为存储一桢图像以及同步声音所需要的数据之和 DWORD dwWidth; //图像宽 DWORD dwHeight; //图像高 DWORD dwReserved[4]; //保留值 }MainAVIHeader;接着就是”avih”块的数据部分:一个或多个“strl”子列表 1. 文件中有多少个流,这里就对应有多少个“strl”子列表)。 2. 每个“strl”字列表至少包含一个“strh”块和一个“strf”块, 3. “strd”块(保存编解码器需要的一些配置信息)和“strn”块(保存流的名字)是可选的。 4. 注意:“strl”子列表出现的顺序与媒体流的编号是对应的,比如第一个“strl”字列表说明的是第一个流(Stream 0),第二个“strl”字列表说明的是第二个流(Stream 1),以此类推。

“strh”块结构:用于说明这个“strl”LIST块对应的数据流的头信息:

代码语言:txt
AI代码解释
复制
typedef struct 
{
 FOURCC fccType;       //4字节,表示数据流的种类,vids 表示视频数据流,auds 音频数据流
 FOURCC fccHandler;    //4字节 ,表示数据流解压缩的驱动程序代号
 DWORD dwFlags;        //数据流属性
 WORD wPriority;       //此数据流的播放优先级
 WORD wLanguage;       //音频的语言代号
 DWORD dwInitalFrames; //说明在开始播放前需要多少桢
 DWORD dwScale;        //数据量,视频每桢的大小或者音频的采样大小
 DWORD dwRate;         //dwScale /dwRate = 每秒的采样数
 DWORD dwStart;        //数据流开始播放的位置,以dwScale为单位
 DWORD dwLength;       //数据流的数据量,以dwScale为单位
 DWORD dwSuggestedBufferSize; //建议缓冲区的大小
 DWORD dwQuality;     //解压缩质量参数,值越大,质量越好
 DWORD dwSampleSize;  //音频的采样大小
 RECT rcFrame;        //视频图像所占的矩形
}AVIStreamHeader;

“strf” 块结构:“strf”子块紧跟在“strh”子块之后,其结构是“strh”子块的类型而定,如下所述:

如果strh子块是视频数据流,则strf子块的内容是一个BITMAPINFO结构,如下。

代码语言:txt
AI代码解释
复制
typedef struct tagBITMAPINFO
{
 BITMAPINFOHEADER bmiHeader;
 RGBQUAD bmiColors[1]; //颜色表
}BITMAPINFO;

typedef struct tagBITMAPINFOHEADER
{
 DWORD biSize;
 LONG biWidth;
 LONG biHeight;
 WORD biPlanes;
 WORD biBitCount;
 DWORD biCompression;
 DWORD biSizeImage;
 LONG biXPelsPerMeter;
 LONG biYPelsPerMeter;
 DWORD biClrUsed;
 DWORD biClrImportant;
}BITMAPINFOHEADER;

如果strh子块是音频数据流,则strf子块的内容是一个WAVEFORMAT结构,如下:

代码语言:txt
AI代码解释
复制
typedef struct 
{
 WORD wFormatTag; 
 WORD nChannels;        //声道数
 DWORD nSamplesPerSec;  //采样率
 DWORD nAvgBytesPerSec; //WAVE声音中每秒的数据量
 WORD nBlockAlign;      //数据块的对齐标志
 WORD biSize;           //此结构的大小
}WAVEFORMAT

strd”块结构:“strd”子块紧跟在strf子块后,存储供压缩驱动程序使用的参数,不一定存在,也没有固定的结构。

“strl”List块定义的AVI数据流依次将“hdrl”LIST块中的数据流头结构与“movi”LIST块中的数据联系在一起,第一个数据流头结构用于数据流0,第二个用于数据流1,依次类推。

2.2 数据块

二. 数据块:ID为“movi”的LIST块,包含AVI的音视频序列数据

用于保存真正的媒体流数据(视频图像帧数据或音频采样数据等)。保存方式为:

  1. 将数据块直接嵌套在“movi”列表里面
  2. 将几个数据块分组成一个“rec”列表后再编排进“movi”列表

(注意:在读取AVI文件内容时,建议将一个“rec”列表中的所有数据块一次性读出)

但是,当文件中包含有多个流的时候,数据块与数据块之间如何来区别呢?于是数据块使用了一个四字符吗来表征它的类型,这个四字符码由2个字节的类型吗和2个字节的流编号组成。

“db”——非压缩视频

“dc”——压缩视频

“pc”——改用新的调色板

“wb”——音缩视频

比如:

第一个流(Stream 0)是音频,则表征音频数据块的四字符码为“00wb”;

第二个流(Steam 1)是视频,则表征视频数据块的四字符码为“01db”或“01dc”。

对于视频数据来说,在AVI数据序列中间还可以定义一个新的调色板,每个改变的调色板数据块永“xxpc”来表征,新的调色板使用一个数据结构AVIPALCHANGE来定义。(注意:如果一个流的调色板中途改变,则应在这个流格式的描述中,也及时AVISTREMAHEADER结构的dwFlags中包含一个AVISF_VIDEO_PALCHANGES标记)另外,文字数据块可以使用随意的类型码表征。

2.3 索引块

三. 索引块:ID为“idxl”的子块,定义“movi”LIST块的索引数据,是可选块。

最后紧跟在“hdr”列表块和“movi”列表块之后的,就是AVI文件可选的索引块。这个索引块为AVI文件中每一个媒体数据块进行索引,并且记录它们在文件中的偏移(可能相对于“movi”列表,也可能相对于AVI文件开头)。索引块使用一个四字符码“idxl”来表征,索引信息使用一个数据结构AVIOLDINDEXl来定义。

代码语言:txt
AI代码解释
复制
typedef struct _avioldindex {
  FOURCC fcc;                  // 必须为‘idx1’
  DWORD cb;                   // 本数据结构的大小,不包括最初的8个字节(fcc和cb两个域)
  struct _avioldindex_entry {
  DWORD dwChunkId;            // 表征本数据块的四字符码
  DWORD dwFlags;              // 说明本数据块是不是关键帧、是不是‘rec ’列表等信息
  DWORD dwOffset;             // 本数据块在文件中的偏移量
  DWORD dwSize;               // 本数据块的大小
  } aIndex[];                // 这是一个数组!为每个媒体数据块都定义一个索引信息
} AVIOLDINDEX;

注意:如果一个AVI文件包含有索引块,则应在AVI信息头的描述中,也及时AVIMAINHEADER结构的dwFlags中包含一个AVI_HASINDEX标记

还有一种特殊的数据块,用一个四字符码“JUNK”来表征,它用于内部数据的对齐(填充),应用程序应该忽略这些数据块的实际意义。

2.4 索引解释

假如要将avi文件分成头、中、尾的话,RRFT开始到movi段之间应该算是头,movi算是中间,index就算是尾部了。index其实就是movi中的内容的索引,作用是在拖动视频进度条时,能让解码器迅速定位到要找的视频帧。索引以“idx1”开头,后面跟着的是整个索引的大小,其基本结构是:

代码语言:txt
AI代码解释
复制
struct AVI_index_entry{
     unsigned char dwChunkId[4];//表征本数据块的四字符码比如01db压缩视频 00wb音频
     DWORD dwFlags;//说明本数据块是不是关键帧、是不是‘rec’列表等信息
     DWORD dwOffset;//本数据块在文件中的偏移量
     DWORD dwSize;//本数据块的大小
};

idx1”就是索引的头

代码语言:txt
AI代码解释
复制
30 5b 00 00是索引的大小  
大家看看实例的第二行,它们对应avi文件中的每一帧或者没一段音频:  
30 30 64 63(“00dc”)是数据结构中的dwChunkId,当该段数据时音频时取(“01wb")  
10 00 00 00 是dwFlags,关键帧取值为10 00 00 00,否则取值为00 00 00 00  
04 00 00 00 是dwOffset;//本数据块在文件中的偏移量  
BF 0E 00 00 是dwSize,对应帧的大小  

  在最初合成avi视频的时候,我是没有添加index段的,视频一样可以播放。可是当你要拖动视频时,视频不会立刻跳到你所要的位置,而是加快播放速度,直到到达目标位置。

目前遇到一个问题:当我将索引加进去avi以后,播放器需要有一个缓冲的过程,有点像用迅雷下载电影,可是没等电影下完,改过后缀就去播放的状况。问题解决以后再来补充吧。

经过对avi视频的详细分析,发现音频视频的交叉有如下规律:

代码语言:txt
AI代码解释
复制
15帧	vedio
1段		audio
15帧    vedio
1段     audio
16帧    vedio
1段     audio
15帧    vedio
1段     audio
15帧   vedio
1段    audio
16帧   vedio
1段    audio

也就是基本上是每15段vedio就有一段的audio,可是每经过两个15段的vedio循环,就要有16段的vedio才能有一段audio。另外还有一个规律就是,每一段audio大小都是一定的4096字节。这是某个特定文件的交叉规律,个人认为音视频交叉的频率跟帧率和音频频率有关,只要是按一定的比率来交叉就行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
视频基础知识
说视频之前,先要说说图像。 图像,大家都知道,是由很多“带有颜色的点”组成的。这个点,就是“像素点”。
Gnep@97
2023/09/07
9090
视频基础知识
史上全最的WAV格式详解
  WAV即WAVE,是经典的Windows音频数据封装格式,由Microsoft开发。数据本身格式为PCM,也可以支持一些编码格式的数据,比如最近流行的AAC编码。如果是PCM,则为无损格式,文件会比较大,并且大小相对固定,可以使用以下公式计算文件大小。
阿利民
2022/05/16
5.2K0
音视频封装格式之TS(一)
大家晚上,今天开始给大家分享音视频里面的各种封装格式解析,先给大家分享封装格式基本概念,后期再分析代码实现封装格式解析。
用户6280468
2022/03/21
2.2K0
音视频封装格式之TS(一)
音视频封装:MPTG2-TS 媒体封装实例解析和说明
首先明确这两种格式都是音视频的封装格式,是由国际电信联盟出的具体标准,具体文档见ISO/IEC-13818。由于在安防和广电领域的使用,还有苹果在自家全系列产品的主推,导致目前还有一定的生存空间。在安防领域主要是因为GB28181-11标准规定了码流的封装格式是RTP+PS流。这样导致整个安防凡是和国标相关的码流封装格式都是PS流,目前依然是安防码流的主流封装标准,一时半会还看不到有任何问题。TS流主要是广电领域使用,我们看到的电视节目就是TS流封装,然后再在机顶盒解码解封装和播放。苹果HLS协议的推出,在整个苹果家族产品里面支持都非常友好,安卓阵营的主流浏览器也支持HLS协议。其中HLS协议的码流封装格式也是TS。
潇湘落木
2020/11/12
3.9K0
音视频封装:MPTG2-TS 媒体封装实例解析和说明
音视频封装:MP4结构概述和分析工具
前面已经讲了好几种封装格式包括了TS、FLV、RTP等。现在用几篇文章讲解下MP4,这种封装格式设计思路和前面都不太一样,其应用范围最广、灵活性最高、跨平台最好,兼容性最强。带来的负面影响就是格式本身比较复杂,特别是在封装和转封装方面代码实现起来比较长。
潇湘落木
2020/11/12
4.5K0
音视频封装:MP4结构概述和分析工具
flv.js怎么用?全面解读flv.js代码
flv.js项目的代码有一定规模,如果要研究的话,我建议从demux入手,理解了demux就掌握了媒体数据处理的关键步骤,前面的媒体数据下载和后面的媒体数据播放就变得容易理解了。
smy
2019/01/07
8.2K0
FLV 封装格式解析
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10662941.html
叶余
2019/04/18
2.3K0
FLV 封装格式解析
WAV文件格式解析及处理
RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构。RIFF文件所包含的数据类型由该文件的扩展名来标识
deep_sadness
2018/10/25
6.7K0
(强烈推荐)移动端音视频从零到上手
音视频的发展正在向各个行业不断扩展,从教育的远程授课,交通的人脸识别,医疗的远程就医等等,音视频方向已经占据一个相当重要的位置,而音视频真正入门的文章又少之甚少,一个刚毕业小白可能很难切入理解,因为音视频中涉及大量理论知识,而代码的书写需要结合这些理论,所以搞懂音视频,编解码等理论知识至关重要.本人也是从实习开始接触音视频项目,看过很多人的文章,在这里总结一个通俗易懂的文章,让更多准备学习音视频的同学更快入门。
做个快乐的码农
2021/12/12
1.2K0
(强烈推荐)移动端音视频从零到上手
音视频封装格式:AAC音频基础和ADTS打包方案详解
现在主流的封装格式支持的音视频编码标配是H264+AAC,其中像TS、RTP、FLV、MP4都支持音频的AAC编码方式。当然,后继者不乏Opus这种编码方式,它主要应用在互联网场景,比如现在谷歌的WebRTC音视频解决方案就用的Opus,最新发布的Android10支持的音视频编码方式就是AV1和Opus,但是AAC目前在广电,安防,电影院等还是应用最多,Opus目前还不足以威胁到AAC的地位。本篇文章准备讲解下AAC的封装格式ADTS字段含义和解封装,顺便讲解下AAC编码的一些基本情况,如果你只关心解封装,直接看【AAC的封装格式】这节即可。
潇湘落木
2020/11/12
4.1K0
音视频封装格式:AAC音频基础和ADTS打包方案详解
音视频解封装:MP4核心Box详解及H264&AAC打包方案
上一篇文章《音视频封装:MP4结构概述和分析工具》让大家看了下MP4的主要结构和推荐了一些分析工具,如果你对MP4没有任何了解,还是先看上文,了解MP4的基本结构,其中还有许多工具需要下载和使用。这篇文章借助一个实例分析下核心Box的语法结构和字段含义,其次总结下H264码流的是如何打包到MP4中的,这篇文章也是下篇文章计算一些音视频信息,实现音视频操作和对MP4码流处理的基础。
潇湘落木
2020/11/12
3.7K0
音视频解封装:MP4核心Box详解及H264&AAC打包方案
ffmpeg常用命令
FFmpeg是一个强大的开源多媒体处理工具,它可以用于录制、转换以及流化音频和视频。它是一个跨平台的项目,可以在多种操作系统上运行,包括Windows、Mac OS和Linux。这个工具可以执行各种各样的音视频处理任务,包括但不限于:
Jensen_97
2024/04/18
5270
Linux音频驱动-WAV文件格式分析
WAV文件格式是Microsoft的RIFF规范的一个子集,用于存储多媒体文件。WAV(RIFF)文件由若干个Chunk组成,分别为: RIFF WAVE Chunk,Format Chunk,Fact Chunk(可选),Data Chunk。具体格式如下:
DragonKingZhu
2020/03/24
4.9K0
Linux音频驱动-WAV文件格式分析
MP4文件格式入门「干货分享」
首先,介绍下封装格式。多媒体封装格式(也叫容器格式),是指按照一定的规则,将视频数据、音频数据等,放到一个文件中。常见的 MKV、AVI 以及本文介绍的 MP4 等,都是封装格式。
睡魔的谎言
2020/12/22
2.5K0
波形音频(WAVE)底层接口的学习与使用
在WINDOWS下,音频函数有多种类型,如MCI、多媒体OLE控制、高级音频等,使用方法都比较简单。 但如果想编写一个功能较强大的音频处理程序,那就必须使用低级音频函数和多媒体文件I/O来控制音频设备的输入和输出。 因为低级音频函数可直接与音频驱动程序交互,通过窗口消息或回调(CALLBACK)函数来管理音频数据块的记录和播放,控制非常灵活。重要的一点是,低级音频函数为我们提供了一个设备无关的接口。   Header: Declared in Mmsystem.h; include Wind
_gongluck
2018/03/08
5.4K0
波形音频(WAVE)底层接口的学习与使用
走进音视频的世界——Matroska封装格式的介绍(二)「建议收藏」
Matroska封装格式非常灵活、兼容性好,既适用于本地文件存储又可以进行实时流传输。本篇文章主要探讨Matroska的编解码器映射,如何封装视频流、音频流、字幕流。如果要Matroska的介绍、功能和基本结构,请查看上一篇文章:走进音视频的世界——Matroska封装格式的介绍(一)。
全栈程序员站长
2022/11/04
1.6K0
HTTP-FLV详解及分析
传统的直播协议要么使用 Adobe 的基于 TCP 的 RTMP 协议, 要么使用 Apple 的基于 HTTP 的 HLS 协议。本文介绍另外一种结合了 RTMP 的低延时, 以及可以复用现有 HTTP 分发资源的流式协议 HTTP-FLV。
Gnep@97
2023/11/12
2.2K0
HTTP-FLV详解及分析
MP4 格式:最少加载多少数据就能渲染出视频首帧?优化短视频播放体验必须先了解它丨音视频基础
(本文基本逻辑:MP4 封装格式概览 → 重要 Box 具体信息介绍 → 实战中对 MP4 Box 信息的使用)
关键帧
2022/06/13
2.2K0
MP4 格式:最少加载多少数据就能渲染出视频首帧?优化短视频播放体验必须先了解它丨音视频基础
1.ffmpeg、ffplay、ffprobe命令使用
ffmpeg命令- 用于转码的应用程序, 也可以从url/现场音频/视频源抓取输入源
诺谦
2020/05/18
2.6K0
1.ffmpeg、ffplay、ffprobe命令使用
FFmpeg封装格式处理3-复用例程
复用(mux),是multiplex的缩写,表示将多路流(视频、音频、字幕等)混入一路输出中(普通文件、流等)。
叶余
2019/04/02
1.2K0
FFmpeg封装格式处理3-复用例程
相关推荐
视频基础知识
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档