[FFmpeg-user] using ffprobe to output input stream data and libavfilter data

Dave Rice dave at dericed.com
Wed Feb 3 06:46:14 CET 2016


Hi all,

I’d like to use ffprobe to output information about the streams of a source file and libavfilter metadata at the same time. Is this possible?

If I use a filterchain as the input I can get frame metadata from libavfilter such as:

ffprobe -f lavfi -i "movie=example.mkv,signalstats" -show_frames -show_streams -of xml
ffprobe version N-42845-g7ab37ca Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 13.100 / 55. 13.100
  libavcodec     57. 22.100 / 57. 22.100
  libavformat    57. 21.101 / 57. 21.101
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 23.100 /  6. 23.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
Input #0, lavfi, from 'movie=example.mkv,signalstats':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (444P / 0x50343434), yuv444p, 720x480 [SAR 1:1 DAR 3:2], 1k tbr, 1k tbn, 1k tbc
    <frames>
        <frame media_type="video" stream_index="0" key_frame="1" pkt_pts="0" pkt_pts_time="0.000000" pkt_dts="0" pkt_dts_time="0.000000" best_effort_timestamp="0" best_effort_timestamp_time="0.000000" pkt_pos="761" pkt_size="1036800" width="720" height="480" pix_fmt="yuv444p" sample_aspect_ratio="1:1" pict_type="I" coded_picture_number="0" display_picture_number="0" interlaced_frame="0" top_field_first="0" repeat_pict="0">
            <tag key="lavfi.signalstats.YMIN" value="18"/>
            <tag key="lavfi.signalstats.YLOW" value="97"/>
            <tag key="lavfi.signalstats.YAVG" value="145.97"/>
            <tag key="lavfi.signalstats.YHIGH" value="170"/>
            <tag key="lavfi.signalstats.YMAX" value="234"/>
            <tag key="lavfi.signalstats.UMIN" value="19"/>
            <tag key="lavfi.signalstats.ULOW" value="90"/>
            <tag key="lavfi.signalstats.UAVG" value="140.07"/>
            <tag key="lavfi.signalstats.UHIGH" value="166"/>
            <tag key="lavfi.signalstats.UMAX" value="233"/>
            <tag key="lavfi.signalstats.VMIN" value="16"/>
            <tag key="lavfi.signalstats.VLOW" value="87"/>
            <tag key="lavfi.signalstats.VAVG" value="148.122"/>
            <tag key="lavfi.signalstats.VHIGH" value="174"/>
            <tag key="lavfi.signalstats.VMAX" value="239"/>
            <tag key="lavfi.signalstats.SATMIN" value="1"/>
            <tag key="lavfi.signalstats.SATLOW" value="25"/>
            <tag key="lavfi.signalstats.SATAVG" value="46.8093"/>
            <tag key="lavfi.signalstats.SATHIGH" value="60"/>
            <tag key="lavfi.signalstats.SATMAX" value="118"/>
            <tag key="lavfi.signalstats.HUEMED" value="210"/>
            <tag key="lavfi.signalstats.HUEAVG" value="197.44"/>
            <tag key="lavfi.signalstats.YDIF" value="0"/>
            <tag key="lavfi.signalstats.UDIF" value="0"/>
            <tag key="lavfi.signalstats.VDIF" value="0"/>
        </frame>
    </frames>
    <streams>
        <stream index="0" codec_name="rawvideo" codec_long_name="raw video" codec_type="video" codec_time_base="1/1000" codec_tag_string="444P" codec_tag="0x50343434" width="720" height="480" coded_width="720" coded_height="480" has_b_frames="0" sample_aspect_ratio="1:1" display_aspect_ratio="3:2" pix_fmt="yuv444p" level="-99" refs="1" r_frame_rate="1000/1" avg_frame_rate="0/0" time_base="1/1000" start_pts="0" start_time="0.000000" nb_read_frames="1">
            <disposition default="0" dub="0" original="0" comment="0" lyrics="0" karaoke="0" forced="0" hearing_impaired="0" visual_impaired="0" clean_effects="0" attached_pic="0"/>
        </stream>
    </streams>
</ffprobe>

Here I get the frame metadata output but the stream metadata reflects the output of the movie filter (rawvideo) rather than information about the streams of the source file.

If I use the source file directly as an input, then I can not apply a filter as ffprobe doesn’t support -vf or -filter_complex.

ffprobe -i movie=example.mkv -vf signalstats -show_frames -show_streams -of xml
ffprobe version N-42845-g7ab37ca Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 13.100 / 55. 13.100
  libavcodec     57. 22.100 / 57. 22.100
  libavformat    57. 21.101 / 57. 21.101
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 23.100 /  6. 23.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Failed to set value 'signalstats' for option 'vf': Option not found

If I try to use both a filterchain as an input and the source file as another input, I have an error as only one input is supported in ffprobe.

ffprobe -i movie=example.mkv -f lavfi movie=example.mkv,signalstats -show_frames -show_streams -of xml
ffprobe version N-42845-g7ab37ca Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 13.100 / 55. 13.100
  libavcodec     57. 22.100 / 57. 22.100
  libavformat    57. 21.101 / 57. 21.101
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 23.100 /  6. 23.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Argument 'movie=example.mkv,signalstats' provided as input filename, but 'movie=example.mkv' was already specified.

Is it feasible (now or with sponsorship) to have a single ffprobe output that contains metadata about both the source file’s streams and the metadata output of filters (such as signalstats, cropdetect) applied to the frames?

Best Regards,
Dave Rice



More information about the ffmpeg-user mailing list