【音视频开发】FFmpeg转换与封装 I - MP4格式

这篇具有很好参考价值的文章主要介绍了【音视频开发】FFmpeg转换与封装 I - MP4格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 FFmpeg转换与封装

1.1 MP4格式转换

1.1.1 MP4格式标准


1 FFmpeg转换与封装

        FFmpeg支持的媒体封装格式具有多样性与全面性,与此,我们还可以使用FFmpeg来对媒体格式进行转换与封装

1.1 MP4格式转换

在互联网常见的格式中,跨平台最好的应该是 MP4 文件,因为 MP4 文件既可以在PC 平台的Flashplayer中播放,又可以在移动平台的 Android 、 iOS 等平台中进行播放,而且使用系统默认的播放器即可播放,因此我们说 MP4 格式是最常见的多媒体文件格式 。

1.1.1 MP4格式标准

        MP4 格式标准为IS0-14496 Part 12 、ISO-14496 Part 14 ,标准内容并不是特别多。
        要了解 MP4 的格式信息,要清楚几个概念,具体如下:
        • MP4 文件由许多个 Box 与 FullBox 组成
        • 每个Box 由 Header 和 Data 两部分组成
        • FullBox 是 Box 的扩展,其在 Box 结构的基础上,在 Header 中增加 8 位 version 标志和 24 位的 flags 标志
        • Header 包含了整个 Box 的长度的大小( size )和类型( type ),当 size 等于 0 时,代表这个 Box 是文件的最后一个 Box 。 当 size 等于 1 时,说明 Box 长度需要更多的位来描述,在后面会定义一个 64 位的 large size 用来描述 Box 的长度 。当 Type 为uuid 时,说明这个 Box 中的数据是用户自定义扩展类型
        • Data 为 Box 的实际数据,可以是纯数据,也可以是更多的子 Box
        • 当 一个 Box 中 Data 是一系列的子 Box 时,这个 Box 又可以称为 Container(容器)Box MP4 文件中 Box 的组成可以用表 3-1 所示的列表进行排列,下表中标记“√”的Box为必要Box,否则为可选Box。

MP4常用参考标准排列方式

容器名 必选 描述
一级 二级 三级 四级 五级 六级 - -
ftyp 文件类型
pdin 下载进度信息
moov 音视频数据的metadata信息
mvhd 电影文件头
trak 流的track
tkhd 流信息的track头
tref track参考容器
edts edit list 容器
elst edit list元素信息
mdia track里面的media 信息
mdhd media 信息头
hdlr media 信息的句柄
minf media 信息容器
vmhd 视频media头(只存在于视频的track)
smhd 音频media头(只存在于音频的track)
hmhd 提示meida头(只存在于提示的track)
nmhd 空media头(其他的track)
dinf 数据信息容器
dref 数据参考容器,track中media的参考信息
stbl 采样表容器,容器做时间与数据所在位置的描述
stsd 采样描述(codec类型与初始化信息)
stts (decoding)采样时间
ctts (composition)采样时间
stsc chunk采样,数据片段信息
stsz 采样大小
stz2 采样大小详细描述
stco Chunk 偏移信息,数据偏移信息
co64 64位Chunk 偏移信息
stss 同步采样表
stsh 采样同步表
padb 采样 padding
stdp 采样退化优先描述
sdtp 独立于可支配采样描述
sbgp 采样组
sgpd 采样组描述
subs 子采样信息
mvex 视频扩展容器
mehd 视频扩展容器头
trex track 扩展信息
ipmc IPMP控制容器
moof 视频分片
mfhd 视频分片头
traf track分片
tfhd track 分片头
trun track 分片run 信息
sdtp 独立和可支配的采样
sbgp 采样组
subs 子采样信息
mfra 视频分片访问控制信息
tfra track 分片访问控制信息
mfro 拼分片访问控制偏移量
mdat media 数据容器
free 空闲区域
skip 空闲区域
udta 用户数据
cprt copyright 信息
meta 元数据
hdlr 定义元数据的句柄
dinf 数据信息容器
dref 元数据的源参考信息
ipmc IPMP控制容器
iloc 所在位置信息容器
ipro 样本保护容器
sinf 计划信息保护容器
frma 原格式容器
imif IPMP 信息容器
schm 计划类型容器
schi 计划信息容器
iinf 容器所在项目信息
xml XML容器
bxml binary XML 容器
pitm 主要参考容器
fiin 文件发送信息
paen partition 人口
fpar 文件片段容器
fecr FEC reservoir
segr 文件发送 session 组信息
gitn 组id转名称信息
tsel track 选择信息
meco 追加的metadata 信息
mere metabox 关系

        MP4文件中的Box结构与表中描述的基本上一致,在MP4的描述标准中moov与mdat的存放位置前后并没有作强制要求,所以有时候moov被放在mdat的前面。而在互联网的视频点播中,若希望MP4被快速打开,则需要将moov存放在mdat的前面;如果放在后面,则需要将MP4文件下载完成后才可播放。

        1.moov容器

        moov容器定义了一个MP4文件中的数据信息,类型是moov,是一个Atom容器,必须至少包含以下三种Atom中的一种:

        •mvhd 标签, Movie Header Atom ,存放未压缩过的影片信息的头容器
        •cmov 标签, Compressed Movie Atom , 压缩过的电影信息容器,此容器不常用
        •rmra 标签, Reference Movie Atom , 参考电影信息容器,此容器不常用

        也可以包含其他容器信息,例如影片剪辑信息Clipping atom(clip)、一个或几个trakAtom(trak)、一个 Color Table Atom(ctab)和一个 User Data Atom(udta)。其中,mvhd 中定义了多媒体文件的 time scale 、 duration 以及 display characteristics 。而 trak 中定义了多媒体文件中的一个 track 的信息,track 是多媒体文件中可以独立操作的媒体单位,例如一个音频流就是一个 track 、一个视频流就是一个 track。

        在mvhd中定义了多媒体文件的time scale、duration以及display characteristics。而trak中定义了多媒体文件中的一个track的信息,track是多媒体文件中可以独立操作的媒体单位。

        用二进制查看工具打开一个MP4格式文件,如第一张图,我们可以看到moov容器类型位于(0x6D6F6F76),共包含0x00019689(104073)字节;moov的参数格式随下表所示。

【音视频开发】FFmpeg转换与封装 I - MP4格式

【音视频开发】FFmpeg转换与封装 I - MP4格式

        接着我们往下找可以发现下一个容器类型是mvhd,如图中蓝色标记所示,地址为0x6D766864,同时容器大小为0x0000006C

【音视频开发】FFmpeg转换与封装 I - MP4格式

         完成分析后,可以发现下个容器是一个trak标签,类型和容器大小在这里就不再标出和计算了。

【音视频开发】FFmpeg转换与封装 I - MP4格式

        最后便是udta容器(属于moov的子容器),这个udta容器的解析方式与前面解析trak的方式基本相同。

【音视频开发】FFmpeg转换与封装 I - MP4格式

        我们通过计算可以发现,udata+视频trak+音频trak+mvhd+moov描述大小之后得出来的总大小刚好与之前得出来的moov大小相等

        2.解析mvhd子容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        3.解析trak子容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        4.解析tkhd容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

【音视频开发】FFmpeg转换与封装 I - MP4格式

        5.解析mdia容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        6.解析mdhd容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        7.解析hdlr容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        8.解析minf容器

        待完成

        9.解析vmhd容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        10.解析smhd容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        11.解析dinf容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        12.解析stbl容器

        待完成

        13.解析edts容器

【音视频开发】FFmpeg转换与封装 I - MP4格式

        码文中……

欢迎阅读下一章 FFmpeg格式转换与封装 II - FLV格式【音视频开发】FFmpeg格式转换与封装 II - FLV格式https://blog.csdn.net/weixin_42839065/article/details/130682490?spm=1001.2014.3001.5502文章来源地址https://www.toymoban.com/news/detail-477758.html

到了这里,关于【音视频开发】FFmpeg转换与封装 I - MP4格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 「Python|音视频处理|场景案例」如何使用ffmpeg下载m3u8视频到本地并保存成mp4

    本文主要介绍如何使用ffmpeg批量下载视频到本地并保存成指定格式。 当我们希望将网页上的视频下载到本地的时候,我们可能获取到的视频地址是指向 .m3u8 格式的,当视频多的时候,手动下载并使用工具转换格式就显得工作量过大。 ffmpeg 是一个强大的音视频处理工具,具体

    2024年02月16日
    浏览(12)
  • Qt音视频开发47-文字和图片水印(可存储到MP4中)

    近期花了两周时间闭门啃硬骨头,主要就解决三个问题(音视频同步存储和推流、图片水印并将水印信息存储到文件或者推流、rtsp推流),这三个问题困扰了很多年,以至于找遍了网络和翻遍ffplay代码以及ffmpeg示例的代码,通过不下于上百次方案的调整和测试,几乎每次都是

    2024年02月16日
    浏览(13)
  • 【FFmpeg】ffmpeg 命令行参数 ⑧ ( 使用 ffmpeg 转换封装格式 | 音视频编解码器参数设置 | 视频 帧率 / 码率 / 分辨率 设置 | 音频 码率 / 采样率 设置 )

    【FFmpeg】ffmpeg 命令行参数 ⑧ ( 使用 ffmpeg 转换封装格式 | 音视频编解码器参数设置 | 视频 帧率 / 码率 / 分辨率 设置 | 音频 码率 / 采样率 设置 )

    音视频 文件 从 采样 - 处理 - 得到原始数据帧队列 - 音视频编码 - 音视频包队列 - 格式封装 的过程如下 : 封装格式 参考 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装

    2024年04月17日
    浏览(38)
  • 音视频八股文(10)-- mp4结构

    音视频八股文(10)-- mp4结构

    mp4⽂件格式⼜被称为MPEG-4 Part 14,出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器,⼴泛⽤于包装视频和⾳频数据流、海报、字幕和元数据等。(顺便⼀提,⽬前流⾏的视频编码格式AVC/H264 定义在MPEG-4 Part 10)。 mp4⽂件由box组成,每个box分为Header和Data。其中Header部分包含了

    2024年02月02日
    浏览(11)
  • Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/aac/pcm等

    用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw,将这个原始的音频流保存到mp4文件是会报错的,在调用avformat_write_header写文件头的时候提示(-22) Invalid argument,

    2024年04月11日
    浏览(8)
  • 音视频编码实战-------pcm+yuv数据转成MP4

    音视频编码实战-------pcm+yuv数据转成MP4

    avcodec_find_encoder: 根据编码器ID查找编码器 avcodec_alloc_context3:创建编码器上下文 avcodec_open2:打开编码器 avformat_alloc_output_context2:为输出格式创建复用器上下文 avformat_new_stream:创建音视频流 avcodec_parameters_from_context:将编码器上下文中的参数拷贝到音视频流中的编码器参数中AVCodec

    2024年02月15日
    浏览(16)
  • 音视频知识:MPEG-4、H264、MP4、AAC之间的关系

    MPEG-4 一种编码标准。是国际标准化组织 (ISO) 主要针对消费类应用,已经针对运动图像压缩定义的标准。MPEG(Moving Picture Experts Group)标准包括 MPEG1、MPEG2与 MPEG4。 MPEG-4标准目前分为27个部分,统称为ISO/IEC14496国际标准。其中第10部分(ISO/IEC 14496-10)就是熟悉的高级视频编码

    2024年02月14日
    浏览(11)
  • 【音视频笔记】Mediacodec+Muxer生成mp4,浏览器无法播放问题处理

    最近在测试视频录制功能时发现,AudioRecord + MediaCodec + MediaMuxer生成的MP4,PC浏览器无法播放 ,但是Android、Windows、Mac的播放器应用都能正常播放。虽然不禁想吐槽浏览器视频组件的容错性差,但我也意识生成的文件格式肯定也是有问题的。 然后尝试了合成MP4视频时,只保留视

    2024年02月07日
    浏览(41)
  • 音视频 ffmpeg命令转封装

    保持编码格式: 改变编码格式: 修改帧率: 修改视频码率: 修改视频码率: 修改音频码率: 修改音视频码率: 修改视频分辨率: 修改音频采样率: 推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储/golang云原生/音

    2024年02月10日
    浏览(10)
  • JavaScript音视频,使用JavaScript如何在浏览器录制电脑摄像头画面为MP4视频文件并下载视频文件到本地

    本章介绍使用JavaScript如何在浏览器录制电脑摄像头画面为MP4视频文件并下载视频文件到本地。 1、使用navigator.mediaDevices.getUserMedia获取摄像头画面 2、将获取到的摄像头画面渲染到canvas画板上 3、将canvas转换为blob对象 4、通过document.createElement(‘a’)调用 href 方法获取此链接并触

    2024年02月02日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包