Convert Y4M to MXF — Free Online Tool
Convert Y4M (YUV4MPEG2) lossless uncompressed video to MXF, a professional broadcast container, encoding the raw video stream with H.264 (libx264) and wrapping it for use in NLEs and broadcast workflows. This tool runs entirely in your browser — no upload required.
to
FFmpeg Command
Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg
Drop your Y4M file here
or click to browse
Free — no uploads, no signups. Your files never leave your browser.
Settings
Note: Browser-based encoding uses approximate quality targets. For precise CRF compression, copy the FFmpeg command above and run it on your desktop.
Estimated output:
Conversion Complete!
DownloadHow It Works
Y4M files store raw, uncompressed YUV video frames with no inter-frame compression, making them very large but pixel-perfect. During this conversion, FFmpeg reads each raw YUV frame and encodes it using the libx264 H.264 encoder at CRF 23 — a visually high-quality lossy compression setting. Because Y4M carries no audio, the audio codec flag (pcm_s16le) is included for MXF compatibility but will produce no audio stream unless your Y4M source has one. The encoded video is then wrapped in the MXF container, which adds professional metadata structures including timecode support, making the output suitable for ingestion into broadcast systems and professional NLEs like Avid Media Composer or Adobe Premiere.
What Each Flag Does
| Flag | What it does |
|---|---|
ffmpeg
|
Invokes the FFmpeg binary — the open-source multimedia processing engine that powers this conversion both in the browser (via FFmpeg.wasm) and locally on your desktop. |
-i input.y4m
|
Specifies the input file in Y4M (YUV4MPEG2) format. FFmpeg reads the Y4M header to determine frame size, frame rate, and chroma subsampling (e.g., 4:2:0), then streams the raw uncompressed YUV frames into the encoding pipeline. |
-c:v libx264
|
Encodes the raw YUV video frames from the Y4M source using the H.264 codec via libx264. This transforms the uncompressed pixel data into a spatially and temporally compressed stream suitable for embedding in a professional MXF container. |
-c:a pcm_s16le
|
Sets the audio codec to uncompressed 16-bit little-endian PCM, the standard lossless audio format for professional MXF files. Since Y4M carries no audio, this flag primarily ensures the MXF output is structured correctly for broadcast workflows that expect an audio codec declaration. |
-crf 23
|
Sets the H.264 Constant Rate Factor to 23, FFmpeg's default quality level, which produces visually high-quality output with significant file size reduction from the uncompressed Y4M source. Lower values (e.g., 15 or 18) increase quality and file size; higher values (e.g., 28–35) reduce file size at the cost of more visible compression. |
-b:a 192k
|
Specifies a 192 kbps audio bitrate target. While this flag is relevant when using a lossy audio codec like AAC, it is included here alongside pcm_s16le for completeness; PCM audio in MXF is uncompressed and its size is determined by sample rate and bit depth, not a bitrate target. |
output.mxf
|
Defines the output filename and triggers FFmpeg to write an MXF container (Material Exchange Format). FFmpeg detects the MXF format from the .mxf extension and writes an OP1a-compliant MXF file containing the H.264 video stream, ready for broadcast ingest or professional NLE import. |
Common Use Cases
- Delivering Y4M output from an open-source VFX or compositing pipeline (such as Blender or Natron) into a broadcast post-production facility that requires MXF ingest
- Converting lossless Y4M intermediate renders from tools like FFmpeg's lavfi filters or rawvideo pipelines into a broadcast-safe MXF file for archival or delivery
- Preparing Y4M files generated by video codec test suites or quality benchmarking tools for review in professional NLEs that prefer MXF containers
- Wrapping a Y4M capture from a video test signal generator into MXF format for use in broadcast QC (quality control) workflows
- Converting Y4M output from open-source encoders or scientific imaging pipelines into MXF for import into systems like Grass Valley EDIUS or Sony Catalyst
- Reducing the enormous file size of uncompressed Y4M footage to a manageable H.264-in-MXF file for sharing with a post-production team while retaining a professional container format
Frequently Asked Questions
Yes — this conversion is lossy. Y4M stores raw, uncompressed YUV data, so every pixel is preserved exactly. The output MXF uses H.264 at CRF 23, which is visually high quality but does introduce compression artifacts, particularly in high-detail or high-motion scenes. If you need to preserve absolute losslessness, you could modify the FFmpeg command to use CRF 0 (lossless H.264) or switch the video codec to mpeg2video with a high bitrate, depending on your MXF receiver's requirements.
Y4M is completely uncompressed — a single minute of 1080p Y4M at 24fps can easily exceed 10GB. H.264 at CRF 23 typically achieves compression ratios of 50:1 to 200:1 depending on content complexity, so dramatic file size reduction is expected and intentional. The visual quality at CRF 23 is generally indistinguishable from the source at normal viewing distances, even though the bitrate is a tiny fraction of the original.
Yes. Y4M is a video-only format and carries no audio streams. FFmpeg will produce a valid MXF file with only the H.264 video track. The -c:a pcm_s16le flag in the command is included for MXF structural compatibility but will simply produce no audio track if none exists in the source. Most professional NLEs and broadcast ingest systems handle video-only MXF files without issue.
Change the -crf value in the command. CRF (Constant Rate Factor) ranges from 0 (lossless) to 51 (worst quality), with 23 as the default. For broadcast delivery where quality is critical, try CRF 15 or 18 for visually near-lossless output. For smaller files where some quality loss is acceptable, CRF 28 or 35 will significantly reduce file size. For example: ffmpeg -i input.y4m -c:v libx264 -c:a pcm_s16le -crf 18 -b:a 192k output.mxf
H.264-wrapped MXF is supported by many professional NLEs, but compatibility varies. Avid Media Composer natively prefers DNxHD/DNxHR-encoded MXF and may require transcoding H.264 MXF on import. Adobe Premiere Pro and DaVinci Resolve handle H.264 MXF more readily. If you specifically need Avid-native MXF, consider changing the video codec to mpeg2video (a supported MXF codec in the tool) which has broader compatibility with Avid and broadcast ingest servers.
Yes. On Linux or macOS, you can use a shell loop: for f in *.y4m; do ffmpeg -i "$f" -c:v libx264 -c:a pcm_s16le -crf 23 -b:a 192k "${f%.y4m}.mxf"; done. On Windows Command Prompt, use: for %f in (*.y4m) do ffmpeg -i "%f" -c:v libx264 -c:a pcm_s16le -crf 23 -b:a 192k "%~nf.mxf". The browser-based tool processes one file at a time, but the FFmpeg command is ideal for batch processing large collections of Y4M files locally.
Technical Notes
Y4M encodes pixel data as planar YUV (most commonly YUV 4:2:0, though 4:2:2 and 4:4:4 variants exist), and FFmpeg correctly reads the chroma subsampling and frame rate metadata embedded in the Y4M header. When encoding to H.264 via libx264, FFmpeg will preserve the source chroma subsampling where H.264 supports it (4:2:0 is standard; 4:2:2 and 4:4:4 require the High 4:2:2 or High 4:4:4 Predictive profiles, which may reduce compatibility). The MXF container supports timecode tracks, and FFmpeg will attempt to write a timecode track based on the stream's start time, though Y4M sources typically have no embedded timecode, so the MXF timecode will default to 00:00:00:00. MXF also supports rich operational pattern metadata; FFmpeg writes OP1a-compliant MXF by default, which is the most broadly compatible pattern for single-stream content. Note that Y4M carries no color space metadata beyond basic YUV, so broadcast color range flags (BT.709, full vs. limited range) are not preserved automatically — if your source was graded to a specific color standard, you may need to add explicit -colorspace, -color_range, and -color_trc flags to the command to ensure accurate display in downstream systems.