[FFmpeg-user] Unable to produce a yuv444p video that vlc will play back correctly
rabbit+list at rabbit.us
Sun Nov 16 15:28:40 CET 2014
I am replying in-line further down, but wanted to to ask a generic
question, just to make sure I fully understand what is actually going on:
In 1997 Intel came up with the MMX instruction set which among other
things allows in-hardware rgb->422/420 conversion. Since then all
players default to this on a virtually hardcoded level, and the GUI
subsystem is expected to convert everything back to rgb (using the very
same instruction set).
As a result of the MMX success, everything in the digital video world
*17 years* later is inescapably doing this rgb->yuv->rgb dance, even in
the case of 100% correct and complete metadata. This is true for all
cases including the situation when both the source and the destination
are operating in the RGB24 colorspace: CGI produced under an RGB
renderer, to be displayed in a web-browser player, which by definition
operates on an RGB device.
Did I get the state of the art about right?
On 11/16/2014 02:57 PM, Andy Furniss wrote:
> Peter Rabbitson wrote:
>> This results (as expected) in a file identical to the source, proving
>> that the video contains the full RGB (or equivalent yuv444) set of
>> color information:
>>> ~$ diff miniansi_orig.png miniansi_frame.png; echo $? 0
> Players by default will use GPU for CSC/scale and these often won't
> avertise 444 as an input option so VLC will likely convert to 420.
> There is likely some way you could get VLC to do it, with mplayer I
> think specifying opengl would do.
> I don't really know what to suggest - 422 would be more likely to work
> - but then you would still see some loss.
You are actually correct - the conversion that took place is 422, not
420 as I originally thought. Verified by:
> ~$ ffmpeg -hide_banner -i miniansi_frame.png -f matroska -pix_fmt yuv422p - | ffmpeg -hide_banner -i - -pix_fmt rgb24 minansi_yuv.png
and then comparing the way miniansi_yuv.png looks to the actual playback
in a vlc window.
More information about the ffmpeg-user