[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