Opened 10 months ago

Last modified 4 months ago

#10829 new defect

-skip_frame nokey is ignored for vp9/webm

Reported by: Konstantin Vlasov Owned by:
Priority: normal Component: ffprobe
Version: 6.1 Keywords: nokey
Cc: MasterQuestionable Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

How to reproduce:

> ffprobe.exe -hide_banner -show_frames -skip_frame nokey -select_streams v test.webm >test.txt
Input #0, matroska,webm, from 'test.webm':
  Metadata:
    ENCODER         : Lavf60.3.100
  Duration: 00:00:33.25, start: 0.000000, bitrate: 12521 kb/s
  Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709), 3840x2160, SAR 1:1 DAR 16:9, 60 fps, 60 tbr, 1k tbn (default)
    Metadata:
      DURATION        : 00:00:33.233000000
  Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      DURATION        : 00:00:33.248000000

The resulting file test.txt contains information about all the frames, not just the key frames.

For the test I took some video downloaded from YouTube (specifically, this one: https://www.youtube.com/watch?v=nUiHDtRZf44 , using the format 315+251).

Reproduced in Windows builds from gyan.dev, versions 6.1.1 and master build 2024-01-24-git-00b288da73:

>C:\Programs\ffmpeg-nightly\bin\ffprobe.exe -version
ffprobe version 2024-01-24-git-00b288da73-full_build-www.gyan.dev Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil      58. 36.101 / 58. 36.101
libavcodec     60. 38.100 / 60. 38.100
libavformat    60. 20.100 / 60. 20.100
libavdevice    60.  4.100 / 60.  4.100
libavfilter     9. 17.100 /  9. 17.100
libswscale      7.  6.100 /  7.  6.100
libswresample   4. 13.100 /  4. 13.100
libpostproc    57.  4.100 / 57.  4.100

>C:\Programs\ffmpeg-6.1.1\bin\ffprobe.exe -version
ffprobe version 6.1.1-full_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil      58. 29.100 / 58. 29.100
libavcodec     60. 31.102 / 60. 31.102
libavformat    60. 16.100 / 60. 16.100
libavdevice    60.  3.100 / 60.  3.100
libavfilter     9. 12.100 /  9. 12.100
libswscale      7.  5.100 /  7.  5.100
libswresample   4. 12.100 /  4. 12.100
libpostproc    57.  3.100 / 57.  3.100

Change History (7)

comment:1 by Balling, 9 months ago

Does VP9 have key frames in common sense and do we even support that?

comment:2 by Konstantin Vlasov, 9 months ago

Well, it does print key_frame=1 for some frames, and 0 for others... And the video does behave funny, if I cut a piece not starting from the key frame, without reencoding.

comment:3 by scrubbbbs, 4 months ago

-bsf:v noise=drop=not(key) works so the keyframe info is in the vp9 stream and works like other codecs.

comment:4 by MasterQuestionable, 4 months ago

Cc: MasterQuestionable added
Component: undeterminedffprobe

͏    VP9 of course does...

͏    Support-wise, Google (also major web browsers) internally use FFmpeg for video handling.
͏    And Google's YouTube extensively uses VP9.

͏    I haven't done in-depth analysis on this codec. (planned future)
͏    Though I did have enough knowledge on its picture variant: WebP Lossless.
͏    .
͏    Through which I estimated VP9 a potential very capable codec.

comment:5 by MasterQuestionable, 4 months ago

͏    Downloading example using `yt-dlp`:
͏    https://bugzilla.mozilla.org/show_bug.cgi?id=1892185#c1

comment:6 by Balling, 4 months ago

VP9 has superframes. It makes keyframes really not that simple. Anyway, remember webm is just mkv container. There is already a bug about VC1 in mkv, except there it outright tagged all frames as keyframes, m2ts vc1 has no issue. #8515

comment:7 by MasterQuestionable, 4 months ago

͏    Picking only what's sensible from current standards:
͏    Reinvent only when absolutely necessary.

͏    Superframe appears to be mere patent circumvention of B-frame??
͏    (how is the B-frame mere concept even patentable..?)
͏    .
͏    https://www.google.com/search?hl=en&gl=ca&num=10&q=VP9+superframe


͏    As for VC-1, seems to be defunct codec?
͏    And not much related.

͏    And I know "WebM is Matroska". (verbatim appeared in linked Bugzilla)

Note: See TracTickets for help on using tickets.