phw / peek

Simple animated GIF screen recorder with an easy to use interface
GNU General Public License v3.0
10.3k stars 320 forks source link

Cannot record GIF or APNG #198

Closed gort818 closed 7 years ago

gort818 commented 7 years ago

I am using arch linux and on the latest development version I can no longer recorder GIF or APNG file formats. Release 1.1.0 works perfectly.

Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used) /home/user/.cache/peek/peekQTVC8Y.png: Invalid data found when processing input Error: Child process exited with code 1 Temp file delete error: Error removing file /home/user/.cache/peek/peekQ5IH8Y.gif: No such file or directory

phw commented 7 years ago

Weird. Looks like something goes wrong when the palette file gets generated. Can you post the complete output of Peek? I suspect the actual issue is already earlier, maybe we can see something in the output. Also it is important to know whether the ffmpeg or gnome shell backend was used (it will always be ffmpeg unless you are using gnome shell).

For a quick workaround run peek with PEEK_POSTPROCESSOR=imagemagick peek and it will use the old approach for GIF (this won't help with APNG, this only works with the new code).

gort818 commented 7 years ago

Using screen recorder backend ffmpeg webmgifffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 7.2.0 (GCC) 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-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3 libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 Input #0, x11grab, from ':0+227,101': Duration: N/A, start: 1508689385.013648, bitrate: N/A Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 479x193, 10 fps, 10 tbr, 1000k tbn, 1000k tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> pam (native)) Press [q] to stop, [?] for help Finishing stream 0:0 without any data written to it. Output #0, rawvideo, to '/home/alessandro/.cache/peek/peekB8527Y.pam': Metadata: encoder : Lavf57.83.100 Stream #0:0: Video: pam, rgb24, 479x193, q=2-31, 200 kb/s, 10 fps, 10 tbn, 10 tbc Metadata: encoder : Lavc57.107.100 pam frame= 0 fps=0.0 q=0.0 Lsize= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used) ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 7.2.0 (GCC) 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-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3 libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 /home/alessandro/.cache/peek/peekB8527Y.pam: Invalid data found when processing input Error: Child process exited with code 1 ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 7.2.0 (GCC) 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-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3 libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 /home/alessandro/.cache/peek/peekB8527Y.pam: Invalid data found when processing input Error: Child process exited with code 1 Error deleting palette file: Error removing file /home/alessandro/.cache/peek/peekQNCC8Y.png: No such file or directory File save error: Error when getting information for file “/home/alessandro/.cache/peek/peek3LEG8Y.gif”: No such file or directory Temp file delete error: Error removing file /home/alessandro/.cache/peek/peek3LEG8Y.gif: No such file or directory

gort818 commented 7 years ago

Here is the output with the workaround

PEEK_POSTPROCESSOR=imagemagick ./peek Using screen recorder backend ffmpeg gifffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 7.2.0 (GCC) 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-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3 libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 Input #0, x11grab, from ':0+227,101': Duration: N/A, start: 1508689469.701404, bitrate: N/A Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 479x193, 10 fps, 10 tbr, 1000k tbn, 1000k tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> pam (native)) Press [q] to stop, [?] for help Finishing stream 0:0 without any data written to it. Output #0, rawvideo, to '/home/alessandro/.cache/peek/peekYD067Y.pam': Metadata: encoder : Lavf57.83.100 Stream #0:0: Video: pam, rgb24, 479x193, q=2-31, 200 kb/s, 10 fps, 10 tbn, 10 tbc Metadata: encoder : Lavc57.107.100 pam frame= 0 fps=0.0 q=0.0 Lsize= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used) convert: improper image header /home/alessandro/.cache/peek/peekYD067Y.pam' @ error/pnm.c/ReadPNMImage/284. convert: no images defined/home/alessandro/.cache/peek/peek3L1I8Y.gif' @ error/convert.c/ConvertImageCommand/3258. Error: Child process exited with code 1 File save error: Error when getting information for file “/home/alessandro/.cache/peek/peek3L1I8Y.gif”: No such file or directory Temp file delete error: Error removing file /home/alessandro/.cache/peek/peek3L1I8Y.gif: No such file or directory

gort818 commented 7 years ago

Also I just tested on Ubuntu 17.10 if backed is gnome-shell it works brilliantly, but if I use ffmpeg it saves the file as a gif but unfortunately it is just a static image.

peek 2017-10-22 19-34

irk3n-dev commented 7 years ago

I have the same problem with Ubuntu 17.10

WARNING: library configuration mismatch

phw commented 7 years ago

@gort818 This is very strange, are you sure release 1.1.0 works? Because your ffmpeg recording already fails, in both cases the recorded file is empty ("Output file is empty, nothing was encoded" and "Finishing stream 0:0 without any data written to it."). And absolutely nothing changed in this regard, ffmpeg in 1.1.0 gets called exactly as in the current development version. For how long did you record? What desktop environment are you using?

@irk3n-dev Likely a different issue, please open a new issue and post the full console output of Peek there.

gort818 commented 7 years ago

@phw Here is the output using release peek-1.1.0 it works beautifully , I am using Cinnamon. I tried recording for a few seconds and up to a minute

./peek-1.1.0 Using screen recorder backend ffmpeg ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 7.2.0 (GCC) 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-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3 libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 Input #0, x11grab, from ':0+331,138': Duration: N/A, start: 1508974958.940594, bitrate: N/A Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 677x450, 10 fps, 10 tbr, 1000k tbn, 1000k tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> pam (native)) Press [q] to stop, [?] for help Output #0, rawvideo, to '/home/alessandro/.cache/peek/peekXXXXXX.pam': Metadata: encoder : Lavf57.83.100 Stream #0:0: Video: pam, rgb24, 677x450, q=2-31, 200 kb/s, 10 fps, 10 tbn, 10 tbc Metadata: encoder : Lavc57.107.100 pam frame= 11 fps=0.0 q=-0.0 size= 9728kB time=00:00:01.10 bitrate=72447.1kbitsframe= 16 fps= 16 q=-0.0 size= 14080kB time=00:00:01.60 bitrate=72089.6kbitsframe= 22 fps= 14 q=-0.0 size= 19456kB time=00:00:02.20 bitrate=72447.1kbitsframe= 28 fps= 13 q=-0.0 size= 24832kB time=00:00:02.80 bitrate=72651.3kbitsframe= 34 fps= 12 q=-0.0 size= 30208kB time=00:00:03.40 bitrate=72783.5kbitsframe= 40 fps= 12 q=-0.0 size= 35584kB time=00:00:04.00 bitrate=72876.0kbitsframe= 45 fps= 12 q=-0.0 size= 39936kB time=00:00:04.50 bitrate=72701.3kbitsframe= 51 fps= 11 q=-0.0 size= 45312kB time=00:00:05.10 bitrate=72783.5kbitsframe= 57 fps= 11 q=-0.0 size= 50688kB time=00:00:05.70 bitrate=72848.4kbitsframe= 63 fps= 11 q=-0.0 size= 56064kB time=00:00:06.30 bitrate=72901.0kbitsframe= 69 fps= 11 q=-0.0 size= 61440kB time=00:00:06.90 bitrate=72944.4kbitsframe= 75 fps= 11 q=-0.0 size= 66816kB time=00:00:07.50 bitrate=72980.9kbitsframe= 80 fps= 11 q=-0.0 size= 71168kB time=00:00:08.00 bitrate=72876.0kbitsframe= 85 fps= 11 q=-0.0 Lsize= 75870kB time=00:00:08.50 bitrate=73121.0kbits/s speed=1.06x
video:75870kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000% peek 2017-10-25 16-42

phw commented 7 years ago

Still not sure what is happening here. I checked, the recording of the pam file is completely unchanged compared to 1.1.0 . Also cannot reproduce, maybe I have to test with Cinnamon.

sQVe commented 7 years ago

I have this exact issue too. Going from AUR package peek-git to peek (which is version 1.1.0) solves the issue.

gort818 commented 7 years ago

@sQVe What de are you using?

sQVe commented 7 years ago

@gort818 I'm not using a DE. I only use i3 as a window manager.

jtyr commented 7 years ago

I'm using Arch Linux with KDE and I have problems with Peek built from the peek as well as from the peek-git package. The final GIF has only ~10KiB. I can see the size of the ~/.cache/peek/peekXXXXXX.pam file is increasing but if I try to play it with VLC, it loops only the first second (like in the final GIF). There are no errors in the Peek logs:

$ peek                               
Using screen recorder backend ffmpeg
ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  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-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, x11grab, from ':0+959,494':
  Duration: N/A, start: 1509278715.154771, bitrate: N/A
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 955x548, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> pam (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to '/home/user/.cache/peek/peekXXXXXX.pam':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #0:0: Video: pam, rgb24, 955x548, q=2-31, 200 kb/s, 10 fps, 10 tbn, 10 tbc
    Metadata:
      encoder         : Lavc57.107.100 pam
frame=  123 fps= 10 q=-0.0 Lsize=  188594kB time=00:00:12.30 bitrate=125606.6kbits/s speed=1.02x    
video:188594kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

EDIT: I have discovered that if I disable Plasma 5 effects (CTRL+ALT+F12), it starts recording just fine.

phw commented 7 years ago

Can you all try the latest git revision again? I could finally reproduce, changed the intermediary output format. This is probably an intermediate fix, but curious if it fixes your issues.

ronjouch commented 7 years ago

Can you all try the latest git revision again? I could finally reproduce, changed the intermediary output format. This is probably an intermediate fix, but curious if it fixes your issues.

@phw fixes the problem for me 👍.

ronjouch commented 7 years ago

@phw ah, maybe you already know, but also note that the fix broke PEEK_POSTPROCESSOR=imagemagick for me. With the fix, I get this:

~ PEEK_POSTPROCESSOR=imagemagick /opt/peek/build/peek

** (peek:30606): WARNING **: Binding '<Ctrl><Alt>R' failed!
Using screen recorder backend ffmpeg
ffmpeg version 3.4-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 6.4.0 (Debian 6.4.0-7) 20170920
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
[x11grab @ 0x48d9ee0] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, x11grab, from ':0+654,459':
  Duration: N/A, start: 1509724229.505680, bitrate: N/A
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1233x547, 5 fps, 1000k tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> ffvhuff (native))
Press [q] to stop, [?] for help
Output #0, matroska, to '/home/ronj/.cache/peek/peekHFWZ8Y.mkv':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #0:0: Video: ffvhuff (FFVH / 0x48564646), rgb24, 1233x547, q=2-31, 200 kb/s, 5 fps, 1k tbn, 5 tbc
    Metadata:
      encoder         : Lavc57.107.100 ffvhuff
frame=   53 fps=5.2 q=-0.0 Lsize=   37271kB time=00:00:10.40 bitrate=29355.4kbits/s speed=1.02x
video:37268kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.009093%
convert: no decode delegate for this image format `MKV' @ error/constitute.c/ReadImage/501.
convert: no images defined `/home/ronj/.cache/peek/peekM6ZQ8Y.gif' @ error/convert.c/ConvertImageCommand/3210.
Error: Child process exited with code 1
File save error: Error when getting information for file '/home/ronj/.cache/peek/peekM6ZQ8Y.gif': No such file or directory
Temp file delete error: Error removing file: No such file or directory
phw commented 7 years ago

ah, maybe you already know,

I didn't know, but I kind of expected this (it works for me, but ImageMagick relies on global config files for this). But I think the ImageMagick backend just has to go, especially when we have both ffmpeg (fast, low RAM usage, small gif size, ok quality) and gifski (slow, low RAM usage, large GIF size, excellent quality) ImageMagick does not bring anything to the table (slow, huge RAM usage, small gif size, ok quality)

phw commented 7 years ago

This is fixed in the git master branch.

gort818 commented 7 years ago

@phw Awesome thanks !

C0rn3j commented 7 years ago

@phw Please do a release with this bugfix, it took me a while to figure out why I can't take any video ^^

phw commented 7 years ago

@C0rn3j This specific bug was never released and is already fixed. If you have issues recording with the current stable version I recommend trying the latest development version. But there will be a new release soon.

C0rn3j commented 7 years ago

I did indeed have issues on the stable version, using devel version made it work.

Good to hear a release is gonna come soon.