[FFmpeg-trac] #9132(undetermined:new): Wrong pixel format/output when converting video to yuv444p*
FFmpeg
trac at avcodec.org
Mon Mar 1 23:29:54 EET 2021
#9132: Wrong pixel format/output when converting video to yuv444p*
-------------------------------------+-------------------------------------
Reporter: viley | Type: defect
Status: new | Priority: important
Component: | Version: git-
undetermined | master
Keywords: regression | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Converting a video input to ''any'' yuv444p pixel format seems broken
right now. Visually it looks very wrong (purples instead of blacks), in
VLC, Potplayer and FFplay.
FFmpeg's scaler (or auto_scaler) says it's writing the requested pixel
format, but using FFprobe on the result, it finds a "gbrp" pixel format.
This happens for video sources regardless of input format, and doesn't
seem to depend on the target encoder (tried both libx264 and libx265) or
container (tried avi, mp4, and matroska).
Simplest way to reproduce, i.e. with the attached TESTCASE.mkv:
{{{ffmpeg -i TESTCASE.mkv -pix_fmt yuv444p -c:v libx264 -crf 10 TESTCASE-
yuv.mkv}}}
Full debug log attached in a file, but if I add -loglevel 42, I see the
auto_scaler converting to the correct format apparently:
{{{
[graph 0 input from stream 0:0 @ 0000000004e8cd00] w:420 h:212 pixfmt:gbrp
tb:1/1000 fr:25/1 sar:1/1
[auto_scaler_0 @ 0000000004e92c00] w:iw h:ih flags:'bicubic' interl:0
[format @ 0000000004e8e0c0] auto-inserting filter 'auto_scaler_0' between
the filter 'Parsed_null_0' and the filter 'format'
[auto_scaler_0 @ 0000000004e92c00] w:420 h:212 fmt:gbrp sar:1/1 -> w:420
h:212 fmt:yuv444p sar:1/1 flags:0x4
}}}
However, FFprobe detects gbrp:
{{{
Input #0, matroska,webm, from 'TESTCASE-yuv.mkv':
Metadata:
ENCODER : Lavf58.68.100
Duration: 00:00:04.00, start: 0.000000, bitrate: 17 kb/s
Stream #0:0: Video: h264 (High 4:4:4 Predictive), gbrp(tv,
gbr/unknown/unknown, progressive), 420x212 [SAR 1:1 DAR 105:53], 25 fps,
25 tbr, 1k tbn, 50 tbc (de
fault)
Metadata:
ENCODER : Lavc58.126.100 libx264
DURATION : 00:00:04.000000000
}}}
More notes:
* As mentioned, any yuv444p* pixel format will show the issue. If I use
yuv444p10le, FFprobe will report gbrp10le, etc.
* Trying to explicitly insert a scaler does '''not''' fix the issue, for
instance with {{{-vf
"scale=iw:ih:flags=neighbor+full_chroma_inp:in_range=full:out_range=full:out_color_matrix=bt709"}}}
* This doesn't happen with yuv420p* or yuv422p* formats, only the 4:4:4
ones.
* This also does not happen if the source is a looped .png, for instance:
{{{ffmpeg -loop 1 -i testcase.png -frames:v 100 -pix_fmt yuv444p -c:v
libx264 -crf 0 out.mkv}}} - in this case the output looks correct and
FFprobe shows "yuv444p(tv, progressive)".
Version: Using gyan.dev's Windows build (git-master, 2021-02-28).
Tagging as a regression, since it looks like this was broken at some point
between 2020-11-19 (last build that didn't show the issue) and 2021-01-12.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/9132>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list