I am downscaling 4K YUV420 video from the Panasonic LX100 to Full HD YUV444 using the ffmpeg console in Windows, and a script provided by user karl on the Personal View forum, modified for outputting H265 video at constant rate factor 18:
ffmpeg -i "input_path.MP4" -filter_complex "extractplanes=y+u+v[y][u][v]; [u] scale=w=3840:h=2160:flags=print_info+neighbor+bitexact [us]; [v] scale=w=3840:h=2160:flags=print_info+neighbor+bitexact [vs]; [y][us][vs]mergeplanes=0x001020:yuv444p,format=pix_fmts=yuv444p10le,scale=w=1920:h=1080:flags=print_info+bicubic+full_chroma_inp+full_chroma_int" -sws_dither none -c:v libx265 -preset medium -crf 18 -c:a copy -c:s copy -c:d copy -map 0 "output_path.mp4"
The result, VLC tells me, is a 1080p yuv444 video, and I can see excellent color resolution, so far so good. However, the image has a slight red tint compared to the original.
What could cause that?
The full console output is:
ffmpeg -i "input.MP4" -filter_complex "extractplanes=y+u+v[y][u][v]; [u] scale=w=3840:h=2160:flags=print_info+neighbor+bitexact [us]; [v] scale=w=3840:h=2160:flags=print_info+neighbor+bitexact [vs]; [y
][us][vs]mergeplanes=0x001020:yuv444p,format=pix_fmts=yuv444p10le,scale=w=1920:h
=1080:flags=print_info+bicubic+full_chroma_inp+full_chroma_int" -sws_dither none
-c:v libx265 -preset medium -crf 18 -c:a copy -c:s copy -c:d copy -map 0 "output.mp4"
ffmpeg version N-82080-g6969bed Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dx
va2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-lib
ebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --ena
ble-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfree
type --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enab
le-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-lib
openh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschr
oedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheor
a --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvo
rbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --ena
ble-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --e
nable-decklink --enable-zlib
libavutil 55. 32.100 / 55. 32.100
libavcodec 57. 63.103 / 57. 63.103
libavformat 57. 53.100 / 57. 53.100
libavdevice 57. 0.103 / 57. 0.103
libavfilter 6. 64.100 / 6. 64.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 2.100 / 2. 2.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.MP4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-06-27T21:42:33.000000Z
Duration: 00:00:16.02, start: 0.000000, bitrate: 95327 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709)
, 3840x2160 [SAR 1:1 DAR 16:9], 95071 kb/s, 23.98 fps, 23.98 tbr, 360k tbn, 47.9
5 tbc (default)
Metadata:
creation_time : 2015-06-27T21:42:33.000000Z
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, flt
p, 124 kb/s (default)
Metadata:
creation_time : 2015-06-27T21:42:33.000000Z
File 'output.mp4' already exists. Overwrite ? [y/N] y
[swscaler @ 00000000041193c0] nearest neighbor / point scaler, from gray to gray
using MMXEXT
[swscaler @ 0000000000556720] nearest neighbor / point scaler, from gray to gray
using MMXEXT
[swscaler @ 000000000418cd60] bicubic scaler, from yuv444p10le to yuv444p using
MMXEXT
x265 [info]: HEVC encoder version 0.0
x265 [info]: build info [Windows][GCC 5.4.0][64 bit] 8bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
x265 [info]: Main 4:4:4 profile, Level-4 (Main tier)
x265 [info]: Thread pool created using 4 threads
x265 [info]: Slices : 1
x265 [info]: frame threads / pool features : 2 / wpp(17 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge : hex / 57 / 2 / 2
x265 [info]: Keyframe min / max / scenecut : 23 / 250 / 40
x265 [info]: Cb/Cr QP Offset : 6 / 6
x265 [info]: Lookahead / bframes / badapt : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb : 1 / 1 / 0
x265 [info]: References / ref-limit cu / depth : 3 / on / on
x265 [info]: AQ: mode / str / qg-size / cu-tree : 1 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress : CRF-18.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 rskip signhide tmvp strong-intra-smoothing
x265 [info]: tools: lslices=6 deblock sao
Output #0, mp4, to 'G:\darrask\Pics\2015.06 Goettingen\P1340763_karl3.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
encoder : Lavf57.53.100
Stream #0:0: Video: hevc (libx265) ([35][0][0][0] / 0x0023), yuv444p, 1920x1
080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 24k tbn, 23.98 tbc (default)
Metadata:
encoder : Lavc57.63.103 libx265
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, 124 kb/s (default)
Metadata:
creation_time : 2015-06-27T21:42:33.000000Z
Stream mapping:
Stream #0:0 (h264) -> extractplanes
scale -> Stream #0:0 (libx265)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[swscaler @ 00000000041b9da0] bicubic scaler, from yuv444p10le to yuv444p using MMXEXT
frame= 7 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed=
frame= 17 fps= 16 q=0.0 size= 0kB time=00:00:00.49 bitrate= 0.7kbits/s
frame= 25 fps= 16 q=0.0 size= 0kB time=00:00:00.98 bitrate= 0.4kbits/s
frame= 29 fps= 14 q=-0.0 size= 61kB time=00:00:00.98 bitrate= 508.0kbits/
frame= 30 fps= 11 q=-0.0 size= 95kB time=00:00:00.98 bitrate= 795.6kbits/
frame= 31 fps=9.7 q=-0.0 size= 112kB time=00:00:01.00 bitrate= 918.1kbits/
...console output truncated by user...
frame= 377 fps=3.9 q=-0.0 size= 7017kB time=00:00:15.50 bitrate=3706.4kbits/
frame= 379 fps=3.9 q=-0.0 size= 7048kB time=00:00:15.53 bitrate=3717.4kbits/
frame= 383 fps=3.9 q=-0.0 size= 7131kB time=00:00:16.00 bitrate=3650.8kbits/
frame= 384 fps=3.7 q=-0.0 Lsize= 7561kB time=00:00:16.00 bitrate=3871.5kbits
/s speed=0.156x
video:7304kB audio:244kB subtitle:0kB other streams:0kB global headers:1kB muxin
g overhead: 0.169810%
x265 [info]: frame I: 2, Avg QP:18.71 kb/s: 16117.16
x265 [info]: frame P: 86, Avg QP:19.53 kb/s: 8568.68
x265 [info]: frame B: 296, Avg QP:23.40 kb/s: 2247.32
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
x265 [info]: consecutive B-frames: 2.3% 0.0% 9.1% 36.4% 52.3%
encoded 384 frames in 102.81s (3.73 fps), 3735.28 kb/s, Avg QP:22.51
output_path
>
Note it also has a red tint when I export to Prores with the original script by karl, and also when pix_fmts=yuv444p10le is not used (thus I presume 8 bits per pixel are used).