On 08/11/16 21:59, Mark Thompson wrote: > 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.
It is libavdevice in Debian which is broken somehow, not ffmpeg itself. If I inject the system libavdevice into my working shared version built from the same source it fails: $ LD_LIBRARY_PATH=$(echo lib* | sed 's/ /:/g') ldd ./ffmpeg linux-vdso.so.1 (0x00007ffda47a3000) libavdevice.so.57 => libavdevice/libavdevice.so.57 (0x00007fe5b1e13000) libavfilter.so.6 => libavfilter/libavfilter.so.6 (0x00007fe5b19e8000) libavformat.so.57 => libavformat/libavformat.so.57 (0x00007fe5b15d1000) libavcodec.so.57 => libavcodec/libavcodec.so.57 (0x00007fe5b00a1000) libpostproc.so.54 => libpostproc/libpostproc.so.54 (0x00007fe5afe83000) libswresample.so.2 => libswresample/libswresample.so.2 (0x00007fe5afc67000) libswscale.so.4 => libswscale/libswscale.so.4 (0x00007fe5af9df000) libavutil.so.55 => libavutil/libavutil.so.55 (0x00007fe5af764000) ... $ LD_LIBRARY_PATH=$(echo lib* | sed 's/ /:/g') ./ffmpeg -y -f x11grab -i :0 out.mp4 -> works. $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libavdevice.so.57 LD_LIBRARY_PATH=$(echo lib* | sed 's/ /:/g') ./ffmpeg -y -f x11grab -i :0 out.mp4 -> fails. And the other way around, if I inject my just-built libavdevice into the system ffmpeg: $ LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/ /usr/bin/ffmpeg -y -f x11grab -i :0 out.mp4 -> fails. $ LD_PRELOAD=libavdevice/libavdevice.so.57 LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/ /usr/bin/ffmpeg -y -f x11grab -i :0 out.mp4 -> works. Still wondering what can matter in the configuration... - Mark _______________________________________________ ffmpeg-user mailing list ffmpeg-user@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-user To unsubscribe, visit link above, or email ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".