[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