libopx 2.0.0
See the version list below for details.
dotnet add package libopx --version 2.0.0
NuGet\Install-Package libopx -Version 2.0.0
<PackageReference Include="libopx" Version="2.0.0" />
<PackageVersion Include="libopx" Version="2.0.0" />
<PackageReference Include="libopx" />
paket add libopx --version 2.0.0
#r "nuget: libopx, 2.0.0"
#:package libopx@2.0.0
#addin nuget:?package=libopx&version=2.0.0
#tool nuget:?package=libopx&version=2.0.0
libopx
A .NET 9 C# library for parsing and extracting data from MXF (Material Exchange Format) files and extracted data streams, VBI (Vertical Blanking Interval), and T42 (Teletext packet stream) files, with SMPTE timecode and Teletext caption support.
Features
- Multi-format support: MXF, extracted data streams, VBI, and T42 file parsing
- Format conversion: Automatic VBI ↔ T42 conversion, plus RCWT and EBU STL output
- Teletext filtering: Magazine and row-based filtering with Unicode mapping
- SMPTE timecode: Full timecode calculations with various frame rates
- MXF processing: Stream extraction and demuxing capabilities
- CLI tool: Unified
opxcommand-line interface - Subtitle formats: RCWT (Raw Captions With Time) and EBU STL (EBU-Tech 3264) export
Format conversions: Convert between HD and SD T42 and VBI formats or vice versa. You can even pipe that data to other applications like ffmpeg or mpv.

ANSI Escaped Teletext: Supports parsing and filtering of teletext data with ANSI escape sequences:

Quick Start
Installation
Add the package reference to your project file from NuGet.org.
dotnet add package libopx
Or download the latest release from GitHub Releases.
Using the CLI Tool
# Filter teletext data by magazine and rows
opx filter -m 8 -r 20,22 input.vbi
# Convert between formats (use -of / --output-format)
opx convert -of t42 input.vbi
# Convert to EBU STL subtitle format
opx convert -of stl -c input.mxf output.stl
# Extract streams from MXF files
opx extract -k d,v input.mxf
Using the Library
using nathanbutlerDEV.libopx.Formats;
// Parse and filter teletext data
using var vbi = new VBI("input.vbi");
foreach (var line in vbi.Parse(magazine: 8, rows: new[] { 20, 22 }))
{
Console.WriteLine(line);
}
Documentation
- Library Documentation - Detailed API reference and usage examples
- CLI Tool Documentation - Complete command reference and examples
Project Structure
libopx/
├── apps/opx/ # CLI tool
├── lib/ # Main library
│ ├── Formats/ # Format parsers (MXF, MXF data stream, VBI, T42)
│ ├── SMPTE/ # SMPTE metadata system
│ └── Enums/ # Enumeration definitions
├── samples/ # (Deprecated in repo) Obtain sample media from Release
│ assets (e.g. v1.0.0) and place here if needed
├── scripts/ # Development scripts
└── tests/ # xUnit test suite
Development
# Clone and build
git clone https://github.com/nathanpbutler/libopx
cd libopx
dotnet build
# Run tests
dotnet test
Requirements
- .NET 9 or later
- Supported platforms: Windows, Linux, macOS
Dependencies
- System.CommandLine (v2.0.0-rc.2.25502.107)
- xUnit (testing)
- coverlet (code coverage)
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
License
MIT - see the LICENSE file for details.
Acknowledgments
- vhs-teletext - Software to recover teletext data from VHS recordings (inspiration for
filtercommand) - MXFInspect - Tool for displaying the internal structure of MXF files (was super helpful for understanding MXF parsing and the intricacies of SMPTE timecodes)
- bmxtranswrap - BBC's MXF processing library and utilities (inspiration for
extractcommand) - SubtitleEdit - An incredibly useful C# library and software for subtitle editing and processing
- CCExtractor - Closed caption and subtitle extraction and processing
- ffmpeg - The swiss army knife of multimedia processing
Support
For questions and support, please open an issue.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.4.2 | 113 | 1/25/2026 |
| 2.4.1 | 107 | 1/25/2026 |
| 2.4.0 | 109 | 1/24/2026 |
| 2.3.0 | 137 | 1/9/2026 |
| 2.2.0 | 343 | 11/7/2025 |
| 2.1.2 | 340 | 11/4/2025 |
| 2.1.1 | 348 | 10/30/2025 |
| 2.1.0 | 339 | 10/30/2025 |
| 2.0.0 | 343 | 10/30/2025 |
| 1.4.0 | 332 | 9/2/2025 |
| 1.3.0 | 305 | 8/17/2025 |
| 1.2.0 | 258 | 8/16/2025 |
| 1.1.0 | 355 | 8/13/2025 |
| 1.0.0 | 250 | 8/3/2025 |
v2.0.0: Major release with EBU STL (EBU-Tech 3264) and RCWT format support. Breaking change: BIN class refactored to MXFData nested class. Fixed critical row filtering bug affecting all output formats. Migrated from Git LFS to GitHub releases (99% repository size reduction). Enhanced header writing framework and sample file management with OPX_SAMPLES_VERSION environment variable support.