All Projects → Ambrevar → Emacs Gif Screencast

Ambrevar / Emacs Gif Screencast

Licence: gpl-3.0
[MOVED TO GITLAB] One-frame-per-action GIF recording for optimal quality/size ratio

Projects that are alternatives of or similar to Emacs Gif Screencast

slip
Select and upload screenshots, gifs, and screencasts to imgur and gfycat with help of slop.
Stars: ✭ 25 (-66.22%)
Mutual labels:  screenshot, gif, screencast
Tracker
Even the best of apps have their issues
Stars: ✭ 113 (+52.7%)
Mutual labels:  gif, screencast
svg-screencast
SVG screencast - animated SVG files from screenshots using CSS animations
Stars: ✭ 28 (-62.16%)
Mutual labels:  screenshot, screencast
Imgursniper
📷 A quick and easy Image, Screenshot and Screen recording sharing tool
Stars: ✭ 69 (-6.76%)
Mutual labels:  screenshot, gif
Sharex
ShareX is a free and open source program that lets you capture or record any area of your screen and share it with a single press of a key. It also allows uploading images, text or other types of files to many supported destinations you can choose from.
Stars: ✭ 18,143 (+24417.57%)
Mutual labels:  screenshot, gif
record-desktop
🎥 Effortless GIFs and screenshots on Linux, built with Electron.
Stars: ✭ 65 (-12.16%)
Mutual labels:  screenshot, gif
Menyoki
Screen{shot,cast} and perform ImageOps on the command line 🌱 🏞️
Stars: ✭ 255 (+244.59%)
Mutual labels:  screenshot, screencast
dot-screencap
A screencapturing library
Stars: ✭ 31 (-58.11%)
Mutual labels:  screenshot, gif
Ffcast
Run command on rectangular screen regions
Stars: ✭ 478 (+545.95%)
Mutual labels:  screenshot, screencast
Gifify
😻 Convert any video file to an optimized animated GIF.
Stars: ✭ 5,792 (+7727.03%)
Mutual labels:  gif, screencast
X11 Recorder
xrec helps you capture any area of your screen either as a screenshot or record a gif file.
Stars: ✭ 17 (-77.03%)
Mutual labels:  screenshot, gif
Ffmpegandroid
android端基于FFmpeg实现音频剪切、拼接、转码、编解码;视频剪切、水印、截图、转码、编解码、转Gif动图;音视频合成与分离,配音;音视频解码、同步与播放;FFmpeg本地推流、H264与RTMP实时推流直播;FFmpeg滤镜:素描、色彩平衡、hue、lut、模糊、九宫格等;歌词解析与显示
Stars: ✭ 2,858 (+3762.16%)
Mutual labels:  screenshot, gif
Git Cheats
Git Cheats - Interactive Cheatsheet For Git Commands
Stars: ✭ 124 (+67.57%)
Mutual labels:  screenshot, gif
Kgif
Tool for creating gif file from capturing active window.
Stars: ✭ 94 (+27.03%)
Mutual labels:  screenshot, gif
Peek
Peek makes it easy to create short screencasts of a screen area. It was built for the specific use case of recording screen areas, e.g. for easily showing UI features of your own apps or for showing a bug in bug reports. With Peek, you simply place the Peek window over the area you want to record and press "Record". Peek is optimized for generating animated GIFs, but you can also directly record to WebM or MP4 if you prefer.
Stars: ✭ 8,408 (+11262.16%)
Mutual labels:  gif, screencast
Screen capture lite
cross platform screen/window capturing library
Stars: ✭ 340 (+359.46%)
Mutual labels:  screenshot, screencast
Danneskjold Theme
Beautiful high-contrast emacs theme
Stars: ✭ 26 (-64.86%)
Mutual labels:  screenshot, emacs
Yaxg
capture and record your screen with callbacks
Stars: ✭ 47 (-36.49%)
Mutual labels:  screenshot, screencast
Page2image
📷 page2image is a npm package for taking screenshots which also provides CLI command
Stars: ✭ 66 (-10.81%)
Mutual labels:  screenshot
Color Theme Buffer Local
Set emacs color themes by buffer.
Stars: ✭ 69 (-6.76%)
Mutual labels:  emacs

#+TITLE: Emacs GIF Screencast

One-frame-per-action GIF recording for optimal quality/size ratio.

See [[https://github.com/emacs-helm/helm-system-packages][Helm System Packages]] for examples.

  • Rationale

Most Emacs screencasts are done by first recording a video, then converting it to a [[https://en.wikipedia.org/wiki/GIF][GIF]]. It seems like a waste of resources considering the little animation Emacs features.

Most of the time, one user action equals one visual change. By exploiting this fact, this package tailors GIF-screencasting for Emacs and captures one frame per user action. It's much more efficient than capturing frames even at a frequency as low as 10 per second. You could roughly expect 3 to 10 times smaller files compared to videos of the same quality. (Benchmarks are welcome.)

Conversely, should your Emacs demo feature self-animated content (such as output scrolling in Eshell), no frame will be captured. A workaround consists in hammering some no-op key such as forward-char or end-of-line.

Another neat perk of action-based captures is that it produces /editable/ GIF files: programs such as [[https://www.lcdf.org/gifsicle/][Gifsicle]] or [[https://www.gimp.org/][The GIMP]] can be used to edit the delays or rearrange frames.

This is particularly useful to fix mistakes in "post-processing", without having to record the demo all over again.

  • Features, pros and cons
  • Recordings can be paused and resumed.

  • Resulting GIF files are editable, which allows for post-processing / fixing.

  • Quality is top notch.

  • File-size is optimal.

  • The result might feel a tad jittery sometimes.

  • It won't render self-animated content such as auto-scrolling, this is workable however.

  • It should be much lighter on memory and CPU than video recording.

  • Implementation

Upon start, it adds gid-screencast-capture to pre-command-hook which makes every command (including those called by key presses) take a screenshot. On each screenshot, it records the timestamp.

If paused then resumed, the timestamps are offset by the length of the pause.

When stopped, it compiles the screenshots together into a GIF file using the timestamps to set the appropriate delays for each frame.

  • Setup

You'll need a screenshot program and a GIF converter. Defaults are:

  • gif-screencast-program: [[http://scrot.sourcearchive.com/][scrot]]
  • gif-screencast-convert-program: [[https://imagemagick.org/script/convert.php][convert]] (from the ImageMagick suite)
  • Optional: gif-screencast-optimize-program: [[https://www.lcdf.org/gifsicle/][Gifsicle]]

You can pass arguments to the screenshot program via git-screencast-args to command it to capture only part of the screen, e.g. you can restrict the capture to the Emacs frame with =scrot='s argument =--focused=

You might want to set some bindings for convenience.

#+BEGIN_SRC emacs-lisp (with-eval-after-load 'gif-screencast (define-key gif-screencast-mode-map (kbd "") 'gif-screencast-toggle-pause) (define-key gif-screencast-mode-map (kbd "") 'gif-screencast-stop)) #+END_SRC

Start recording with gif-screencast!

** macOS

macOS requires some additional settings:

#+BEGIN_SRC emacs-lisp (with-eval-after-load 'gif-screencast (setq gif-screencast-args '("-x")) ;; To shut up the shutter sound of screencapture' (seegif-screencast-command'). (setq gif-screencast-cropping-program "mogrify") ;; Optional: Used to crop the capture to the Emacs frame. (setq gif-screencast-capture-format "ppm") ;; Optional: Required to crop captured images. #+END_SRC

[[https://imagemagick.org/script/mogrify.php][mogrify]] is part of the ImageMagick suite.

** Display pressed keys while recording

The [[https://github.com/tarsius/keycast][KeyCast]] package is useful to dispay the pressed keys in the modeline while recording.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].