Compress 3GPP Online — Free File Size Reducer
Compress a 3GPP (.3gp) file into a smaller 3GPP file using H.264 video encoding and AAC audio, optimized for mobile streaming and 3G network delivery. Ideal for reducing file size while keeping the format fully compatible with mobile devices and legacy handsets.
to
FFmpeg Command
Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg
Drop your 3GPP 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
Because both the input and output are 3GPP containers using the same target codecs (H.264/libx264 and AAC), this tool re-encodes the video stream using libx264 with a Constant Rate Factor (CRF) value to achieve a smaller file size at a controlled quality level, and re-encodes the audio as AAC at a reduced bitrate. Unlike a simple remux, this is a full transcode — every frame of video is decoded and re-compressed, which is what allows significant file size reduction. The -movflags +faststart flag moves the MP4/3GP metadata header to the beginning of the file, enabling progressive playback on mobile browsers and streaming players before the full file is downloaded.
What Each Flag Does
| Flag | What it does |
|---|---|
ffmpeg
|
Invokes the FFmpeg binary — the core multimedia processing engine that handles decoding the input 3GP, running the libx264 and AAC encoders, and writing the output 3GP container. |
-i input.3gp
|
Specifies the source 3GPP file. FFmpeg reads the container and demuxes the video and audio streams (which may be H.263, MPEG-4 Part 2, or H.264 video, and AMR or AAC audio on the input side) for re-encoding. |
-c:v libx264
|
Encodes the output video stream using the libx264 H.264 encoder, which offers far superior compression efficiency compared to the H.263 or MPEG-4 Part 2 codecs common in older 3GP source files. |
-crf 23
|
Sets the Constant Rate Factor for libx264 to 23, which is the default balance point between file size and visual quality. Lower values (e.g., 18) produce larger but higher-quality video; higher values (e.g., 28) produce smaller but more compressed video suitable for very slow mobile connections. |
-c:a aac
|
Re-encodes the audio stream as AAC using FFmpeg's built-in AAC encoder, replacing any original audio codec (such as AMR-NB or AMR-WB commonly found in 3GP files from older handsets) with AAC, which is broadly supported and more efficient. |
-b:a 64k
|
Sets the AAC audio bitrate to 64 kilobits per second, a practical ceiling for mobile-optimized 3GP audio that balances intelligibility with low data usage — appropriate for voice and moderate-quality music in a mobile context. |
-movflags +faststart
|
Moves the 3GP/MP4 moov metadata atom to the start of the output file, enabling the video to begin playing on mobile devices and web players before the entire file has been downloaded — essential for 3G streaming scenarios. |
output.3gp
|
Defines the output filename and signals FFmpeg to write a 3GPP container, preserving the format's mobile-optimized structure and ensuring compatibility with 3G-era devices and modern mobile players. |
Common Use Cases
- Shrink a 3GP video recorded on an older Nokia or feature phone before sharing it over messaging apps with strict file size limits
- Reduce a 3GPP video to a size small enough for MMS messaging or email attachment on 3G or 2G networks
- Archive a collection of old mobile phone videos without losing the 3GP format compatibility required by legacy media players
- Compress a 3GP video captured by a dashcam or embedded device before uploading it to a low-bandwidth server or cloud storage
- Lower the bitrate of a 3GPP file so it can be streamed smoothly over slow mobile data connections without buffering
- Prepare 3GP video content for distribution on feature phone platforms or WAP portals where file size constraints are strict
Frequently Asked Questions
It depends on how aggressively you compress. The default CRF value of 23 is a widely accepted balance between file size and visual quality for H.264. If the original 3GP was already heavily compressed (as many mobile-recorded 3GP files are), re-encoding will introduce some generation loss — artifacts from the first compression are re-compressed again. Raising the CRF value (e.g., to 26 or 28) shrinks the file further but increases visible quality degradation, while lowering it (e.g., to 18 or 20) preserves more detail at the cost of a larger file.
This can happen when the source 3GP was encoded with a very low bitrate (common on 2G/3G era phones) and the target CRF setting produces a higher bitrate than the original. libx264 with CRF 23 aims for a specific perceptual quality level, not a specific file size, so on low-quality source files it may actually allocate more bits than the original encoder did. To guarantee a smaller output, try a higher CRF value like 26 or 28, which forces more aggressive compression.
The audio is re-encoded as AAC at 64k bitrate by default, not copied from the original. If the source 3GP uses AMR-NB or AMR-WB audio (common in early mobile recordings), the audio is transcoded to AAC, which is a different codec with better quality at the same bitrate but not bitstream-identical to the original. Metadata such as title or artist tags may or may not survive the transcode depending on what was stored in the original file.
H.264 Baseline Profile and AAC LC are both widely supported on 3G-era devices, so the output should be broadly compatible. However, some very old feature phones only support MPEG-4 Part 2 video or AMR audio natively, and an H.264/AAC 3GP file may not play on those handsets. If you need maximum legacy compatibility, you may need to use a lower H.264 profile or switch to a different video codec entirely, which requires a custom FFmpeg command.
Change the number after -crf to control video compression. The scale runs from 18 (higher quality, larger file) to 28 (lower quality, smaller file), with 23 as the default. For example, replace '-crf 23' with '-crf 28' for maximum compression. You can also reduce the audio bitrate by changing '-b:a 64k' to '-b:a 32k' to shave additional kilobytes off the output, which is especially meaningful for speech-only content common in mobile 3GP recordings.
Yes. On Linux or macOS, you can run: for f in *.3gp; do ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac -b:a 64k -movflags +faststart "compressed_$f"; done. On Windows Command Prompt, use: for %f in (*.3gp) do ffmpeg -i "%f" -c:v libx264 -crf 23 -c:a aac -b:a 64k -movflags +faststart "compressed_%f". This applies the same compression settings to every 3GP file in the current directory, which is useful when archiving a large folder of old mobile recordings.
Technical Notes
3GPP (.3gp) is a constrained profile of the MPEG-4 Part 12 container, originally designed for 3G mobile networks with strict bandwidth and storage limits. When compressing 3GP to 3GP, the most important consideration is that many source files from older phones use codecs (MPEG-4 Part 2, H.263, AMR-NB) that are different from the H.264 + AAC output this tool produces. The re-encoding to H.264 via libx264 gives significantly better compression efficiency than the original codecs, meaning you can often achieve a much smaller file at equivalent or better perceptual quality. The -movflags +faststart flag relocates the moov atom to the file header, which is critical for streaming 3GP over HTTP — without it, a player must download the entire file before playback can begin. Note that 3GPP does not support subtitle tracks, chapter markers, or multiple audio tracks, so none of those features are relevant to this workflow. Since both input and output are lossy formats, every compression pass introduces additional generation loss; avoid repeated compress-decompress cycles on the same source file.