[FFmpeg-user] ffplay with -vf histogram | waveform at full range luma
Husinsky Matthias
Matthias.Husinsky at fhstp.ac.at
Thu Dec 5 22:03:55 CET 2013
Hello,
The histogram video filter behaves odd in waveform mode when using an
input file that has full range luma (yuvj420p).
Please check with this file (recorded by a Canon 5DmII):
http://www.datafilehost.com/d/acd54299
When applying the histogram filter as follows the histogram is fine (luma
values streched from 0-255)
---
mhusinsky$ ffplay -vf histogram fullrange_y.mp4
ffplay version 2.1.git-65f41b5 Copyright (c) 2003-2013 the FFmpeg
developers
built on Dec 3 2013 21:42:13 with Apple LLVM version 5.0
(clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/opt/local --enable-swscale --enable-avfilter
--enable-avresample --enable-libmp3lame --enable-libvorbis
--enable-libopus --enable-libtheora --enable-libschroedinger
--enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex
--enable-libass --enable-libbluray --enable-gnutls --enable-libfreetype
--disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man
--enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64
--enable-yasm --enable-gpl --enable-postproc --enable-libx264
--enable-libxvid --enable-version3 --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-nonfree --enable-libfaac
libavutil 52. 56.100 / 52. 56.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.102 / 55. 21.102
libavdevice 55. 5.102 / 55. 5.102
libavfilter 3. 91.100 / 3. 91.100
libavresample 1. 1. 0 / 1. 1. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fullrange_y.mp4':B f=0/0
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.21.102
Duration: 00:00:02.00, start: 0.000000, bitrate: 37435 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 /
0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 37431 kb/s, 30 fps, 30
tbr, 12k tbn, 24k tbc (default)
Metadata:
handler_name : VideoHandler
[swscaler @ 0x7f8857004e00] deprecated pixel format used, make sure you
did set range correctly
[swscaler @ 0x7f8857040600] deprecated pixel format used, make sure you
did set range correctly
2.45 M-V: -0.028 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
---
When using the waveform mode the values are compressed into broadcast
range and waveform output of luma does not reflect the actual content
(clearly visible with the regular spikes shown as "lines" at regular
intervals in the luma spectrum):
---
mhusinsky$ ffplay -color_range 2 -vf
histogram=mode=waveform:waveform_mode=column:waveform_mirror=1
fullrange_y.mp4
ffplay version 2.1.git-65f41b5 Copyright (c) 2003-2013 the FFmpeg
developers
built on Dec 3 2013 21:42:13 with Apple LLVM version 5.0
(clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/opt/local --enable-swscale --enable-avfilter
--enable-avresample --enable-libmp3lame --enable-libvorbis
--enable-libopus --enable-libtheora --enable-libschroedinger
--enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex
--enable-libass --enable-libbluray --enable-gnutls --enable-libfreetype
--disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man
--enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64
--enable-yasm --enable-gpl --enable-postproc --enable-libx264
--enable-libxvid --enable-version3 --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-nonfree --enable-libfaac
libavutil 52. 56.100 / 52. 56.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.102 / 55. 21.102
libavdevice 55. 5.102 / 55. 5.102
libavfilter 3. 91.100 / 3. 91.100
libavresample 1. 1. 0 / 1. 1. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fullrange_y.mp4':B f=0/0
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.21.102
Duration: 00:00:02.00, start: 0.000000, bitrate: 37435 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 /
0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 37431 kb/s, 30 fps, 30
tbr, 12k tbn, 24k tbc (default)
Metadata:
handler_name : VideoHandler
[swscaler @ 0x7f80fd11f400] deprecated pixel format used, make sure you
did set range correctly
1.62 M-V: -0.001 fd= 1 aq= 0KB vq= 163KB sq= 0B f=0/0
---
Trying to force a certain format like this does not improve the situation:
ffplay -color_range 2 -vf
format=pix_fmts=yuvj420p,histogram=mode=waveform:waveform_mode=column:wavef
orm_mirror=1 fullrange_y.mp4
I found that applying the filter in ffmpeg and piping the output to ffplay
actually works as intended.
---
mhusinsky$ ffmpeg -i fullrange_y.mp4 -vf
histogram=mode=waveform:waveform_mode=column:waveform_mirror=1 -c:v
rawvideo -f nut - |ffplay -
ffmpeg version 2.1.git-65f41b5 Copyright (c) 2000-2013 the FFmpeg
developers
built on Dec 3 2013 21:42:13 with Apple LLVM version 5.0
(clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/opt/local --enable-swscale --enable-avfilter
--enable-avresample --enable-libmp3lame --enable-libvorbis
--enable-libopus --enable-libtheora --enable-libschroedinger
--enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex
--enable-libass --enable-libbluray --enable-gnutls --enable-libfreetype
--disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man
--enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64
--enable-yasm --enable-gpl --enable-postproc --enable-libx264
--enable-libxvid --enable-version3 --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-nonfree --enable-libfaac
libavutil 52. 56.100 / 52. 56.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.102 / 55. 21.102
libavdevice 55. 5.102 / 55. 5.102
libavfilter 3. 91.100 / 3. 91.100
libavresample 1. 1. 0 / 1. 1. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fullrange_y.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.21.102
Duration: 00:00:02.00, start: 0.000000, bitrate: 37435 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 /
0x31637661), yuvj420p(pc, smpte170m), 1920x1080, 37431 kb/s, 30 fps, 30
tbr, 12k tbn, 24k tbc (default)
Metadata:
handler_name : VideoHandler
Output #0, nut, to 'pipe:':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.21.102
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuvj420p, 1920x768
[SAR 1:1 DAR 5:2], q=2-31, 200 kb/s, 61440 tbn, 30 tbc (default)
Metadata:
X-Language : eng
handler_name : VideoHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> rawvideo)
Press [q] to stop, [?] for help
ffplay version 2.1.git-65f41b5 Copyright (c) 2003-2013 the FFmpeg
developers
built on Dec 3 2013 21:42:13 with Apple LLVM version 5.0
(clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/opt/local --enable-swscale --enable-avfilter
--enable-avresample --enable-libmp3lame --enable-libvorbis
--enable-libopus --enable-libtheora --enable-libschroedinger
--enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex
--enable-libass --enable-libbluray --enable-gnutls --enable-libfreetype
--disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man
--enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64
--enable-yasm --enable-gpl --enable-postproc --enable-libx264
--enable-libxvid --enable-version3 --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-nonfree --enable-libfaac
libavutil 52. 56.100 / 52. 56.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.102 / 55. 21.102
libavdevice 55. 5.102 / 55. 5.102
libavfilter 3. 91.100 / 3. 91.100
libavresample 1. 1. 0 / 1. 1. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, nut, from 'pipe:':aq= 0KB vq= 0KB sq= 0B f=0/0
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.21.102
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Video: rawvideo (I420 / 0x30323449), yuv420p,
1920x768, SAR 1:1 DAR 5:2, 30 fps, 30 tbr, 61440 tbn, 61440 tbc (default)
Metadata:
handler_name : VideoHandler
frame= 60 fps= 33 q=0.0 Lsize= 129602kB time=00:00:02.00
bitrate=530851.7kbits/s
video:129600kB audio:0kB subtitle:0 global headers:0kB muxing overhead
0.001901%
3.02 M-V: -0.033 fd= 4 aq= 0KB vq= 0KB sq= 0B f=0/0
---
Now is there any possibility to achieve this behaviour in ffplay directly
(i.e. by not piping outputs)? I find it confusing that the levels and
waveform mode behave differently in ffplay.
Am I doing something wrong or is this a bug of ffplay? I¹m using the
histogram mainly for inspection purposes and would prefer doing it
directly in ffplay.
Thank you,
Matthias
More information about the ffmpeg-user
mailing list