How to avoid color shift using FFmpeg libx264

2.8k Views Asked by At

I’d like to convert some footage to proxy H.264 using ffmpeg. I got a slight colorshift using the following command:

ffmpeg -i /path/to/045_0054.MXF -map 0 -dn -c:v libx264 -preset slow -profile:v main -level:v 4.1 -coder 1 -pix_fmt yuv420p -crf 25 -vf "scale=1280:720:flags=lanczos" -movflags +faststart -colorspace 1 -color_primaries 1 -color_trc 1 -color_range 1 -brand mp42 -refs 1 -x264-params b-pyramid=0 -bf 2 -g 5 -y /path/to/045_0054.mp4

How can I get rid of the slight magenta shift?

mediainfo prints the following about the source file:

General
Complete name                            : /path/to/045_0054.MXF
Format                                   : MXF
Format version                           : 1.3
Format profile                           : OP-1a
Format settings                          : Closed / Complete
File size                                : 180 MiB
Duration                                 : 14 s 720 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 102 Mb/s
Encoded date                             : 2021-02-19 13:13:15.000
Writing application                      : Sony Mem 2.00

Video
ID                                       : 2
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings                          : CABAC / 2 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 2 frames
Format settings, GOP                     : M=3, N=6
Format settings, wrapping mode           : Frame
Codec ID                                 : 0D01030102106001-0401020201314001
Duration                                 : 14 s 720 ms
Bit rate mode                            : Variable
Bit rate                                 : 97.8 Mb/s
Maximum bit rate                         : 100.0 Mb/s
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 25.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.472
Stream size                              : 172 MiB (95%)
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
1

There are 1 best solutions below

0
On

You need to convert to BT.709 matrix using -vf scale=out_color_matrix=bt709 not just tag output using -colorspace bt709.

So in your command just change to -vf scale=1280:720:out_color_matrix=bt709:flags=lanczos