前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg使用手册 - ffmpeg对MP4的生成与处理

FFmpeg使用手册 - ffmpeg对MP4的生成与处理

作者头像
用户3765803
发布2019-03-05 09:38:54
4.5K0
发布2019-03-05 09:38:54
举报
文章被收录于专栏:悟空被FFmpeg玩

可以分析MP4封装格式的工具比较多除了FFmpeg之外,还有一些常用工具,例如Elecard Stream Eye、MP4BOX、mp4info等;下面简单介绍一下这几款常见工 具: 8.1 Elecard Stream Eye 8.2 mp4box mp4box是GPAC项目中的一个组件,可以通过mp4box针对媒体文件进行合成,拆解等操作,其操作信息大概如下:

下面可以使用mp4box分析一下output.mp4的信息,内容如下:

8.3 mp4info mp4info也是一个不错的mp4分析工具,而且是可视化的工具,可以将mp4文件中的各box接触出来,并将其中的数据展现出来,分析mp4内容时使用mp4info将会更方便:

8.4 MP4在ffmpeg中的demuxer 通过查看ffmpeg的help信息,可以看到mp4的demuxer与mov、3gp、m4a、3g2、mj2的demuxer相同,解析mp4文件时参数如下:

参数

类型

说明

use_absolute_path

布尔

可以通过绝对路径加载外部的tracks,可能会有安全因素的影响,默认不开启

seek_streams_individually

布尔

根据单独流进行seek,默认开启

ignore_editlist

布尔

忽略EditList Atom信息,默认不开启

ignore_chapters

布尔

忽略Chapters信息,默认不开启

enable_drefs

布尔

外部track支持,默认不开启

8.5 MP4在ffmpeg中的muxer 在前面一节提到,mp4与mov、3gp、m4a、3g2、mj2的demuxer相同,而muxer中差别不大,但是是不同的muxer,尽管在ffmpeg中都是使用的同一套format进行的Mux与Demux。Mp4的mux相对demux来说稍微复杂一些,因为要封装的时候可选参数多一些,可以通过下表了解相关的参数:

参数

说明

movflags

MP4 Muxer 标记

rtphint

增加RTP的hint track

empty_moov

初始化空的moov box

frag_keyframe

在视频关键帧处切片

separate_moof

每一个Track写独立的moof / mdat box

frag_custom

每一个caller请求时Flush一个片段

isml

创建实时流媒体(创建一个直播流发布点)

faststart

将moov box移动到文件的头部

omit_tfhd_offset

忽略tfhd容器中的基础数据偏移

disable_chpl

关闭Nero Chapter容器

default_base_moof

在tfhd容器中设置default-base-is-moof标记

dash

兼容DASH格式的mp4分片

frag_discont

分片不连续式设置discontinuous信号

delay_moov

延迟写入moov信息,直到第一个分片切出来,或者第一片被刷掉

global_sidx

在文件的开头设置公共的sidx索引

write_colr

写colr容器

write_gama

写被弃用的gama容器

moov_size

正整数

设置moov容器的最大大小

rtpflags

设置rtp传输相关的标记

latm

使用MP4A-LATM方式传输AAC音频

rfc2190

使用RFC2190传输H.264H.263

skip_rtcp

忽略使用RTCP

h264_mode0

使用RTP传输mode0的H264

send_bye

当传输结束时发送RTCP的BYE包

skip_iods

布尔型

不写入iods容器

iods_audio_profile

0-255

设置iods的音频profile容器

iods_video_profile

0-255

设置iods的视频profile容器

frag_duration

正整数

切片最大的duration

min_frag_duration

正整数

切片最小的duration

frag_size

正整数

切片最大的大小

ism_lookahead

正整数

预读取ISM文件的数量

video_track_timescale

正整数

设置所有视频的时间计算方式

brand

字符串

写major brand

use_editlist

布尔型

使用edit list

fragment_index

正整数

下一个分片编号

mov_gamma

0-10

Gama容器的gama值

frag_interleave

正整数

交错分片样本

encryption_scheme

字符串

配置加密的方案

encryption_key

二进制

秘钥

encryption_kid

二进制

秘钥标识符

8.6 faststart使用案例 正常情况下ffmpeg生成moov是在mdat写完成之后写入,可以通过参数faststart将moov容器移动至mdat前面,下面参考一个例子: ffmpeg –i input.flv –c copy –f mp4 output.mp4 然后使用mp4info查看output.mp4的容器出现顺序

可以看到上图中moov容器是在mdat的下边,如果使用参数faststart就会在生成完上边结构之后将moov移动到mdat前面: ffmpeg –i input.flv –c copy –f mp4 –movflags faststart output.mp4然后使用mp4info查看mp4的容器顺序,可以看到moov被移动到了mdat前面。

8.7 dash参数使用案例 当使用生成dash格式的时候,里面使用的一种特殊的mp4格式,可以通过dash参数进行生成: ffmpeg –i input.flv –c copy –f mp4 –movflags dash output.mp4 使用mp4info查看容器格式信息,稍微有些特殊,具体的信息在前面均有介绍

8.8 isml 参数使用案例 ismv为微软发布的一个流媒体格式,通过参数isml可以发布isml直播流,将ismv推流至IIS服务器,可以通过参数isml参数进行发布: ffmpeg -re -i INUPT.mp4 -c copy -movflags isml+frag_keyframe -f ismv http://192.168.0.1/publish.isml/Stream 可以观察Stream的格式,大致如下:

生成的文件格式的原理类似HLS,使用的XML格式进行索引,然后刷新切片内容进行直播。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/08/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档