Convert Rec 709 to Rec 601 with FFmpeg Colorspace
This guide explains how to convert high-definition Rec. 709 video to
standard-definition Rec. 601 color space using the FFmpeg
colorspace filter. You will learn the exact command-line
syntax to accurately map colors, transfer characteristics, and matrix
coefficients, ensuring color consistency and correct metadata tagging
for your output file.
Understanding the FFmpeg Colorspace Filter
To convert colorspaces accurately in FFmpeg, the
colorspace filter is preferred over the simpler
scale filter because it performs high-fidelity color space,
primaries, and transfer characteristics conversions.
Rec. 601 has two main regional standards: * BT.601 625-line (commonly used for PAL/SECAM) * BT.601 525-line (commonly used for NTSC / SMPTE 170M)
Option 1: Convert to Rec. 601 (PAL / 625-line)
Use this command to convert a Rec. 709 video to the 625-line Rec. 601 standard:
ffmpeg -i input.mp4 -vf "colorspace=all=bt601-625:iall=bt709" -colorspace bt470bg -color_primaries bt470bg -color_trc bt470bg -c:v libx264 -crf 18 -c:a copy output.mp4Option 2: Convert to Rec. 601 (NTSC / 525-line / SMPTE 170M)
Use this command to convert a Rec. 709 video to the 525-line Rec. 601 standard:
ffmpeg -i input.mp4 -vf "colorspace=all=smpte170m:iall=bt709" -colorspace smpte170m -color_primaries smpte170m -color_trc smpte170m -c:v libx264 -crf 18 -c:a copy output.mp4Command Breakdown
-vf "colorspace=...": Invokes the video filter graph for color conversion.iall=bt709: Explicitly defines the input color properties as Rec. 709. This prevents conversion errors if the input file metadata is missing or incorrect.all=bt601-625/all=smpte170m: Sets the target color space, color primaries, and transfer characteristics in a single shortcut.-colorspace,-color_primaries,-color_trc: These flags write the correct metadata into the output container. Without these flags, media players may ignore the conversion and render the video using default Rec. 709 coefficients, leading to washed-out or overly saturated colors.-c:v libx264 -crf 18: Re-encodes the video using the H.264 codec at high quality.-c:a copy: Copies the audio stream without re-encoding to save time and preserve original audio quality.