Convert Sega Saturn FILM to MP4 with FFmpeg

This guide explains how to convert Sega Saturn FILM (Sega FILM/CPK) video files into modern MP4 format using the open-source multimedia tool FFmpeg. You will learn the correct FFmpeg commands to demux Saturn full-motion video (FMV), transcode legacy Cinepak video and PCM audio into standard H.264 and AAC, and troubleshoot common file detection issues.

Understanding the Sega FILM Format

Sega Saturn FMVs typically use the Sega FILM container format (commonly found with .film, .cpk, or .rom file extensions). Inside this container, video is almost always encoded with the Cinepak codec, paired with raw 8-bit or 16-bit uncompressed PCM audio. FFmpeg natively supports the Sega FILM demuxer and Cinepak decoder, eliminating the need for specialized Saturn extraction tools.

Step 1: Install FFmpeg

Ensure FFmpeg is installed and accessible from your system's command line or terminal. You can verify your installation by running:

ffmpeg -version

Step 2: Basic Conversion Command

If your source file ends with the .film extension, FFmpeg automatically detects the container. Run the following command in your terminal:

ffmpeg -i input.film -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac -b:a 192k output.mp4

Parameter breakdown:

  • -i input.film: The source Sega Saturn video file.
  • -c:v libx264: Encodes the video stream to H.264.
  • -crf 18: Sets a high-quality visual output suitable for preserving low-resolution retro video.
  • -pix_fmt yuv420p: Converts the pixel format to YUV 4:2:0, ensuring the MP4 plays reliably across modern web browsers and media players.
  • -c:a aac -b:a 192k: Converts the Saturn PCM audio to standard AAC stereo at 192 kbps.

Step 3: Forcing the Sega FILM Demuxer (For .CPK Files)

On many Saturn discs, FILM files use the .cpk extension. This can cause FFmpeg to confuse the file with modern CRI Middleware CPK archives. If FFmpeg fails to read your file, explicitly force the segafilm format using the -f flag:

ffmpeg -f segafilm -i input.cpk -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac -b:a 192k output.mp4

Step 4: Upscaling for Modern Displays (Optional)

Sega Saturn FMVs run at low native resolutions (often 320x224 or 320x240). To prevent modern video players from applying blurry bilinear filtering, use FFmpeg's nearest-neighbor scaling filter to upscale the video cleanly:

ffmpeg -f segafilm -i input.cpk -vf "scale=iw*4:ih*4:flags=neighbor" -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac output.mp4

This scales the video by 4x while preserving the sharp, original pixelated aesthetic of the Cinepak encoding.

Batch Converting Multiple Files

Windows (PowerShell):

Get-ChildItem *.cpk | ForEach-Object {
    ffmpeg -f segafilm -i $_.FullName -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac "$($_.BaseName).mp4"
}

Linux / macOS (Bash):

for file in *.cpk; do
    ffmpeg -f segafilm -i "$file" -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac "${file%.*}.mp4"
done