[FFmpeg-trac] #5878(avformat:new): x11grab slow with smaller -video_size

FFmpeg trac at avcodec.org
Fri Oct 7 14:31:35 EEST 2016


#5878: x11grab slow with smaller -video_size
-------------------------------------+-------------------------------------
             Reporter:  lolilolicon  |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:  avformat     |                  Version:
             Keywords:  x11grab      |  unspecified
  video_size                         |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 == Summary of the bug ==

 When using x11grab to take a PNG screenshot, smaller `-video_size` values
 take
 significantly longer than larger values:

 {{{
 size      real  user  sys
 100x100   0.724 0.020 0.003
 200x300   0.731 0.023 0.007
 800x100   0.558 0.023 0.000
 200x500   0.461 0.023 0.003
 1000x100  0.459 0.020 0.003
 200x700   0.327 0.020 0.007
 1400x100  0.327 0.020 0.003
 200x900   0.265 0.023 0.007
 800x300   0.230 0.017 0.010
 600x500   0.198 0.023 0.007
 1000x300  0.197 0.020 0.010
 1000x500  0.137 0.027 0.007
 1000x700  0.110 0.037 0.007
 1600x900  0.095 0.050 0.007
 }}}

 For perspective, the ImageMagick command `import` takes consistantly
 around
 `0.350` second, which is not good, but still better than FFmpeg for
 video_size
 smaller than around `373x373`.

 == How to reproduce ==

 This is the command I used to get the time values above:

 {{{
 % time ffmpeg -nostdin -loglevel error -f x11grab -draw_mouse 0
 -show_region 0 -video_size 100x100 -i :0+0\,0 -f image2 -codec:v png
 -frames:v 1 - >/dev/null

 real  0.724
 user  0.020
 sys   0.003
 }}}

 A simple `strace` shows most of the time is spent by `shmget`.

 {{{
 % strace -r ffmpeg -nostdin -loglevel error -f x11grab -draw_mouse 0
 -show_region 0 -video_size 400x500 -i :0+0\,0 -f image2 -codec:v png
 -frames:v 1 - >/dev/null |& grep shmget
      0.033343 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505544790
      0.032619 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505577559
      0.032847 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505610328
      0.032514 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505643097
      0.032756 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505675866
      0.032881 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505708635
      0.032862 shmget(IPC_PRIVATE, 800032, IPC_CREAT|0777) = 505741404
 }}}
 Total time spend for by `shmget`: `0.229822` (out of `0.262` real time)

 {{{
 % strace -r ffmpeg -nostdin -loglevel error -f x11grab -draw_mouse 0
 -show_region 0 -video_size 100x100 -i :0+0\,0 -f image2 -codec:v png
 -frames:v 1 - >/dev/null |& grep shmget
      0.033303 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504758357
      0.032914 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504791127
      0.033090 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504823896
      0.032941 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504856665
      0.033167 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504889434
      0.033067 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504922203
      0.033127 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504954972
      0.033105 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 504987741
      0.033197 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505020510
      0.033091 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505053279
      0.033189 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505086048
      0.032985 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505118817
      0.032978 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505151586
      0.033139 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505184355
      0.033065 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505217124
      0.033025 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505249893
      0.032777 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505282662
      0.032937 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505315431
      0.032944 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505348200
      0.033133 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505380969
      0.033121 shmget(IPC_PRIVATE, 40032, IPC_CREAT|0777) = 505413738
 }}}
 Total time spend for by `shmget`: `0.694295` (out of `0.724` real time).

 ----
 {{{
 ffmpeg version 3.1.3 Copyright (c) 2000-2016 the FFmpeg developers
 built with gcc 6.2.1 (GCC) 20160830
 configuration: --prefix=/usr --disable-debug --disable-static --disable-
 stripping --enable-avisynth --enable-avresample --enable-fontconfig
 --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass
 --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-
 libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame
 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg
 --enable-libopus --enable-libpulse --enable-libschroedinger --enable-
 libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-
 libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-netcdf
 --enable-shared --enable-version3 --enable-x11grab
 libavutil      55. 28.100 / 55. 28.100
 libavcodec     57. 48.101 / 57. 48.101
 libavformat    57. 41.100 / 57. 41.100
 libavdevice    57.  0.101 / 57.  0.101
 libavfilter     6. 47.100 /  6. 47.100
 libavresample   3.  0.  0 /  3.  0.  0
 libswscale      4.  1.100 /  4.  1.100
 libswresample   2.  1.100 /  2.  1.100
 libpostproc    54.  0.100 / 54.  0.100
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/5878>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list