3DS CFW Video Toolkit — Convert videos for Nintendo 3DS (o3DS/n3DS) with optimized settings for hardware playback.
- MP4 (H.264) Transcoding: Optimized for both Old 3DS (o3DS) and New 3DS (n3DS) hardware
- n3DS: Hardware H.264 decode via MVD - supports up to 854x480@30fps
- o3DS: Software decode - optimized for 256x144@24fps
- AVI Camera Format: Generate MJPEG/IMA-ADPCM AVI files compatible with 3DS Camera app
- Optional CIA Generation: Support for VidInjector9000-cli integration
- MoFlex Package Support: Note - SDK includes no MoFlex encoder, package-only support
ffmpeg- Video transcodingffprobe- Video analysis
qrencode- QR code generationVidInjector9000-cli- CIA file generation from videos
- Clone this repository:
git clone https://github.com/0n1cOn3/Nintendo-3DS-Video-Converter.git
cd Nintendo-3DS-Video-Converter- Ensure dependencies are installed:
# On Ubuntu/Debian
sudo apt-get install ffmpeg
# On macOS
brew install ffmpeg
# On Windows (via Chocolatey)
choco install ffmpeg./3ds_transcode.sh --target <n3ds|o3ds> -i <input_file> [options]| Option | Description | Required |
|---|---|---|
--target <n3ds|o3ds> |
Target 3DS model (n3ds or o3ds) | Yes |
-i <input_file> |
Input video file | Yes |
-o <output_dir> |
Output directory (default: ./out) | No |
--avi-camera |
Generate AVI file for 3DS camera app | No |
--avi-quality <1-5> |
AVI quality level (default: 3, lower=better quality) | No |
Convert video for New 3DS:
./3ds_transcode.sh --target n3ds -i video.mkvConvert video for Old 3DS:
./3ds_transcode.sh --target o3ds -i video.mp4Convert for Old 3DS with camera AVI:
./3ds_transcode.sh --target o3ds -i video.mp4 --avi-cameraCustom output directory:
./3ds_transcode.sh --target n3ds -i video.avi -o /path/to/outputHigh quality AVI for camera:
./3ds_transcode.sh --target o3ds -i video.mp4 --avi-camera --avi-quality 2- Resolution: 854x480
- Frame Rate: 30 fps
- Video Codec: H.264 (Baseline profile, Level 3.1)
- Video Bitrate: 1200 kbps
- Audio Codec: AAC
- Audio Bitrate: 128 kbps
- Audio Sample Rate: 44.1 kHz
- Resolution: 256x144
- Frame Rate: 24 fps
- Video Codec: H.264 (Baseline profile, Level 3.0)
- Video Bitrate: 500 kbps
- Audio Codec: AAC
- Audio Bitrate: 96 kbps
- Audio Sample Rate: 32 kHz
- Resolution: 480x240
- Video Codec: MJPEG
- Quality: 2-5 (default: 3, lower=better)
- Audio Codec: IMA-ADPCM
- Audio Sample Rate: 32 kHz
- Audio Channels: Mono
- Maximum Duration: 10 minutes
MP4 files can be placed anywhere on your 3DS SD card. Use a video player app (like mplayer_3ds) to play them.
AVI files must be placed in the /DCIM/ folder with the naming format HNI_XXXX.AVI to appear in the Camera app. The script automatically generates files with this naming convention.
Example:
/DCIM/HNI_20231215_143022.AVI
New 3DS (n3DS):
- Uses MVD (Multi-Video Decoder) hardware acceleration for H.264
- Can handle up to 854x480@30fps smoothly
- Better battery life during video playback due to hardware decode
Old 3DS (o3DS):
- Software H.264 decoding only
- Limited to lower resolutions and frame rates
- Settings optimized to prevent frame drops and ensure smooth playback
All videos are encoded with:
- H.264 Baseline Profile: Maximum compatibility
- Proper Level: 3.1 for n3DS, 3.0 for o3DS
- Fast Start:
movflags +faststartfor immediate playback - Aspect Ratio Preservation: Black padding added if needed
- Buffer Management: Bitrate controls to prevent buffer overflow
The Nintendo SDK does not include a MoFlex encoder, only package support for existing .moflex files. This tool focuses on standard video formats that can be created without proprietary encoding tools.
- Check file format: Ensure it's MP4 with H.264 video and AAC audio
- Verify resolution: Make sure you used the correct target (n3ds/o3ds)
- File location: MP4 files can be anywhere; AVI files must be in /DCIM/
- Player compatibility: Try different video player apps
- Correct naming: File must start with
HNI_and end with.AVI - Location: Must be in
/DCIM/folder - Duration: Maximum 10 minutes
- Format: Must be MJPEG/IMA-ADPCM (automatic with
--avi-camera)
- Check ffmpeg: Ensure ffmpeg is installed and in PATH
- Input file: Verify the input file is not corrupted
- Disk space: Ensure sufficient space in output directory
- Permissions: Check write permissions for output directory
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.
- Video conversion powered by FFmpeg
- Designed for Nintendo 3DS CFW (Custom Firmware) systems
- Compatible with homebrew video players
Contributions are welcome! Please feel free to submit issues or pull requests.
This tool is designed for use with homebrew and custom firmware on Nintendo 3DS systems. Ensure you comply with all applicable laws and Nintendo's terms of service in your jurisdiction.