[FFmpeg-user] preserving YUV color range of 0-255
Dave Rice
dave at dericed.com
Sun Mar 9 22:54:47 CET 2014
On Mar 9, 2014, at 4:52 AM, Carl Eugen Hoyos <cehoyos at ag.or.at> wrote:
> Dave Rice <dave <at> dericed.com> writes:
>
>> some filters such as extractplanes change the range of the input.
>
> I may miss something but I believe that extractplanes neither
> changes nor does not change the range, it simply outputs the
> data as it is stored in the input plane (1:1).
> Depending on the input colour space, this may lead to
> unexpected results.
> But I have to admit I had not used the filter before.
Clement gave me a tip to put format=yuv422p first and that worked. So (with uyvy422 source) this,
-vf 'extractplanes=y,histogram=mode=waveform:waveform_mode=column'
compressed the range of Y, but this
-vf 'format=yuv422p,extractplanes=y,histogram=mode=waveform:waveform_mode=column'
displays the Y values appropriately.
I don't understand why adding the format filter makes the difference. Here are verbose outputs of the two scenarios:
Without format filter (range is altered):
ffplay -v verbose 256shades_ntsc.mov -vf 'extractplanes=y,histogram=mode=waveform:waveform_mode=column'
ffplay version 2.2.git Copyright (c) 2003-2014 the FFmpeg developers
built on Mar 6 2014 20:43:26 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-ffplay
libavutil 52. 66.101 / 52. 66.101
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.101 / 55. 33.101
libavdevice 55. 11.100 / 55. 11.100
libavfilter 4. 3.100 / 4. 3.100
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '256shades_ntsc.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf55.19.102
Duration: 00:00:00.03, start: 0.000000, bitrate: 164836 kb/s
Stream #0:0(eng): Video: rawvideo (2vuy / 0x79757632), uyvy422, 720x486, 167793 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc (default)
Metadata:
handler_name : DataHandler
[ffplay_buffer @ 0x7fc8e944ece0] w:720 h:486 pixfmt:uyvy422 tb:1/30000 fr:30000/1001 sar:0/1 sws_param:
[auto-inserted scaler 0 @ 0x7fc8e944da00] w:iw h:ih flags:'4' interl:0
[Parsed_extractplanes_0 @ 0x7fc8e94500e0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'ffplay_buffer' and the filter 'Parsed_extractplanes_0'
[auto-inserted scaler 1 @ 0x7fc8e944d8c0] w:iw h:ih flags:'4' interl:0
[Parsed_histogram_1 @ 0x7fc8e9450440] auto-inserting filter 'auto-inserted scaler 1' between the filter 'Parsed_extractplanes_0' and the filter 'Parsed_histogram_1'
[auto-inserted scaler 0 @ 0x7fc8e944da00] w:720 h:486 fmt:uyvy422 sar:0/1 -> w:720 h:486 fmt:yuv422p sar:0/1 flags:0x4
[auto-inserted scaler 1 @ 0x7fc8e944d8c0] w:720 h:486 fmt:gray sar:0/1 -> w:720 h:486 fmt:yuv420p sar:0/1 flags:0x4
[ffplay_crop @ 0x7fc8e944cfc0] w:720 h:768 sar:1/1 -> w:720 h:768 sar:1/1
0.81 M-V: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
With format filter (range kept as-is):
ffplay -v verbose 256shades_ntsc.mov -vf 'format=yuv422p,extractplanes=y,histogram=mode=waveform:waveform_mode=column'
ffplay version 2.2.git Copyright (c) 2003-2014 the FFmpeg developers
built on Mar 6 2014 20:43:26 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-ffplay
libavutil 52. 66.101 / 52. 66.101
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.101 / 55. 33.101
libavdevice 55. 11.100 / 55. 11.100
libavfilter 4. 3.100 / 4. 3.100
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '256shades_ntsc.mov':
Metadata:
major_brand : qt
minor_version : 512
compatible_brands: qt
encoder : Lavf55.19.102
Duration: 00:00:00.03, start: 0.000000, bitrate: 164836 kb/s
Stream #0:0(eng): Video: rawvideo (2vuy / 0x79757632), uyvy422, 720x486, 167793 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc (default)
Metadata:
handler_name : DataHandler
[ffplay_buffer @ 0x7fe81af16e60] w:720 h:486 pixfmt:uyvy422 tb:1/30000 fr:30000/1001 sar:0/1 sws_param:
[auto-inserted scaler 0 @ 0x7fe81af1a480] w:iw h:ih flags:'4' interl:0
[Parsed_format_0 @ 0x7fe81af198c0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'ffplay_buffer' and the filter 'Parsed_format_0'
[auto-inserted scaler 1 @ 0x7fe81af1a2e0] w:iw h:ih flags:'4' interl:0
[ffplay_crop @ 0x7fe81af19480] auto-inserting filter 'auto-inserted scaler 1' between the filter 'Parsed_histogram_2' and the filter 'ffplay_crop'
[auto-inserted scaler 0 @ 0x7fe81af1a480] w:720 h:486 fmt:uyvy422 sar:0/1 -> w:720 h:486 fmt:yuv422p sar:0/1 flags:0x4
[auto-inserted scaler 1 @ 0x7fe81af1a2e0] w:720 h:256 fmt:gray sar:1/1 -> w:720 h:256 fmt:yuv420p sar:1/1 flags:0x4
[ffplay_crop @ 0x7fe81af19480] w:720 h:256 sar:1/1 -> w:720 h:256 sar:1/1
0.43 M-V: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
I also notice that with:
-vf 'format=yuv422p,extractplanes=y,histogram=mode=waveform:waveform_mode=column'
the histogram filter only plots one channel but without the format filter when I run this:
-vf 'extractplanes=y,histogram=mode=waveform:waveform_mode=column'
the histogram channel provides a three channel output. The auto-inserted scalers of both filterchains are nearly identical so I'm not sure how to account for the difference.
> Please try to fix your quoting,
I think I just did.
Dave
> Carl Eugen
More information about the ffmpeg-user
mailing list