[FFmpeg-user] gif overlay miscalculating x and y, extra frame flash

Paul B Mahol onemda at gmail.com
Mon Feb 10 11:31:06 EET 2020


On 2/9/20, S Andreason <sandreas41 at gmail.com> wrote:
> Hi,
> I continued building and rendering after asking some questions last
> week. After 6 days x10 hours per day of
> (render,test,measure,edit,repeat) I finally was able to publish my
> video. In doing so I made it easy to duplicate the bugs I have been seeing.
>
> I have put the 7 files together in one 56Mb package for you to download at
> https://www.seahorsecorral.org/videos/tests/ffmpeg-test-gif.zip
>
> The issue is with -i gif and
> overlay=x=(calculations):y=(calculations):between
> 1. between calculates n differently than the 30fps video,

No, it is completely correct, you give it different timebase and fps
video inputs.
overlay video is 33.33 while main video is 30.00. If you want
consistent results make videos same timebase and fps.

The rest all depends on 1. point.

> 2. the last calculation for x and y are held over in memory for the next
> overlay, resulting in offsets and drift over time.
> 3. occasionally one frame of the gif appears again, outside the range
> given in between, in addition to the frames shown at the correct time
> (ignoring the 33.333/30 drift).
> 4. occasionally one frame inside that range specified in between, is
> left out or skipped.
>
> I made an extensive list of when some or all of the above are seen and
> repeatable. It is in the comments at the end of the .sh file. The
> test1.sh version only loaded one video and one gif file, and thus only
> saw problem #1. By adding a second gif with different color, (this
> test2.sh) then the flashes of the single frame can be identified to it's
> parent. The script generates the test-run "2n" where an orange flash is
> at frame 408 and a red flash at frame 571. If my comments are unclear,
> just ask.
>
> Procedure to duplicate:
> $ ./build-test2.sh p
>   for the perfect png version, which duplicates everything except the
> input file type, and then for the gif version, here is the full output
> as always requested:
> $ ./build-test2.sh
>
> ffmpeg version N-96573-g73aab08d9d Copyright (c) 2000-2020 the FFmpeg
> developers
>    built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
>    configuration: --prefix=/usr/local --enable-gpl --enable-libmp3lame
> --enable-libvorbis --enable-libx264 --enable-libopenjpeg
> --enable-libfreetype --disable-doc --disable-htmlpages
> --disable-podpages --enable-shared --enable-libvpx
> --extra-cflags=-I/usr/include --extra-ldflags=-L/usr/lib/i386-linux-gnu
> --enable-libass --enable-libtesseract --extra-cflags=-msse2
> --enable-openssl --enable-nonfree
>    libavutil      56. 38.100 / 56. 36.101
>    libavcodec     58. 67.100 / 58. 64.101
>    libavformat    58. 37.100 / 58. 35.101
>    libavdevice    58.  9.103 / 58.  9.101
>    libavfilter     7. 72.100 /  7. 68.100
>    libswscale      5.  6.100 /  5.  6.100
>    libswresample   3.  6.100 /  3.  6.100
>    libpostproc    55.  6.100 / 55.  6.100
> [mov,mp4,m4a,3gp,3g2,mj2 @ 0x180e140] st: 0 edit list: 1 Missing key
> frame while searching for timestamp: 2000
> [mov,mp4,m4a,3gp,3g2,mj2 @ 0x180e140] st: 0 edit list 1 Cannot find an
> index entry before timestamp: 2000.
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
> '20190628_163959_driving-WCurlewLkRd-S_30sec_FHDw.MOV':
>    Metadata:
>      major_brand     : qt
>      minor_version   : 0
>      compatible_brands: qt
>      creation_time   : 2019-06-28T16:39:59.000000Z
>      playback_requirements: QuickTime 6.0 or greater
>      playback_requirements-eng: QuickTime 6.0 or greater
>    Duration: 00:00:29.50, start: 0.000000, bitrate: 15212 kb/s
>      Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
> 1920x1080, 15078 kb/s, 30 fps, 30 tbr, 60k tbn, 120k tbc (default)
>      Metadata:
>        creation_time   : 2019-06-28T16:39:59.000000Z
>        handler_name    : Video Handler
>        encoder         : iCatch AVCC
>      Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
> stereo, fltp, 127 kb/s (default)
>      Metadata:
>        creation_time   : 2019-06-28T16:39:59.000000Z
>        handler_name    : Audio Handler
> Input #1, gif, from 'redwave-500x400.gif':
>    Duration: 00:00:01.35, start: 0.000000, bitrate: 2635 kb/s
>      Stream #1:0: Video: gif, bgra, 500x400, 34 fps, 100 tbr, 100 tbn,
> 100 tbc
> Input #2, gif, from 'orangewave-500x400.gif':
>    Duration: 00:00:01.35, start: 0.000000, bitrate: 2635 kb/s
>      Stream #2:0: Video: gif, bgra, 500x400, 34 fps, 100 tbr, 100 tbn,
> 100 tbc
> Stream mapping:
>    Stream #0:0 (h264) -> scale (graph 0)
>    Stream #1:0 (gif) -> split (graph 0)
>    Stream #2:0 (gif) -> overlay:overlay (graph 0)
>    drawtext (graph 0) -> Stream #0:0 (libx264)
>    Stream #0:1 -> #0:1 (aac (native) -> aac (native))
> Press [q] to stop, [?] for help
> [libx264 @ 0x18d2bc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
> AVX LZCNT BMI1 SlowPshufb
> [libx264 @ 0x18d2bc0] profile High, level 3.1
> [libx264 @ 0x18d2bc0] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC
> codec - Copyleft 2003-2016 - 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=6
> lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0
> bluray_compat=0 constrained_intra=0 bframes=2 b_pyramid=2 b_adapt=1
> b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250
> keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf
> mbtree=1 crf=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40
> aq=1:1.00
> Output #0, mp4, to 'test2-out-gif-720e.mp4':
>    Metadata:
>      major_brand     : qt
>      minor_version   : 0
>      compatible_brands: qt
>      playback_requirements-eng: QuickTime 6.0 or greater
>      playback_requirements: QuickTime 6.0 or greater
>      encoder         : Lavf58.35.101
>      Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p,
> 1280x720, q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
>      Metadata:
>        encoder         : Lavc58.67.100 libx264
>      Side data:
>        cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
>      Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
> stereo, fltp, 128 kb/s (default)
>      Metadata:
>        creation_time   : 2019-06-28T16:39:59.000000Z
>        handler_name    : Audio Handler
>        encoder         : Lavc58.67.100 aac
> [mp4 @ 0x18d2100] Starting second pass: moving the moov atom to the
> beginning of the file0.181x
> frame=  840 fps=5.3 q=-1.0 Lsize=   42273kB time=00:00:28.01
> bitrate=12363.2kbits/s speed=0.177x
> video:41964kB audio:280kB subtitle:0kB other streams:0kB global
> headers:0kB muxing overhead: 0.070744%
> [libx264 @ 0x18d2bc0] frame I:56    Avg QP:17.71  size:150429
> [libx264 @ 0x18d2bc0] frame P:280   Avg QP:20.84  size: 63961
> [libx264 @ 0x18d2bc0] frame B:504   Avg QP:23.72  size: 33010
> [libx264 @ 0x18d2bc0] consecutive B-frames:  6.7% 13.3% 80.0%
> [libx264 @ 0x18d2bc0] mb I  I16..4:  5.9% 56.3% 37.9%
> [libx264 @ 0x18d2bc0] mb P  I16..4:  0.9% 13.0%  6.1%  P16..4: 32.6%
> 22.7% 15.8%  0.0%  0.0%    skip: 9.0%
> [libx264 @ 0x18d2bc0] mb B  I16..4:  0.1%  2.1%  1.9%  B16..8: 39.2%
> 14.6%  7.8%  direct: 4.2%  skip:30.0%  L0:43.9% L1:36.4% BI:19.7%
> [libx264 @ 0x18d2bc0] 8x8 transform intra:59.4% inter:60.1%
> [libx264 @ 0x18d2bc0] coded y,uvDC,uvAC intra: 92.6% 93.1% 68.5% inter:
> 35.9% 38.0% 9.1%
> [libx264 @ 0x18d2bc0] i16 v,h,dc,p:  6% 33%  4% 56%
> [libx264 @ 0x18d2bc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 26% 13% 6%  8%
> 7% 10%  7% 14%
> [libx264 @ 0x18d2bc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 28% 10% 7%  9%
> 7% 11%  6% 11%
> [libx264 @ 0x18d2bc0] i8c dc,h,v,p: 47% 31% 12%  9%
> [libx264 @ 0x18d2bc0] Weighted P-Frames: Y:6.1% UV:2.1%
> [libx264 @ 0x18d2bc0] ref P L0: 62.6% 14.8% 16.1%  6.2%  0.2%
> [libx264 @ 0x18d2bc0] ref B L0: 80.8% 16.5%  2.7%
> [libx264 @ 0x18d2bc0] kb/s:12277.17
> [aac @ 0x18d0f40] Qavg: 118.000
>
> Stewart
>
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-user mailing list