1. MP4Muxer / MP4Demuxer

用于封装和分流 mp4

1.1 MP4Muxer

  • 导入文件必须是单纯的视频或者音频轨
  • 视频文件支持 H264 H265
  • 音频文件支持 AAC AC3 EC3 AC4



MP4Muxer 常用代码

代码用途
-i / --input-file导入文件 (一句代码一个文件)
--media-lang设定导入文件的语言
-o / --ouput-file输出文件
--overwrite输出目录下若有同名文件则直接覆盖
--dv-profile若要封装杜比视界,则需用来设定 profile
--dv-bl-compatible-id如果封装 profile 为 8 的杜比视界,则需用来设定兼容层的id



常见的杜比视界 Profile

Profile视频编码单层/双层向后兼容
410-bit H265双层SDR
510-bit H265单层/
710-bit H265双层UHD Blu-ray
8.110-bit H265单层HDR10
8.210-bit H265单层SDR
8.410-bit H265单层HLG
98-bit H264单层SDR


1.1.1 单层与双层的区别

杜比视界视频文件分为以下几层:

  • BL: Base Layer, 即基础层。基本为 YUV420 10-bit H265 HDR10 视频
  • RPU: Reference Processing Unit, 即指导层。杜比视界视频的元数据是动态的,所以需要RPU来告知设备如何好好地渲染BL层
  • EL: Enhancement Layer, 即增强层。用于将 BL 层扩展为 YUV422 12-bit 视频,让最终的渲染成品色阶更多,颜色更鲜艳,色彩过渡更自然 (长期处理色带的压制者的福音)


1.1.1.1 单层 ( single-layer ) = BL + RPU

通常为 Profile 5/8, 常用于流媒体或者支持单层杜比视界的电视的宣传展示用demo视频

Netflix / HBOMax / iQiYi / Youku 等流媒体提供的杜比视界就是 Profile 5 的单层杜比视界

(以后下载爱奇艺/优酷的杜比视界视频观看时别再问为什么发青发紫啦!)

Bilibili 等流媒体提供的杜比视界就是 Protile 8 的单层杜比视界。Bilibili 的向下兼容为 HLG


1.1.1.2 双层 ( dual-layer ) = BL + RPU + EL

通常为 Profile 7, 常用于 UHD Blu-ray


封装示例

  • 将 00.h264 和 01.ac3 封装成 mp4 并指定音频语言为国语
mp4muxer -i 00.h264 -i 01.ac3 --media-lang chi -o ouput.mp4
  • 将本是 profile 为 5 的杜比视界视频 02.h265 和两条音轨 03.ec3 04.ac3 封装成 mp4 并指定音频语言分别为英语和日语
mp4muxer -i 02.h265 -i 03.ec3 --media-lang en -i 04.ac3 --media-lang ja -o output.mp4 --dv-profile 5


1.2 MP4Demuxer

  • 导入文件必须是 mp4



MP4Demuxer 常用代码

代码用途
--input-file ( ※ 注意没有 -i)导入 mp4 文件
--output-folder ( ※ 注意没有 -o)设定输出文件目录
--time-ranges设定输出时间范围 (用法 --time-rangs A-B, A和B都是数字,单位为秒)
--verbose调试模式



分流示例

  • 将 01.mp4 分流到当前目录
mp4demuxer --input-file 01.mp4
  • 将 02.mp4 分流到 D 盘的 demux 文件夹,只分流 1 分种以后的内容
mp4demuxer --input-file 02.mp4 --output-folder D:/demux --time-rangs 60-


参考

  1. Dolby Vision wikipedia
  2. 通俗易懂的聊聊什么是单双层杜比视界 作者:Netflix_Watcher