[FFmpeg-user] shuffleframes -- unexpected results

Mark Filipak (ffmpeg) markfilipak at bog.us
Mon Feb 22 05:38:32 EET 2021


On 2021-02-21 22:17, Mark Filipak (ffmpeg) wrote:
> On 2021-02-21 21:39, pdr0 wrote:
>> Mark Filipak (ffmpeg) wrote
>>> I've run some test cases for the shuffleframes filter. I've documented
>>> shuffleframes via my
>>> preferred documentation format (below). In the course of my testing, I
>>> found 2 cases (marked "*****
>>> Expected", below) that produced unexpected results, to wit: If the 1st
>>> frame is discarded, the
>>> entire input is discarded, even if the 1st discard is followed by frames
>>> that are supposed to be
>>> retained.
>>>
>>>                 -1 1    ...Blocks the pipeline (discards all frames). *****
>>> Expected 1 3 5 7 ..
>>>                 -1 1 2   ...Blocks the pipeline (discards all frames).
>>> ***** Expected 1 2 4 5 7 8 ..
>>
>> These 2 cases produce the expected result for me
>>
>> If the "entire input is discarded" - do you mean you get no output file at
>> all ?
> 
> No output file at all. The transcodes complete (they don't hang awaiting end-of-stream) but since 
> the pipeline contains no frames, the encoder makes nothing and ffmpeg makes no files.
> 
>> Post more info, including the console log
> 
> First, for context, the scripts:
> ffmpeg -i 0.mkv -vf shuffleframes="-1" -dn "\-1.mkv"
> ffmpeg -i 0.mkv -vf shuffleframes="-1 1" -dn "\-1 1.mkv"
> ffmpeg -i 0.mkv -vf shuffleframes="-1 1 2" -dn "\-1 1 2.mkv"
> 
> I had to escape the '-' in the filenames in order to avoid this complaint:
> "Unrecognized option '1 1 2.mkv'.
> "Error splitting the argument list: Option not found"
> 
> Perhaps it would be expeditious if you showed me your command line that works, eh?

Oh dear. Is there a escaping row between Windows and ffmpeg? Here's the logfile:
ffmpeg started on 2021-02-21 at 11:50:29
Report written to "ffmpeg-20210221-115029.log"
Log level: 32
Command line:
ffmpeg -i 0.mkv -vf "shuffleframes=-1 1 2" -dn "\\-1 1 2.mkv"
ffmpeg version N-100851-g9f38fac053 Copyright (c) 2000-2021 the FFmpeg developers
   built with gcc 9.3-win32 (GCC) 20200320
   configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config 
--cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 
--disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-zlib --enable-libxml2 
--enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig 
--enable-opencl --enable-libvmaf --enable-vulkan --enable-libvorbis --enable-amf --enable-libaom 
--enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm 
--enable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus 
--enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb 
--enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband 
--enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 
--enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx26 
libavutil      56. 64.100 / 56. 64.100
   libavcodec     58.119.100 / 58.119.100
   libavformat    58. 65.101 / 58. 65.101
   libavdevice    58. 11.103 / 58. 11.103
   libavfilter     7.100.100 /  7.100.100
   libswscale      5.  8.100 /  5.  8.100
   libswresample   3.  8.100 /  3.  8.100
   libpostproc    55.  8.100 / 55.  8.100
Input #0, matroska,webm, from '0.mkv':
   Metadata:
     ENCODER         : Lavf58.65.101
   Duration: 00:00:05.76, start: 0.000000, bitrate: 295 kb/s
     Stream #0:0: Video: h264 (High), yuv420p(tv, smpte170m, progressive), 240x236 [SAR 32:27 DAR 
640:531], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
     Metadata:
       ENCODER         : Lavc58.119.100 libx264
       DURATION        : 00:00:05.756000000
     Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
     Metadata:
       _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
       BPS-eng         : 80531
       DURATION-eng    : 00:00:05.736000000
       NUMBER_OF_FRAMES-eng: 338
       NUMBER_OF_BYTES-eng: 57741
       _STATISTICS_WRITING_APP-eng: mkvmerge v51.0.0 ('I Wish') 64-bit
       _STATISTICS_WRITING_DATE_UTC-eng: 2020-12-21 04:14:21
       ENCODER         : Lavc58.119.100 libvorbis
       DURATION        : 00:00:05.719000000
Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (vorbis (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
[libvorbis @ 000001b0c4130a80] Queue input is backward in time
[libx264 @ 000001b0c2399140] using SAR=32/27
[libx264 @ 000001b0c2399140] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 000001b0c2399140] profile High, level 1.2, 4:2:0, 8-bit
[libx264 @ 000001b0c2399140] 264 - core 161 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - 
http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex 
subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 
deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=7 lookahead_threads=1 sliced_threads=0 nr=0 
decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 
direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=23 scenecut=40 intra_refresh=0 
rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to '\-1 1 2.mkv':
   Metadata:
     encoder         : Lavf58.65.101
     Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p(tv, smpte170m, progressive), 240x236 [SAR 
32:27 DAR 640:531], q=2-31, 23.98 fps, 1k tbn (default)
     Metadata:
       DURATION        : 00:00:05.756000000
       encoder         : Lavc58.119.100 libx264
     Side data:
       cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
     Stream #0:1: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp (default)
     Metadata:
       _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
       BPS-eng         : 80531
       DURATION-eng    : 00:00:05.736000000
       NUMBER_OF_FRAMES-eng: 338
       NUMBER_OF_BYTES-eng: 57741
       _STATISTICS_WRITING_APP-eng: mkvmerge v51.0.0 ('I Wish') 64-bit
       _STATISTICS_WRITING_DATE_UTC-eng: 2020-12-21 04:14:21
       DURATION        : 00:00:05.719000000
       encoder         : Lavc58.119.100 libvorbis
frame=    2 fps=0.0 q=0.0 size=       5kB time=00:00:00.36 bitrate= 114.0kbits/s speed=13.7x
[libvorbis @ 000001b0c4130a80] Queue input is backward in time
frame=   92 fps=0.0 q=-1.0 Lsize=     174kB time=00:00:05.70 bitrate= 250.0kbits/s speed=20.3x
video:112kB audio:55kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: 4.748137%
[libx264 @ 000001b0c2399140] frame I:1     Avg QP:21.36  size:  1139
[libx264 @ 000001b0c2399140] frame P:25    Avg QP:23.08  size:  2331
[libx264 @ 000001b0c2399140] frame B:66    Avg QP:27.39  size:   821
[libx264 @ 000001b0c2399140] consecutive B-frames:  2.2%  6.5%  0.0% 91.3%
[libx264 @ 000001b0c2399140] mb I  I16..4: 17.8% 78.7%  3.6%
[libx264 @ 000001b0c2399140] mb P  I16..4:  3.8% 19.1%  3.0%  P16..4: 37.6% 21.5% 10.9%  0.0%  0.0% 
   skip: 4.2%
[libx264 @ 000001b0c2399140] mb B  I16..4:  0.8%  2.5%  0.9%  B16..8: 38.6%  8.0%  2.7%  direct: 
5.2%  skip:41.4%  L0:55.3% L1:35.3% BI: 9.5%
[libx264 @ 000001b0c2399140] 8x8 transform intra:70.4% inter:75.2%
[libx264 @ 000001b0c2399140] coded y,uvDC,uvAC intra: 53.9% 76.7% 21.0% inter: 19.8% 25.2% 2.1%
[libx264 @ 000001b0c2399140] i16 v,h,dc,p: 47% 12% 19% 22%
[libx264 @ 000001b0c2399140] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 15% 18%  3%  5%  8%  5%  8%  4%
[libx264 @ 000001b0c2399140] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 21% 14%  6%  5%  6%  5% 10%  5%
[libx264 @ 000001b0c2399140] i8c dc,h,v,p: 47% 16% 33%  5%
[libx264 @ 000001b0c2399140] Weighted P-Frames: Y:28.0% UV:24.0%
[libx264 @ 000001b0c2399140] ref P L0: 57.0% 15.0% 19.1%  8.3%  0.5%
[libx264 @ 000001b0c2399140] ref B L0: 89.2%  8.5%  2.3%
[libx264 @ 000001b0c2399140] ref B L1: 97.9%  2.1%
[libx264 @ 000001b0c2399140] kb/s:159.04

=====

shuffleframes   ...General frame manipulation that substitutes and/or discards video frames but that 
does not insert (cannot add) frames [1].
shuffleframes=0   ...Default
               ¦
               Template for unlimted substitutions (by existing frames) and/or discards. For example...
               0   ...Passes the input frames to the output, unaltered (does nothing).
               For a pattern of frames with a single, initial substitution:
               0 0    ...For input frames  0 1  2 3  4 5  etc., outputs  0 0  2 2  4 4  etc.
               0 0 2    ...For input frames  0 1 2  3 4 5  6 7 8  etc., outputs  0 0 2  3 3 5  6 6 8 
  etc.
               0 0 2 3   ...For input frames  0 1 2 3  4 5 6 7  8 9 10 11  etc., outputs  0 0 2 3  4 
4 6 7  8 8 10 11  etc.
               For a pattern of frames with a single, final substitution:
               0 0    ...For input frames  0 1  2 3  4 5  etc., outputs  0 0  2 2  4 4  etc.
               0 1 1    ...For input frames  0 1 2  3 4 5  6 7 8  etc., outputs  0 1 1  3 4 4  6 7 7 
  etc.
               0 1 2 2   ...For input frames  0 1 2 3  4 5 6 7  8 9 10 11  etc., outputs  0 1 2 2  4 
5 6 6  8 9 10 10  etc.
               For a pattern of frames with a single, internal substitution:
               0 1 1 3   ...For input frames  0 1 2 3  4 5 6 7  8 9 10 11  etc., outputs  0 1 1 3  4 
5 5 7  8 9 9 11  etc.
               For a pattern of frames with a single, initial discard:
               -1    ...Blocks the pipeline (discards all frames).
               -1 1    ...Blocks the pipeline (discards all frames). ***** Expected  1 3  5 7  etc.
               -1 1 2   ...Blocks the pipeline (discards all frames). ***** Expected  1 2 4  5 7 8  etc.
               For a pattern of frames with a single, final discard:
               0 -1    ...For input frames  0 1  2 3  4 5  etc., outputs  0  2  4  etc.
               0 1 -1    ...For input frames  0 1 2  3 4 5  6 7 8  etc., outputs  0 1  3 4  6 7  etc.
               0 1 2 -1   ...For input frames  0 1 2 3  4 5 6 7  8 9 10 11  etc., outputs  0 1 2  4 
5 6  8 9 10  etc.
               For a pattern of frames with a single, internal discard:
               0 1 -1 3   ...For input frames  0 1 2 3  4 5 6 7  8 9 10 11  etc., outputs  0 1 3  4 
5 7  8 9 11  etc.
               For a pattern of frames with two substitutions (exchange) and a single, internal discard:
               0 3 -1 1   ...For input frames  0 1 2 3  4 5 6 7  8 9 10 11  etc., outputs  0 3 1  4 
7 5  8 11 9  etc.

[1] A scheme utilizing '+' to insert frames (similar to how '-' discards frames) was not implemented.


More information about the ffmpeg-user mailing list