Convert Y4M to 3GPP — Free Online Tool
Convert Y4M (YUV4MPEG2) lossless uncompressed video to 3GPP format using H.264 video encoding and AAC audio — producing a compact, mobile-compatible file ready for 3G/4G streaming and playback on older handsets. Y4M's raw pixel data is encoded from scratch using libx264's CRF-based compression, making this a full encode rather than a simple remux.
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 pixel data frame-by-frame with no video compression whatsoever — every frame is a full uncompressed image. Converting to 3GPP requires a full video encode: FFmpeg reads each raw frame and passes it through the libx264 encoder, which applies inter-frame compression (P-frames and B-frames) to dramatically reduce file size. Because Y4M carries no audio stream by default, the AAC audio codec is specified but will only produce output if an audio source is somehow merged. The 3GP container itself is derived from the MPEG-4 Part 12 spec and is structurally similar to MP4, but with constraints targeting low-bandwidth mobile delivery. The -movflags +faststart flag rewrites the MP4/3GP metadata index to the front of the file, enabling progressive streaming without waiting for the full file to download.
What Each Flag Does
| Flag | What it does |
|---|---|
ffmpeg
|
Invokes the FFmpeg binary — the open-source multimedia processing engine that this browser tool runs via WebAssembly (FFmpeg.wasm), and that you can also run locally on your desktop for files larger than 1GB. |
-i input.y4m
|
Specifies the Y4M input file. FFmpeg reads the YUV4MPEG2 stream header to determine frame dimensions, framerate, and chroma subsampling, then decodes each raw uncompressed frame for encoding. |
-c:v libx264
|
Encodes the video stream using the libx264 H.264 encoder — transforming the uncompressed raw frames from the Y4M source into a compressed H.264 bitstream compatible with the 3GP container and mobile devices. |
-c:a aac
|
Encodes any audio stream present using the AAC codec, which is the standard audio format for 3GPP containers and is natively supported on all modern mobile platforms. Y4M files carry no audio, so this flag only activates if an audio stream is somehow present. |
-crf 23
|
Sets the Constant Rate Factor for the libx264 encode to 23, the default quality level. Because Y4M input is fully uncompressed and lossless, this CRF value determines the sole quality loss in the entire pipeline — lowering it toward 18 recovers more detail from the original raw frames at the cost of a larger 3GP file. |
-b:a 64k
|
Sets the AAC audio bitrate to 64 kilobits per second, appropriate for mobile speech and moderate-quality audio delivery over 3G connections. This can be raised to 128k if the source contains music or high-quality audio requiring greater fidelity. |
-movflags +faststart
|
Rewrites the 3GP file's MOOV atom (metadata index) to the beginning of the file after encoding completes. This is essential for mobile streaming, as it allows playback to begin before the entire file has been downloaded — without it, a viewer must wait for the full file to transfer before the first frame appears. |
output.3gp
|
Specifies the output filename with the .3gp extension, which tells FFmpeg to use the 3GPP container format. The resulting file will contain H.264 video and (if audio was present) AAC audio in a container optimized for mobile device compatibility. |
Common Use Cases
- Delivering raw video pipeline output — for example, from a rendering application or video synthesis tool that pipes Y4M — to a mobile-friendly 3GP file for review on a phone or older device
- Converting lossless intermediate Y4M frames captured by ffmpeg's rawvideo pipeline into a compact 3GP file for sharing over low-bandwidth connections or SMS-era MMS messaging
- Archiving uncompressed Y4M test patterns or synthetic video content generated by tools like libav or software video generators into a mobile-compatible format for field testing on handsets
- Converting Y4M output from scientific visualization or video processing research pipelines into 3GP for playback on embedded or legacy mobile hardware that only supports 3GPP codecs
- Packaging raw YUV4MPEG2 footage from open-source compositing tools (such as Blender's Y4M export) into a streamable 3GP file for deployment on mobile video platforms with 3G compatibility requirements
- Reducing massive uncompressed Y4M files produced during lossless editing workflows into lightweight 3GP deliverables for clients who need mobile-compatible previews without installing desktop video players
Frequently Asked Questions
Y4M stores every video frame as fully uncompressed raw YUV pixel data, meaning a single second of 1080p footage at 30fps can occupy hundreds of megabytes. The libx264 encoder used in this conversion applies sophisticated inter-frame compression, storing only the differences between frames rather than full images for every frame. With the default CRF 23 setting, the resulting 3GP file is typically 100x to 500x smaller than the Y4M source, depending on motion complexity and resolution.
Yes, this is a lossy conversion — libx264 introduces compression artifacts that don't exist in the uncompressed Y4M source. The quality is controlled by the CRF (Constant Rate Factor) value, where lower numbers mean higher quality and larger files, and higher numbers mean more compression. The default CRF 23 is a reasonable balance for mobile delivery; for higher fidelity from your lossless source, lower the CRF to 18 or 19. In the FFmpeg command, change -crf 23 to your preferred value.
Y4M is a video-only format and carries no audio data whatsoever. If your Y4M source has no accompanying audio, the output 3GP file will also have no audio track, regardless of the -c:a aac flag in the command. The AAC codec flag is specified for cases where an audio stream is present, but FFmpeg will simply omit the audio track if none exists in the input. You can add audio separately by including an additional audio input with the -i flag before the output filename.
The output 3GP file uses H.264 video and AAC audio inside a 3GPP container, which is supported by virtually all Android and iOS devices, most media players (VLC, Windows Media Player with codec packs, QuickTime), and older 3G-era feature phones. The -movflags +faststart flag also ensures the file streams progressively in web players and messaging apps. Some very old 3G devices may only support MPEG-4 Part 2 (not H.264) video, in which case you would need to substitute -c:v mpeg4 in the command.
To adjust video quality, change the -crf value: lower numbers like -crf 18 produce near-transparent quality with larger files, while -crf 28 produces heavily compressed output suitable for very low bandwidth. To adjust audio bitrate, change -b:a 64k to a higher value like -b:a 128k for better audio fidelity. For a Y4M source that was losslessly produced from high-quality footage, a CRF of 20-22 is recommended to preserve more of the original detail during the encode.
Yes. On Linux or macOS, you can use a shell loop: for f in *.y4m; do ffmpeg -i "$f" -c:v libx264 -c:a aac -crf 23 -b:a 64k -movflags +faststart "${f%.y4m}.3gp"; done. On Windows PowerShell, use: Get-ChildItem *.y4m | ForEach-Object { ffmpeg -i $_.FullName -c:v libx264 -c:a aac -crf 23 -b:a 64k -movflags +faststart ($_.BaseName + '.3gp') }. Note that encoding from uncompressed Y4M is CPU-intensive, so batch jobs on large files will take significant time.
Technical Notes
Y4M files present a unique encoding challenge: because every frame is fully uncompressed, the libx264 encoder has access to perfect lossless input quality with no prior compression artifacts to compound. This means the CRF setting has its full intended effect, and reducing CRF to 18 will genuinely produce near-lossless perceptual quality. However, Y4M files can be enormous — a single minute of 1080p30 Y4M can exceed 40GB — so this browser-based tool's 1GB input limit will restrict Y4M conversion to short clips or lower-resolution content; for longer Y4M sequences the displayed FFmpeg command should be run locally. Y4M encodes the chroma subsampling format (typically 4:2:0 or 4:4:4) in its stream header, and FFmpeg will correctly pass this through to libx264; if your Y4M source uses 4:4:4 chroma and maximum color fidelity matters, consider adding -pix_fmt yuv444p to the command. The 3GP container does not support subtitles, chapter markers, or multiple audio tracks, so none of these can be added during conversion. Metadata fields present in other source formats are not applicable here since Y4M carries no metadata beyond basic frame geometry and framerate.