index of mpeg4

在AudioTrak的esdsbox中首先是1、version和flag占4个字节不使用就跳过这边的附属内容我要说下重要的是这边对codec解码进行了调整,id

在Audio Trak 的esds box中

首先是 1、version 和 flag 占4个字节 不使用就跳过

这边的附属内容我要说下 重要的是 这边对codec 解码进行了调整,id 对应表附件1,这边决定了MP3 或者 acc等

4、 MP4DecSpecificDescrTag 读取MP4DecSpecificDescrTag 和len 和附属内容

这边就严重了,这边如果是老的版本 只需如此

但是新的 版本 调整增加了 很多内容

  • 主要如上 object type 读取5个bit object type列表见附件2(对codec解码器进行调整,MP3 还是ACC还是 MP3on4)
  • 然后 frequency index 读取4个bit frequency index 列表见 附件3(对采样率进行调整)
  • 最后channel 读取4个位 列表见附件4 (对声道数进行调整)

附件1 const MP4CodecTag ff_mp4_obj_type[] = { { CODEC_ID_MPEG4 , 32 }, { CODEC_ID_H264 , 33 }, { CODEC_ID_AAC , 64 }, { CODEC_ID_MPEG2VIDEO, 96 }, /* MPEG2 Simple */ { CODEC_ID_MPEG2VIDEO, 97 }, /* MPEG2 Main */ { CODEC_ID_MPEG2VIDEO, 98 }, /* MPEG2 SNR */ { CODEC_ID_MPEG2VIDEO, 99 }, /* MPEG2 Spatial */ { CODEC_ID_MPEG2VIDEO, 100 }, /* MPEG2 High */ { CODEC_ID_MPEG2VIDEO, 101 }, /* MPEG2 422 */ { CODEC_ID_AAC , 102 }, /* MPEG2 AAC Main */ { CODEC_ID_AAC , 103 }, /* MPEG2 AAC Low */ { CODEC_ID_AAC , 104 }, /* MPEG2 AAC SSR */ { CODEC_ID_MP3 , 105 }, /* 13818-3 */ { CODEC_ID_MPEG1VIDEO, 106 }, /* 11172-2 */ { CODEC_ID_MP3 , 107 }, /* 11172-3 */ { CODEC_ID_MJPEG , 108 }, /* 10918-1 */ { CODEC_ID_PNG , 109 }, { CODEC_ID_JPEG2000 , 110 }, /* 15444-1 */ { CODEC_ID_VC1 , 163 }, { CODEC_ID_VORBIS , 221 }, { CODEC_ID_PCM_S16LE , 224 }, { CODEC_ID_QCELP , 225 }, { CODEC_ID_AC3 , 226 }, { CODEC_ID_PCM_ALAW , 227 }, { CODEC_ID_PCM_MULAW , 228 }, { CODEC_ID_PCM_S16BE , 230 }, { CODEC_ID_H263 , 242 }, { CODEC_ID_H261 , 243 }, { CODEC_ID_NONE, 0 },

};1

附件2 MPEG-4 Audio Object Types: ● 0: Null ● 1: AAC Main ● 2: AAC LC (Low Complexity) ● 3: AAC SSR (Scalable Sample Rate) ● 4: AAC LTP (Long Term Prediction) ● 5: SBR (Spectral Band Replication) ● 6: AAC Scalable ● 7: TwinVQ ● 8: CELP (Code Excited Linear Prediction) ● 9: HXVC (Harmonic Vector eXcitation Coding) ● 10: Reserved ● 11: Reserved ● 12: TTSI (Text-To-Speech Interface) ● 13: Main Synthesis ● 14: Wavetable Synthesis ● 15: General MIDI ● 16: Algorithmic Synthesis and Audio Effects ● 17: ER (Error Resilient) AAC LC ● 18: Reserved ● 19: ER AAC LTP ● 20: ER AAC Scalable ● 21: ER TwinVQ ● 22: ER BSAC (Bit-Sliced Arithmetic Coding) ● 23: ER AAC LD (Low Delay) ● 24: ER CELP ● 25: ER HVXC ● 26: ER HILN (Harmonic and Individual Lines plus Noise) ● 27: ER Parametric ● 28: SSC (SinuSoidal Coding) ● 29: PS (Parametric Stereo) ● 30: MPEG Surround ● 31: (Escape value) ● 32: Layer-1 ● 33: Layer-2 ● 34: Layer-3 ● 35: DST (Direct Stream Transfer) ● 36: ALS (Audio Lossless) ● 37: SLS (Scalable LosslesS) ● 38: SLS non-core ● 39: ER AAC ELD (Enhanced Low Delay) ● 40: SMR (Symbolic Music Representation) Simple ● 41: SMR Main ● 42: USAC (Unified Speech and Audio Coding) (no SBR) ● 43: SAOC (Spatial Audio Object Coding) ● 44: LD MPEG Surround ● 45: USAC 附件3 Sampling Frequencies There are 13 supported frequencies: ● 0: 96000 Hz ● 1: 88200 Hz ● 2: 64000 Hz ● 3: 48000 Hz ● 4: 44100 Hz ● 5: 32000 Hz ● 6: 24000 Hz ● 7: 22050 Hz ● 8: 16000 Hz ● 9: 12000 Hz ● 10: 11025 Hz ● 11: 8000 Hz ● 12: 7350 Hz ● 13: Reserved ● 14: Reserved ● 15: frequency is written explictly 附件3

Channel Configurations These are the channel configurations: ● 0: Defined in AOT Specifc Config ● 1: 1 channel: front-center ● 2: 2 channels: front-left, front-right ● 3: 3 channels: front-center, front-left, front-right ● 4: 4 channels: front-center, front-left, front-right, back-center ● 5: 5 channels: front-center, front-left, front-right, back-left, back-right ● 6: 6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel ● 7: 8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel ● 8-15: Reserved

一文读懂MP4封装格式

简介

MP4或称MPEG-4第14部分(MPEG-4 Part 14)是一种标准的数字多媒体容器格式。扩展名为.mp4。

虽然被官方标准定义的唯一扩展名是.mp4,但第三方通常会使用各种扩展名来指示文件的内容:

同时拥有音频视频的MPEG-4文件通常使用标准扩展名.mp4

仅有音频的MPEG-4文件会使用.m4a扩展名

大部分数据可以通过专用数据流嵌入到MP4文件中,因此MP4文件中包含了一个单独的用于存储流信息的轨道。目前得到广泛支持的编解码器或数据流格式有:

视频格式:H.264/AVC、H.265/HEVC、VP8/9等

音频格式:AAC、MP3、Opus等

文件格式

MP4文件由多个box组成,每个box存储不同的信息,且box之间是树状结构:

随便看一个MP4文件:

查看MP4文件的信息有很多方式,个人比较推荐的:

  1. https://www.onlinemp4parser.com/
  2. http://www.bento4.com/
  3. SteamAnalyzer

这里就借用一个网图,上述图片来自:mp4文件格式解析

一个box由两部分组成:box header、box body。

box header:box的元数据,比如box type、box size。

box body:box的数据部分,实际存储的内容跟box类型有关,比如mdat中body部分存储的媒体数据。

box header中,只有type、size是必选字段。当size==1时,存在largesize字段。如果size==0,表示该box为文件的最后一个box。在部分box中,还存在version、flags字段,这样的box叫做Full Box。当box body中嵌套其他box时,这样的box叫做container box。

我们在最开始展示了一个MP4文件box的图,根结构下一般有4个box(ftyp,free,mdat,moov),下面我们就来了解一下这几个box

ftyp(File Type Box)

一般在文件的开始位置,描述的文件的版本、兼容协议等。

isom(ISO Base Media file)是在 MPEG-4 Part 12 中定义的一种基础文件格式。MP4 文件可能遵循的规范有mp41、mp42,而mp41、mp42又是基于isom衍生出来的。

major_brand:比如常见的 isom、mp41、mp42、avc1、qt等。它表示“最好”基于哪种格式来解析当前的文件。

minor_version:提供 major_brand 的说明信息,比如版本号,不得用来判断媒体文件是否符合某个标准/规范;

compatible_brands:文件兼容的brand列表。

free(Free Space Box)

free box(有的也叫skip),这个可以不用关心,去掉它也不影响解封装。

mdat(Media Data Box)

存放具体的媒体数据。数据结构的意义需要参考metadata(主要在sample table中描述)

moov(Movie Box)

存储mp4文件的metadata信息,“moov”是一个container box,它包含mvhd、track和udta这三个子box。

mvhd(Movie Header Box)

记录整个媒体文件的描述信息,如创建时间、修改时间、时间度量标尺、播放时长等。

一些重要的字段:

creation_time:文件创建时间;

modification_time:文件修改时间;

timescale:一秒包含的时间单位(整数)。举个例子,如果timescale等于1000,那么,一秒包含1000个时间单位(比如track的duration为10,000,那么,track的实际时长为10,000/1000=10s);

duration:影片时长(整数),根据文件中的track的信息推导出来,等于时间最长的track的duration;

rate:推荐的播放速率,32位整数,高16位、低16位分别代表整数部分、小数部分([16.16]),举例 0x0001 0000 代表1.0,正常播放速度;

volume:播放音量,16位整数,高8位、低8位分别代表整数部分、小数部分([8.8]),举例 0x01 00 表示 1.0,即最大音量;

matrix:视频的转换矩阵,一般可以忽略不计;

next_track_ID:32位整数,非0,一般可以忽略不计。当要添加一个新的track到这个影片时,可以使用的track id,必须比当前已经使用的track id要大。也就是说,添加新的track时,需要遍历所有track,确认可用的track id;

track (Track Box)

记录媒体流信息,文件中可以存在一个或多个 track,它们之间是相互独立的。一般的包含一个视频track和一个音频track。

track是container box,至少包含两个子box:tkhd和mdia。

一些重要的字段:

视频:

packets:包含的packets的数量

steam type: 流的类型,比如AVC/H.264 、 AAC

profile: 编码器的profile,如High、Base等

level: 编码器的level

width: 宽

height: 高

aspect ratio: 纵横比, 5:9

音频:

sample rate: 采样率

channels: 声道数

tkhd(Track Header Box)

包含关于媒体流的头信息,跟track中的更细化了!

一些重要的字段:

version:tkhd box的版本;

flags:按位或操作获得,默认值是7(0x000001 | 0x000002 | 0x000004),表示这个track是启用的、用于播放的 且 用于预览的。

Track_enabled:值为0x000001,表示这个track是启用的,当值为0x000000,表示这个track没有启用;

Track_in_movie:值为0x000002,表示当前track在播放时会用到;

Track_in_preview:值为0x000004,表示当前track用于预览模式;

creation_time:当前track的创建时间;

modification_time:当前track的最近修改时间;

track_ID:当前track的唯一标识,不能为0,不能重复;

index of mpeg4

duration:当前track的完整时长(需要除以timescale得到具体秒数);

layer:视频轨道的叠加顺序,数字越小越靠近观看者,比如1比2靠上,0比1靠上;

alternate_group:当前track的分组ID,alternate_group值相同的track在同一个分组里面。同个分组里的track,同一时间只能有一个track处于播放状态。当alternate_group为0时,表示当前track没有跟其他track处于同个分组。一个分组里面,也可以只有一个track;

volume:audio track的音量,介于0.0~1.0之间;

matrix:视频的变换矩阵;

width、height:视频的宽高;

edts(Edit Box)

它下边有一个elst(Edit List Box),它的作用是使某个track的时间戳产生偏移。

看一下一些字段:

segment_duration: 表示该edit段的时长,以Movie Header Box(mvhd)中的timescale为单位,即 segment_duration/timescale = 实际时长(单位s)

media_time: 表示该edit段的起始时间,以track中Media Header Box(mdhd)中的timescale为单位。如果值为-1(FFFFFF),表示是空edit,一个track中最后一个edit不能为空。

media_rate: edit段的速率为0的话,edit段相当于一个”dwell”,即画面停止。画面会在media_time点上停止segment_duration时间。否则这个值始终为1。

需要注意的问题:

为使PTS从0开始,media_time字段一般设置为第一个CTTS的值,计算PTS和DTS的时候,他们分别都减去media_time字段的值就可以将PTS调整为从0开始的值

如果media_time是从一个比较大的值,则表示要求PTS值大于该值时画面才进行显示,这时应该将第一个大于或等于该值的PTS设置为0,其他的PTS和DTS也相应做调整

mdia(Media Box)

定义了track媒体类型以及sample数据,描述sample信息。

它是一个container box,它必须包含mdhd,hdlr 和 minf。

mdhd(Media Header Atom Box)

mdhd 和 tkhd ,内容大致都是一样的。不过tkhd 通常是对指定的 track 设定相关属性和内容。而 mdhd 是针对于独立的 media 来设置的。

一些重要的字段:

creation_time:当前track的创建时间;

modification_time:当前track的最近修改时间;

timescale: 同mvhd中的timescale,但是需要注意虽然意义相同,但是值有可能不同,下边stts,ctts等时间戳的计算都是以mdhd中的timescale

duration: track的时间长度。

language: 媒体语言码。最高位为0,后面15位为3个字符

hdlr(Handler Reference Box)

主要解释了媒体的播放过程信息。声明当前track的类型,以及对应的处理器(handler)。

handler_type的取值包括:

vide(0x76 69 64 65):video track

soun(0x73 6f 75 6e):audio track

hint(0x68 69 6e 74):hint track

meta(0x6d 65 74 61):Timed Metadata track

auxv(0x61 75 78 76):Auxiliary Video track

minf(Media Information box)

解释 track 媒体数据的 handler-specific 信息,media handler用这些信息将媒体时间映射到媒体数据并进行处理。minf 同样是个 container box,其内部需要关注的内容是 stbl,这也是 moov 中最复杂的部分。

一般情况下,“minf”包含一个header box,一个“dinf”和一个“stbl”,其中,header box根据track type(即media handler type)分为“vmhd”、“smhd”、“hmhd”和“nmhd”,“dinf”为data information box,“stbl”为sample table box。

*mhd (Media Info Header Box)

可分为“vmhd”、“smhd”、“hmhd”和“nmhd”,比如视频类型则为vmhd,音频类型为smhd

vmhd

graphics mode:视频合成模式,为0时拷贝原始图像,否则与opcolor进行合成。

opcolor: 一组(red,green,blue),graphics modes使用。

smhd

balance:立体声平衡,[8.8] 格式值,一般为0表示中间,-1.0表示全部左声道,1.0表示全部右声道。

dinf(Data Information Box)

描述了如何定位媒体信息,是一个container box。

“dinf”一般包含一个“dref”(data reference box)

“dref”下会包含若干个“url”或“urn”,这些box组成一个表,用来定位track数据。简单的说,track可以被分成若干段,每一段都可以根据“url”或“urn”指向的地址来获取数据,sample描述中会用这些片段的序号将这些片段组成一个完整的track。一般情况下,当数据被完全包含在文件中时,“url”或“urn”中的定位字符串是空的。

stbl(Sample Table Box)

MP4文件的媒体数据部分在mdat box里,而stbl则包含了这些媒体数据的索引以及时间信息。在解析 stbl 前,我们需要了解chunk和sample的概念:

Sample: video sample即为一帧或者一组连续视频帧,audio sample即为一段连续的音频。

Chunk: 一个视频或者音频track中一个或多个sample的组合

stbl 是一个container box,其子box包括:

stsd:sample description box,样本的描述信息。

stts:time to sample box,sample解码时间的压缩表。

ctts:composition time to sample box,sample的CTS与DTS的时间差的压缩表。

stss:sync sample box,针对视频,关键帧的序号。

stsz:sample size box,每个sample的字节大小。

stsc:sample to chunk box,sample-chunk映射表。

stco/co64:chunk offset box,chunk在文件中的偏移。

① stsd(Sample Description Box)

主要存储了编码类型和初始化解码器需要的信息。

这里以视频为例,包含子box:avc1,表示是h.264的视频

data_reference_index:利用这个索引可以检索与当前sample description关联的数据。数据引用存储在data reference box。

width、height:像素宽高。

horizresolution、vertresolution:每英寸的像素值(dpi),[16.16]格式的数据。

frame_count:每个sample中的视频帧数,默认是1。可以是一个sample中有多帧数据。

depth: 位图的深度信息,比如 0x0018(24),表示不带alpha通道的图片;

然后,avc1 box下还有一个avcc,里边会有 sps,pps 等解码必要信息。

② stts(Decoding Time to Sample Box)

包含了一个压缩版本的表,通过这个表可以从解码时间映射到sample序号。表中的每一项是连续相同的编码时间增量(Decode Delta)的个数和编码时间增量。通过把时间增量累加就可以建立一个完整的time to sample表。

重要的字段:

entry_count:表中条目的个数。

sample_count: 连续相同时间长度的sample个数。

sample_delta:以timescale为单位的时间长度。

持续时间相同的连续的 Sample 可以放到一个 entry 里面,以达到节省空间的目的。

③ ctts(composition time to sample box)

index of mpeg4

这个box提供了decoding time到composition time的offset的表,用于计算pts。

如果一个视频只有I帧和P帧,则ctts这个表就不需要了,因为解码顺序和显示顺序是一致的,但是如果视频中存在B帧,则需要ctts!

这个表在Decoding time和composition time不一样的情况下时必须的。

如果box的version等于0,decoding time必须小于等于composition time,因而差值用一个无符号的数字表示。

有以下公式:CT(n)=DT(n)+CTTS(n)

注:CTTS(n)是未压缩的表的第n个sample对应的offset。

重要字段:

sample_count:连续相同的offset的个数。

sample_offset:CT和DT之间的offset。

④ stss(Sync Sample Box)

它包含media中的关键帧的sample表。关键帧是为了支持随机访问。如果此表不存在,说明每一个sample都是一个关键帧。

重要字段:

sample_number:媒体流中同步sample的序号。

⑤ stsz(Sample Size Box)

包含sample的数量和每个sample的字节大小,这个box相对来说体积比较大的。

重要字段:

sample_size:指定默认的sample字节大小,如果所有sample的大小不一样,这个字段为0。

sample_count:track中sample的数量。

entry_size:每个sample的字节大小。

⑥ stsc(Sample To Chunk Box)

media中的sample被分为组成chunk。chunk可以有不同的大小,chunk内的sample可以有不同的大小。

通过stsc中的sample-chunk映射表可以找到包含指定sample的chunk,从而找到这个sample。结构相同的chunk可以聚集在一起形成一个entry,把一组相同结构的chunk放在一起进行管理,是为了压缩文件大小。这个entry就是stsc映射表的表项。

一些重要的字段解析:

first_chunk:一组chunk的第一个chunk的序号。

chunk的编号从1开始。

samples_per_chunk:每个chunk有多少个sample。

sample_desc_idx:stsd 中sample desc信息的索引,即stsd 表项序号。

⑦ stco/co64(Chunk Offset Box)

Chunk Offset表存储了每个chunk在文件中的位置,这样就可以直接在文件中找到媒体数据,而不用解析box。

需要注意的是一旦前面的box有了任何改变,这张表都要重新建立。

重要字段:

chunk_offset:chunk在文件中的位置。

stco 有两种形式,如果你的视频过大的话,就有可能造成 chunkoffset 超过 32bit 的限制。所以,这里针对大 Video 额外创建了一个 co64 的 Box。它的功效等价于 stco,也是用来表示 sample 在 mdat box 中的位置。只是,里面 chunk_offset 是 64bit 的。

需要注意,这里 stco 只是指定的每个 Chunk 在文件中的偏移位置,并没有给出每个 Sample 在文件中的偏移。想要获得每个 Sample 的偏移位置,需要结合 Sample Size box 和 Sample-To-Chunk 计算后取得。

udta(User Data Box)

用户自定义数据

如何计算一个sample在文件中的偏移?

注意:上边提过了这个的timesacle是mdia/mdhd中的timescale,这里等于1000000

另外也先不考虑edts中偏移的影响!

比如,想要获取时间戳在5.21s的sample在文件中的位置:

那么5.21s在视频时间轴上就是5.21*1000000 = 5210000,其实说白了就是微秒us

查表ctts,根据上边的公式,CT(n)=DT(n)+CTTS(n),计算出DT,就是dts,这里是5210000-200000 = 5010000

查表stts,从Decoding Time to Sample表中将所有sample_count * sample_delta 累加,要<=5010000,找到这个最大的sample的num。这里是第150个,再加1,也就是第151个sample

查表stsc,从sample-to-chunk table查找到对应的chunk number。

151-5 = 146,所以这里对应的是第147个chunk!

查表stco,从chunk offset 表中查找到对应chunk在文件中的起始偏移量。为2830074

最后查 stsz ,得到第 151 个 Sample 的 size 为 31523,因为sample_per_chunk=1,这个chunk里只有这一个sample,所以该chunk中需要读取的sample在文件中的起始偏移量 = 2830074!如果sample_per_chunk不为1,则需要手动加起来!

当然要解码,还需要找到视频的解码数据如sps、pps。

使用FFMpeg将moov前置

为了优化首帧速度,需要将 moov 移到文件前面,此时,需要对 chunk_offset 进行改写。

使用ffmpeg将moov前移很简单,在写文件前设置这个flag即可:

作者:木大白易

音视频学习之ffmpeg常用基础命令整理

基于windows环境安装好必要的ffmpeg后,对ffmpeg基础命令进行一些了解:

FFmpegWebRTCRTMPRTSPHLSRTP播放器-音视频流媒体高级开发

学习交流裙788280672

有时候写入MP4文件会不成功,改成flv就好

编译的时候需要支持 FreeType、FontConfig、iconv,系统中需要有相关的子库,

在 FFmpeg 中增加纯字母水印可以使用 drawtext 滤镜进行支持:

相关使用实例:

为视频添加图片水印可以使用movie滤镜,相关参数:

使用实例:

可以通过overlay将 多个视频流、多个多媒体采集设备、多个视频文件合并到一个界面中,生成画中画的效果。

相关参数介绍:

从前文中可以看出进行视频图像处理时,overlay 滤镜为关键画布,可以通过 FFmpeg建立一个画布,也可以使用默认的画布。如果想以多宫格的方式展现,则可以自己建立一个足够大的画布, 下面就来看一下多宫格展示的例子:

15:花屏 绿屏

绿屏的主要是: 无法渲染的画面有些用黑色填充,有些用绿色填充,有些用上一帧画面填充。

===>视频参数改变, 而解码端的SPS&PPS信息未及时重新获取更新,会导致画面无法正常渲染,继而导致绿屏的现象出现。

15.1:全屏花屏:

​ 正常花屏:

==>码率特别低的时候出现的大面积马赛克,编码器每秒产生的视频数据太少。

==>视频参数问题:

======>视频源修改过视频参数(如从720P修改1080P),此时客户端用于解码的SPS&PPS如果没有重新获取的话,就会出现整个画面花屏的现象。

======>不会恢复。

15.2:局部花屏:

​ SO_SNDBUF的Buffer太小,丢失P帧

​ P帧丢失。

总结:视频播放时,相关SPS和PPS参数不匹配/丢帧

用户评论


话少情在

终于找到解释MPEG-4格式的网站了!我一直在想如何压缩我的视频文件,降低他们的文件大小,这篇文章简直太详细了,我学会了很多关于编码和解码的过程!

    有18位网友表示赞同!


花花世界总是那么虚伪﹌

这个网站讲解得太透彻了,让我一下子就懂了MPEG-4视频格式。以前总是觉得这些专业术语很神秘,现在终于有清晰的解释。

    有9位网友表示赞同!


开心的笨小孩

这篇文章说的太对了!MPEG-4就是我喜欢的视频播放标准,画质清晰,文件再也不会太大占用内存了。不过网站里没有提到支持的硬件解码器啊

    有14位网友表示赞同!


七级床震

这个網站真的很有帮助!我现在正在学习视频编码技术,MPEG-4是必修课之一。有了这篇文章的解释,我理解了很多以前不懂的概念,真是太棒了!

    有8位网友表示赞同!


一生只盼一人

感觉网站里对 MPEG-4 的介绍比较理论化,缺少一些实际应用的例子和场景分析,能不能加入更多关于不同分辨率和编码速度下视频质量的影响?

    有7位网友表示赞同!


看我发功喷飞你

这个网站的信息非常有用,尤其是在学习计算机视觉或者数字媒体处理的时候,MPEG-4 了解这篇文章可以作为很好的入门指南。

    有11位网友表示赞同!


日久见人心

网页设计有点老旧了,但是信息还是很有价值的! 希望以后能更新一下页面风格,更容易让人阅读和理解。

    有20位网友表示赞同!


念初

说实话,这个网站写的有点枯燥乏味,虽然内容很全面,但能不能用更生动的语言表达呢?添加一些图片或者动画效果,可以使文章更容易理解

    有8位网友表示赞同!


高冷低能儿

MPEG-4 真是一个伟大的视频格式!它改变了我们观看和分享视频的方式。 这篇文章很好的介绍了MPEG-4 的发展历程和技术原理。

    有20位网友表示赞同!


该用户已上天

如果要学习 MPEG-4 视频压缩的细节,我建议去看一些更专业的书籍或课程教材,因为这篇文章只是提供了基本的概述。

    有12位网友表示赞同!


情如薄纱

网页加载速度有点慢,感觉信息量很大但是阅读体验不太好

    有14位网友表示赞同!


墨染天下

这个网站确实很有用的,它帮助我了解了 MPEG-4 格式的核心要素, 比如不同视频编码技术以及它们在实际应用中的差异。

    有18位网友表示赞同!


三年约

MPEG-4 的出现确实推动了数字视频技术的进步。这篇文章对相关的一些历史背景做了一个很好的总结。

    有13位网友表示赞同!


灼痛

文章介绍的很全面,包含MPEG-4 的定义、特点、标准以及历史发展进程,非常适合想要了解 MPEG-4 格式的人阅读。

    有17位网友表示赞同!


恰十年

我希望网站能提供更多关于实际使用 MPEG-4 格式的案例分析和工具推荐,这样更有助于读者理解它的应用价值。

    有14位网友表示赞同!

程序开发

乐味TaTa头戴式街头耳机:体验最纤细身材的音质魅力

2025-8-3 13:18:51

程序开发

电脑无法关机?快速解决方法指南

2025-8-3 14:18:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索