bmx is a library and set of utilities to read and write the SMPTE ST 377-1 MXF file format.
bmx is used to support standardisation efforts in the broadcast industry. It provides utilities for creating standard compliant sample files. It serves as an example implementation for MXF file format standards.
bmx provides a set of commandline applications:
raw2bmx
: create MXF files from raw (unwrapped) essence filesbmxtranswrap
: re-wrap from one MXF file to another MXF filemxf2raw
: output MXF file metadata, extract raw essence, calculate MD5 etc.bmxparse
: text dumper for raw essence files that uses the bmx library's parser class
bmx provides a set of file format text dumper tools:
h264dump
: text dumper for raw H.264 bitstream filesmovdump
: text dumper for Quicktime / MP4 filesrdd36dump
: text dumper for SMPTE RDD 36 (Apple ProRes) bitstream filesvc2dump
: text dumper for SMPTE ST 2042 VC-2 bitstream filesMXFDump
: text dumper for MXF files from the AAF SDK. This utility is made available and built as part of libMXF.
The following input and output wrapper formats and flavours are supported:
- AMWA AS-02 MXF Versioning
- AMWA AS-10 MXF for Production
- AMWA AS-11 Media Contribution File Formats (MXF)
- SMPTE ST 378 MXF OP-1A
- SMPTE RDD 9 MXF MPEG Long GOP (Sony XDCAM)
- SMPTE ST 386 MXF D-10 (Sony MPEG IMX)
- Avid native MXF OP-Atom
- WAV
The following essence formats are supported:
- SMPTE RP 2027 AVC-Intra video, class 50 / 100 / 200
- SMPTE ST 356 D-10 video, 30 / 40 / 50 MBit/s
- DV video, 25 / 50 / 100 MBit/s
- MPEG-2 Long GOP video, 422P@HL, MP@HL (1920 and 1440) and MP@H14
- H.264 video
- SMPTE ST 2019 VC-3 video (Avid DNxHD)
- SMPTE ST 2042 VC-2 video
- SMPTE RDD 36 video (Apple ProRes)
- Uncompressed video, UYVY / v210
- Avid MJPEG video
- WAV PCM audio
- SMPTE ST 436 encapsulated ANC and VBI data
- IMSC 1 Timed Text
A number of topics are described in more detail in the docs/ directory, including the following:
- Timed Text: docs/timed_text.md
- ... todo
bmx is developed on Ubuntu Linux but is supported on other Unix-like systems using the autotools build system. A set of Microsoft Visual C++ project files are provided for Windows.
The following libraries must be installed to build bmx. The (Ubuntu) debian package names and versions are shown in brackets.
- libMXF (libmxf >= 1.0.3)
- libMXF++ (libmxf++ >= 1.0.3)
- uriparser (liburiparser-dev >= 0.7.2, <= 0.8).
- expat (libexpat1-dev >= 2.1)
- uuid, Unix-like systems only (uuid-dev)
The libcurl (libcurl4-openssl-dev >= 7.22.0) library is optional for Unix-like systems and provides support for reading MXF files over HTTP(S).
Install the development versions of the dependency libraries. The bmx library can then be built from source using autotools as follows,
./autogen.sh
./configure
make
Run configure as shown below to see a list of build configuration options,
./configure -h
Add the --with-curl
option to the configure line to include libcurl and
therefore support reading MXF files over HTTP(S).
If you get library link errors similar to "error while loading shared libraries" then run
sudo /sbin/ldconfig
to update the runtime linker cache. E.g. the libMXF library was built and installed previously and the linker cache needs to be updated with the result.
There are a number of regression tests that can be run using
make check
Finally, the library and utilities can be installed using
sudo make install
The Visual Studio 2010 build solution and project files can be found in the msvc_build/vs10 directory. These files can be upgraded to any more recent version when importing into the IDE.
The main build solution file is bmx.sln. It is used
to build the library and MXF applications. The build solution assumes the
following directories are present at the same directory level as bmx: libMXF/
,
libMXF++/
, uriparser/
and expat/
.
The source distributions will contain a copy of the expat and uriparser libraries. See Source and Binary Distributions below.
A local copy of the expat and uriparser project files are included in the bmx build directory, i.e. the project files in the external repository are not used. The build solution file will build the dependency libraries.
The build depends on the bmx_scm_version.h
header file in the root directory
to provide the most recent git commit identifier. This file is generated
automatically using the gen_scm_version.sh script when
building using autotools and is included in the source distribution package.
You are likely missing this file if you are using the source code directly from
the git repository then and will need to create it manually.
The tools.sln build solution file is used to build the text dumper tools.
Source distributions, including dependencies for the Windows build, and Windows binaries are made available on SourceForge.
The bmx library is provided under the BSD 3-clause license. See the COPYING file provided with this library for more details.