[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