[FFmpeg-user] unable to capture desktop session using x11grab on debian jessie with ffmpeg 3.1.4

Mark Thompson sw at jkqxz.net
Tue Nov 8 23:59:08 EET 2016


On 08/11/16 12:17, 肖文良 wrote:
> Built from the latest git source seems not help.
> 
> following command runs about 15+ seconds. nothing was captured. If I add -loglevel debug,  this log keep being printed:
> 
> cur_dts is invalid (this is harmless if it occurs once at the start per stream)
> [rawvideo @ 0x3234840] PACKET SIZE: 4196352, STRIDE: 5464
> 
> Here is the whole command line and output:
> 
> ➜  ffmpeg git:(master) ✗ ./ffmpeg  -s 1366x768 -f x11grab -i :0.0 -c libx264 -crf 28 -preset ultrafast /tmp/output.mp4
> ffmpeg version N-82294-g6f0a171 Copyright (c) 2000-2016 the FFmpeg developers
>   built with gcc 4.9.2 (Debian 4.9.2-10)
>   configuration: --disable-yasm --enable-x11grab --enable-gpl --enable-libx264
>   libavutil      55. 35.100 / 55. 35.100
>   libavcodec     57. 66.101 / 57. 66.101
>   libavformat    57. 57.100 / 57. 57.100
>   libavdevice    57.  2.100 / 57.  2.100
>   libavfilter     6. 66.100 /  6. 66.100
>   libswscale      4.  3.100 /  4.  3.100
>   libswresample   2.  4.100 /  2.  4.100
>   libpostproc    54.  2.100 / 54.  2.100

There is something strange going on here.

I can reproduce the problem precisely by using the ffmpeg package in debian testing, which is close to a vanilla build of 3.2:

$ /usr/bin/ffmpeg -y -f x11grab -i :0 out.mp4
ffmpeg version 3.2-2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 6.2.0 (Debian 6.2.0-10) 20161027
  configuration: --prefix=/usr --extra-version=2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-libtesseract --disable-stripping --disable-decoder=libschroedinger --enable-avresample
--enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme
--enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librubberband --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora
--enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-opengl --enable-sdl2 --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-openal
--enable-frei0r --enable-libopencv --enable-libx264 --enable-chromaprint --enable-shared
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100

But I can't reproduce it at all if I build myself (either git head or the tip of the 3.2 branch).  The 3.2 here really should pretty much identical to the Debian build:

$ ./ffmpeg -y -f x11grab -i :0 out.mp4
ffmpeg version n3.2-3-g7568b0f Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 6.2.0 (Debian 6.2.0-10) 20161027
  configuration: --enable-libx264 --enable-gpl --enable-x11grab
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100

The problem with the Debian version is that the timestamps are messed up somehow - I can work around it there by giving both the -framerate and -r options:

/usr/bin/ffmpeg -y -framerate 30 -r 30 -f x11grab -i :0 out.mp4

at which point it produces the same result as the 3.2 I built myself.

So, I downloaded the source for exactly the debian version from https://packages.debian.org/stretch/ffmpeg, applied their patches and built it myself:

$ ./ffmpeg -y -f x11grab -i :0 out.mp4
ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 6.2.0 (Debian 6.2.0-10) 20161027
  configuration: --enable-libx264 --enable-gpl --enable-x11grab
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100

This also works perfectly.

So, I'm left with the Debian binary being somehow broken, while mine built from supposedly the same source (with the same compiler, but not with the same options) is not?

You say that you can reproduce it with a version built from git - can you offer anything more about your setup which might be relevant to this issue?  While the Debian build does set many options, I don't see how any of them can plausibly be of relevance here.

Thanks,

- Mark



More information about the ffmpeg-user mailing list