目录
项目主页:http://code.google.com/p/ffmbc/
一、什么是MXF文件?
MXF(全称Material Exchange Format)是一种视频/音频容器格式,该格式由SMPTE标准定义,解决了非专业格式出现的问题。目前主要是应用在专业的摄像机中,用来存储视频、音频和其他数据。松下HVX200、佳能XF300 / XF305、索尼XDCAM等许多专业的便携式摄像机都是使用MXF格式。MXF格式与大量的编辑工具(包括Windows Movie Maker/iMovie)、播放器和设备都不兼容。如果您想播放该格式的视频只能转换格式或使用支持该编码格式的播放器。将MXF格式转换为其他流行的视频格式,您可以更加容易地播放和编辑MXF文件,若您是要在安卓手机、iPhone、iPad、iPod等移动设备上使用,最好是将其转换为MP4格式。
MXF是松下、索尼、佳能等专业数码摄像机中常见的视频格式,但在计算机以及移动播放设备的支持率不高。本文将主要介绍什么是MXF文件,MXF文件结构以及使用工具编码生成MXF格式的视频。
二、如何播放MXF文件
MXF格式的普及率不高,甚至有很多人都不知道这种格式,所以支持该视频格式的播放器不多。能打开MXF文件的软件有:
三、文件结构
MXF文件包括三个主体部分:文件头、文件体和文件尾。
文件头提供文件的整体信息,包括用于解码文件中所有视音频数据的解码器列表等。文件体由存储在要素容器中的视音频数据组成,来自不同数据轨(如视频、音频和时码)的要素容器可能交错和分离地存储在文件体中。文件尾用以结束一个MXF文件,包括一些在产生文件头时还不确定的信息,如文件的视音频长度等,文件尾的信息在某些场景中常常被忽略。
MXF文件也可包含一个可选的索引表(Index Table),该索引表可用于将基于采样的索引(如时码)快速换算到对应的要素容器在<spanlang="en-us>">MXF文件中的偏移地址,以实现视音频的快速预览和定位。该索引表可分段存储,可位于基本数据段之前或之后,也可分插到基本数据段中间。
MXF文件的所有数据都采用Key-Length-Value(KLV)进行编码以获得格式的灵活性和可扩展性,KLV编码标准定义在SMPTE 336M中。实际上MXF文件就是若干连续KLV数据包的序列(除了可选的RUN-IN包)。
the key identifies the data, the length specifies the length of the data, and the value is the data itself
- Key:16字节的标识符。
- Length:数据(Value域)长度。BER(basic encoding rules )编码方式,如83 00 00 88。
它使用可变长的字节来表示非常宽的长度范围,该域总是按MSB(高字节优先)编码,如果第一个字节的bit7为0,那么低7位代表了0~127范围的长度,如果bit7为1,那么低7位代表长度域的字节个数。
- Value:KLV单元中包含的数据
四、使用ffmbc生成MXF格式视频
ffmbc 全称是 FFMedia Broadcast,是个改版的FFmpeg,有如下功能:
创建可以导入Final Cut Pro, AVID Media Composer, Adobe Premiere中的文件
创建 XDCAM HD422 文件(.mov 或 .mxf)
创建 XDCAM IMX/D-10 文件(.mov 或 .mxf)
创建 AVID DNxHD 文件(.mov)
创建 DVCPROHD 文件(.mov 或 .mxf)
创建 ProRes 422 or 4444 文件(.mov)
转换 V210 文件
转换 HD YUV BT709 到 SD BT601 或者反过来
转换 AVCIntra 50 和AVCIntra 100
转换 MPEG-TS 文件
转换 AVCHD 文件
转换 ProRes 422 和 4444 文件
合并或分离音轨
创建 Quicktime 文件
从 HD 到 SD的颜色转换
等等。。。
项目主页:http://code.google.com/p/ffmbc/
32位64位下载地址:
https://download.csdn.net/download/u014162133/13117338
1. 编码IMX
编码视频为 IMX 30/50 MXF 或 MOV
1.1.命令行格式
输出Imx30
ffmbc -i < file > -target imx30 < file.mxf | file.mov >
输出Imx50
ffmbc -i < file > -target imx50 < file.mxf | file.mov >
注意:在MXF中,XDCAM要求至少为4声道。所以如果输入文件的音频流小于4声道,输出文件依然会被标记为4声道。
Target命令支持以下格式:"vcd", "svcd", "dvd", "dvcam", "dvcpro", "dvcpro50", "dvcprohd", "imx30", "imx50", "xdcamhd422"
1.2.示例
命令(转码为IMX30,MXF格式):
ffmbc -i test.flv -target imx30 test.mxf
转码前文件格式:
概要
完整名称 : E:\test\test.flv
文件格式 : Flash Video
文件大小 : 2.24 MiB
长度 : 30秒 0ms
平均混合码率 : 627 Kbps
视频
文件格式 : Sorenson Spark
编码设置ID : 2
长度 : 30秒 0ms
码率 : 562 Kbps
画面宽度 : 320像素
画面高度 : 180像素
画面比例 : 16:9
帧率模式 : 恒定
帧率 : 25.000 fps
位深度 : 8位
bits/(pixel*frame)(数据密度) : 0.390
大小 : 2.01 MiB (90%)
音频
文件格式 : MPEG Audio
格式版本 : Version 1
格式简介 : Layer 3
模式 : Joint stereo
扩展模式 : MS Stereo
编码设置ID : 2
编码设置ID/提示信息 : MP3
长度 : 29秒 858ms
码率模式 : CBR
码率 : 32.0 Kbps
声道 : 2声道
采样率 : 44.1 KHz
压缩模式 : 有损压缩
大小 : 117 KiB (5%)
编码函数库 : LAME3.98
转码后MXF文件格式(IMX30):
概要
完整名称 : E:\test\test.mxf
文件格式 : MXF
Format_Commercial_IfAny : IMX 30
格式简介 : OP-1a
格式设置 : Closed / Complete
文件大小 : 152 MiB
长度 : 30秒 0ms
平均混合码率 : 42.6 Mbps
编码日期 : 2014-07-23 02:56:14.000
编码程序 : FFmbc OP1a Muxer 53.6.0
编码函数库 : FFmbc OP1a Muxer 53.6.0
视频
ID : 2
文件格式 : MPEG Video
Format_Commercial_IfAny : IMX 30
格式版本 : Version 2
格式简介 : 4:2:2@Main
格式设置, BVOP : 否
格式设置, Matrix : 默认
格式设置, GOP : N=1
Format_Settings_Wrapping : Frame (D-10)
编码设置ID : 0D01030102010501-0401020201020105
长度 : 30秒 0ms
码率 : 30.3 Mbps
最大码率 : 30.0 Mbps
画面宽度 : 720像素
画面高度 : 576像素
原始高度 : 608像素
画面比例 : 16:9
帧率 : 25.000 fps
标准 : Component
色彩空间 : YUV
色度抽样 : 4:2:2
位深度 : 8位
扫描方式 : 隔行扫描
扫描顺序 : 奇数场(前场TFF)优先
压缩模式 : 有损压缩
bits/(pixel*frame)(数据密度) : 2.923
TimeCode_FirstFrame : 00:00:00:00
TimeCode_Source : Group of pictures header
大小 : 108 MiB (71%)
颜色初选 : BT.601 PAL
传输特质 : BT.709
矩阵系数 : BT.601
音频
ID : 3
文件格式 : PCM
格式设置, Endianness : Little
Format_Settings_Wrapping : Frame (D-10)
编码设置ID : 0D01030102010501
长度 : 30秒 0ms
码率模式 : CBR
码率 : 12.3 Mbps
声道 : 4声道
采样率 : 48.0 KHz
位深度 : 16位
大小 : 43.9 MiB (29%)
其它 #1
ID : 1
Type : Time code
文件格式 : MXF TC
TimeCode_FirstFrame : 00:00:00:00
TimeCode_Settings : Striped
其它 #2
Type : Time code
文件格式 : SMPTE TC
混合模式 : SDTI
TimeCode_FirstFrame : 00:00:00:00
2.编码XDCAMHD422
将视频编译为 XDCAMHD422 MXF或MOV
隔行编码:-target 前面添加-tff 或 -bff
ffmbc -i < file > -target xdcamhd422 < file.mxf >
注意:XDCAM要求至少2个单声道。使用-newaudio 和 -map_audio_channel.
举个例子,如下命令将一个立体声的视频转换为两个单声道的视频:
ffmbc -i < file > -target xdcamhd422 -an < file.mxf > -acodec pcm_s24le -ar 48000 -newaudio -acodec pcm_s24le -ar 48000 -newaudio -map_audio_channel 0:1:0:0:1:0 -map_audio_channel 0:1:1:0:2:0
2.1.命令行格式
ffmbc -i < file > -target xdcamhd422 -vtag < tag > < file.mov >
tag有如下选项:
* "xd54" XDCAM HD422 720p24 CBR
* "xd59" XDCAM HD422 720p60 CBR
* "xd5a" XDCAM HD422 720p50 CBR
* "xd5b" XDCAM HD422 1080i60 CBR
* "xd5c" XDCAM HD422 1080i50 CBR
* "xd5d" XDCAM HD422 1080p24 CBR
* "xd5e" XDCAM HD422 1080p25 CBR
* "xd5f" XDCAM HD422 1080p30 CBR
2.2.示例
命令
ffmbc -i test.flv -s 1280x720 -ac 1 -target xdcamhd422 test_xdcamhd422.mxf
注:
1.只支持单声道,如果输入文件为多声道,则会出现如下错误提示:
Error, target xdcamhd422 only supports mono audio tracks
可以通过添加-ac 1,将输入文件转换为单声道。
2.只支持输入为1920x1080或者1280x720格式,其他分辨率不支持。如果输入文件为其他分辨率,则会出现如下错误提示:
Error, target xdcamhd422 only supports 1920x1080 or 1280x720 resolutions
可以通过分辨率变换,将输入文件分辨率转换为1920x1080或者1280x720。
转码前文件格式:
概要
完整名称 : E:\test\test.flv
文件格式 : Flash Video
文件大小 : 2.24 MiB
长度 : 30秒 0ms
平均混合码率 : 627 Kbps
视频
文件格式 : Sorenson Spark
编码设置ID : 2
长度 : 30秒 0ms
码率 : 562 Kbps
画面宽度 : 320像素
画面高度 : 180像素
画面比例 : 16:9
帧率模式 : 恒定
帧率 : 25.000 fps
位深度 : 8位
bits/(pixel*frame)(数据密度) : 0.390
大小 : 2.01 MiB (90%)
音频
文件格式 : MPEG Audio
格式版本 : Version 1
格式简介 : Layer 3
模式 : Joint stereo
扩展模式 : MS Stereo
编码设置ID : 2
编码设置ID/提示信息 : MP3
长度 : 29秒 858ms
码率模式 : CBR
码率 : 32.0 Kbps
声道 : 2声道
采样率 : 44.1 KHz
压缩模式 : 有损压缩
大小 : 117 KiB (5%)
编码函数库 : LAME3.98
转码后文件格式:
概要
完整名称 : E:\test\test_xdcamhd422.mxf
文件格式 : MXF
Format_Commercial_IfAny : XDCAM HD422
格式简介 : OP-1a
格式设置 : Closed / Complete
文件大小 : 182 MiB
长度 : 30秒 0ms
平均混合码率 : 51.0 Mbps
编码日期 : 2014-07-23 03:23:12.000
编码程序 : FFmbc OP1a Muxer 53.6.0
编码函数库 : FFmbc OP1a Muxer 53.6.0
视频
ID : 2
文件格式 : MPEG Video
Format_Commercial_IfAny : XDCAM HD422
格式版本 : Version 2
格式简介 : 4:2:2@High
格式设置, BVOP : 是
格式设置, Matrix : 默认
格式设置, GOP : M=3, N=12
Format_Settings_Wrapping : Frame
编码设置ID : 0D01030102046001-0401020201040300
长度 : 30秒 0ms
码率 : 50.0 Mbps
画面宽度 : 1 280像素
画面高度 : 720像素
画面比例 : 16:9
帧率 : 25.000 fps
标准 : Component
色彩空间 : YUV
色度抽样 : 4:2:2
位深度 : 8位
扫描方式 : 逐行扫描
压缩模式 : 有损压缩
bits/(pixel*frame)(数据密度) : 2.170
TimeCode_FirstFrame : 00:00:00:00
TimeCode_Source : Group of pictures header
大小 : 179 MiB (98%)
颜色初选 : BT.709
传输特质 : BT.709
矩阵系数 : BT.709
音频
ID : 3
文件格式 : PCM
格式设置, Endianness : Little
Format_Settings_Wrapping : Frame (AES)
编码设置ID : 0D01030102060300
长度 : 30秒 0ms
码率模式 : CBR
码率 : 768 Kbps
声道 : 1声道
采样率 : 48.0 KHz
位深度 : 16位
大小 : 2.75 MiB (2%)
其它 #1
ID : 1
Type : Time code
文件格式 : MXF TC
TimeCode_FirstFrame : 00:00:00:00
TimeCode_Settings : Striped
其它 #2
Type : Time code
文件格式 : SMPTE TC
混合模式 : SDTI
TimeCode_FirstFrame : 00:00:00:00
参考文章:
https://code.google.com/archive/p/ffmbc/
https://www.thinbug.com/q/19263601
https://blog.csdn.net/leixiaohua1020/article/details/19020203