如何创建屏幕录制的动态GIF图像?

我曾经在这个网站上看到过几次推广屏幕录制的动态GIF图像(就像下面这个),作为提高答案质量的一种方式。

Animated GIF image

这些是使用什么工具链创建的?有没有一个程序可以自动完成这个过程,还是人们在录制屏幕,将其转换为一系列静态帧,然后再创建GIF图像?

7LICEcap(http://www.cockos.com/licecap)比下面的任何解决方案都要简单得多,因为它是基于图形用户界面的。它是自由和免费的。唯一的缺点是你必须通过Wine来运行它。 - Dennis
5相关:GIF屏幕录制;UNIX的方式来自Unix & Linux Stack Exchange。 - Cristian Ciupitu
2这个示例截图是在Windows上拍摄的吗? - Clément
@Clément 那也是我注意到的第一件事,哈哈 :) - user423626
我认为vokoscreenNG也可以将桌面录制成GIF,但出于某种原因,我在Debian 11上的3.0.7版本没有显示GIF格式进行录制,所以最终我使用了@stommestack提到的Peek程序。Peek在Debian 11上安装非常简单,只需使用stommestack给出的一行命令即可。 - Shawn Eary
只是提醒一下... MP4文件的大小比GIF文件要小...你可以使用OBS...因为我以为GIF文件的大小更小,然后下载了一个50秒的剪辑,结果是7.5MB...哇...而MP4文件在OBS的高质量、中等文件大小设置下只有那个大小的四分之一...你可以通过MP4的配置将其转换为千字节大小。 - undefined
17个回答

窥探

这是一个全新的应用程序,允许您轻松地从屏幕上录制GIF动画。

peek screencast demo

无论如何,记住GIF的颜色调色板非常有限,所以使用它们并不是一个很好的主意。
自Ubuntu 18.10起,您可以直接安装Peek。
sudo apt install peek

对于旧版本的Ubuntu,您可以从PPA安装最新版本的Peek。

sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
sudo apt install peek

GitHub repo中查找更多信息。

3是的,这个很棒。它只适用于X11,并针对GNOME 3设计。 - Ajith R Nair
2@BeastWinterwolf和ExillustX:不要在这里发布错误报告,请使用问题跟踪器,那里的人们真正关心并希望看到它们!请在此处报告:https://github.com/phw/peek/issues - oligofren
4这是一个很棒的工具。 - Mike
1@Jop V. 你是怎么做到记录一个记录的呢? - milkovsky
1@milkovsky 我没有录下这个。话虽如此,我认为他们使用了一个虚拟机并录制了那个。 - jobukkit
很遗憾,它在i3wm上无法运行。 - Wong Jia Hau
偷看还有一个AppImage版本。只需下载并运行它。无需安装! - Foad
你刚刚让我开心了一整天 - Aniket Tiwari
@WongJiaHau 要在i3wm中使用peek,需要安装compton,并在启动peek之前启动compton。 - Flux
似乎PPA不支持Ubuntu 14? - yurenchen
将整个屏幕记录而非仅限于某个区域。 - Wang
1很遗憾,自2023年1月起,Peek已被弃用 - Melebius

拜占庭

我发现的最好的录制GIF屏幕录像的软件是拜占庭。

拜占庭非常优秀,因为它直接记录到GIF文件,质量和FPS令人印象深刻,同时使文件大小最小化。

安装

拜占庭现在可从宇宙库中获取:

sudo apt-get install byzanz

使用方法

安装完成后,您可以在终端中运行它。

这是我刚刚做的一个小例子。

byzanz-record --duration=15 --x=200 --y=300 --width=700 --height=400 out.gif

enter image description here


我有Ubuntu 10.04 LTS,并且附带的是byzanz 0.1.1-4。当我输入"sudo apt-cache showsrc byzanz"时,我发现它在universe/gnome软件源中。我已安装它,它正如你所演示的那样工作。感谢你指出这个很酷的软件包——对于开发人员向客户展示新功能来说,这是一个巨大的时间节省。 - Volomike
5非常感谢,这是一个很好的工具!颜色并不总是准确的,但那只是个小细节。我已经编写了一个shell脚本,可以帮助捕捉窗口(由用户在运行时选择),并在下面的答案中发布了一个链接:点击此处 - Rob W
71拜占庭没有任何用户界面!我是不是应该猜测我想要录制的区域的x、y、宽度和高度?在2014年,我还需要这样做有点荒谬。 - Dan Dascalescu
5@DanDascalescu 没有人说你必须使用它... 我更喜欢终端而不是图形界面,这有什么问题吗? - Bruno Pereira
如果我想要录制窗口的一部分,我必须猜测X、Y坐标以及宽度和高度,直到确定我想要录制的区域。非常麻烦。 - Dan Dascalescu
35@DanDascalescu 没必要猜测。你可以使用“xwininfo”来获取窗口属性。 - Marcus Møller
@RobW “颜色并不总是准确”对我来说这是个轻描淡写的说法,有没有办法控制这个问题? - MichaelChirico
@MichaelChirico 我不知道。 - Rob W
1@MarcusMøller:如果我只想录制窗口的一部分,而不是整个窗口怎么办?手动猜测和输入坐标是很愚蠢的,正如这位先生所写的那样,有一个应用程序可以为您完成这项任务,并称之为byzanz - Dan Dascalescu
1@DanDascalescu: http://askubuntu.com/a/201018/4066 解决了这个问题。 - Nicolas Raoul
8有没有办法避免事先知道持续时间?录音时我从来不知道需要多长时间。 - Nicolas Raoul
@DanDascalescu - 有关窗口的一部分,请参阅http://askubuntu.com/questions/487725/how-can-i-draw-selection-rectangle-on-screen-for-my-script,可以在Ubuntu 14上编译,您启动它,在屏幕上绘制一个矩形,它会自动转储屏幕坐标和相应的byzanz命令。 - sdaau
1@DanDascalescu 这是正常的,在Linux中,拥有命令行工具并配以图形界面是很常见的。例如,GParted用于partedqike-gui用于ike,还有许多其他类似的工具。虽然有人开发了一个应用程序是很棒的,但命令行工具同样也很棒,尤其对于技术倾向的人来说(例如,你可以使用它和cron构建一个小型的家长监控工具)。 - Kroltan
4我最近为Byzanz创建了一个图形用户界面(GUI)。你可以在这里查看:https://github.com/zaak/jscreencaster。 - zaak
xwininfo只会显示整个窗口的大小,或者我做错了什么。但是在Debian上,xdotool getmouselocation对我有用,并且显示鼠标指针的当前位置 - 不错的技巧:watch -t -n 0.0001 xdotool getmouselocation(来自https://stackoverflow.com/a/37238106/4940240)。为了完整起见,这里有一个关于byzanz的“gui-script”:https://www.maketecheasier.com/record-screen-as-animated-gif-ubuntu/ - MacMartin
1@MarcusMøller和其他提出极客回答或点赞的人:Peek答案超过了这个复杂的Byanz设置,这表明用户体验很重要。即使在Linux用户中也是如此。附注:我也是一个极客,但我也理解非极客用户。 - Dan Dascalescu
这似乎已经停产了。 - Wang
@DanDascalescu 在2023年,抱怨一个不是你想要的软件不是你想要的软件似乎是荒谬的。随意不使用它,或者自己编写。哦,如果它是开源软件,你可以节省大量工作,通过使用现有软件来构建你想要的东西。 - undefined
@DanDascalescu 我非常强烈地同意用户体验很重要。有人在这里实现了一些功能。他并没有假装实现用户界面。这并不是他的错,因为它并不存在。他没有像我和你一样实现它。抱怨他没有做更多的事情是不对的,因为他已经做了一些事情。 - undefined

首先安装这个:
sudo apt-get install imagemagick mplayer gtk-recordmydesktop

这些是必需的东西,ImageMagick、MPlayer和桌面录制器。 然后使用桌面录制器来捕捉屏幕/应用程序的一部分作为屏幕录像。在桌面录制器将录制保存为OGV视频之后,将使用MPlayer来捕捉JPEG截图,并将它们保存到“output”目录中。
在终端上:
mplayer -ao null <video file name> -vo jpeg:outdir=output

使用ImageMagick将屏幕截图转换为动态GIF图像。
convert output/* output.gif

你可以这样优化截图:
convert output.gif -fuzz 10% -layers Optimize optimised.gif

35另一种优化gif的方法是使用gifsicle:gifsicle -O in.gif -o out.gif 我刚试了一下,文件大小减小了100倍。 - Yrogirg
10对于那些好奇的人,@Yrogirg命令中的第一个旗帜是大写字母“O”,而不是数字“0” :) - brandizzi
第一个转换命令对我来说没有创建gif,它显示“被终止”并且直接退出。 - DarkLeafyGreen
@ArtWorkAD 请点击这里。你应该调整imagemagik消耗的内存量。 - donovanmuller
2哇,gifsicle只是让我的GIF文件变得更快了,但并没有变小,而且转换优化命令让它变得非常难看。 - MalcolmOcean
6我建议将最后两个convert步骤合并为一个:convert output/* -layers Optimize output.gif。对我来说,这样做既加快了处理时间,又使输出文件更小。我没有看到分开执行这些步骤的任何理由。(我没有尝试-fuzz 10%参数。) - thejoshwolfe
我需要使用 convert <input-files> -limit area 0 -layers Optimize <output-file>;否则由于内存溢出问题,convert 会被终止。 - mpontillo
1像@MalcolmOcean一样,convert语句使它变得非常丑陋。根据文档(http://www.imagemagick.org/script/command-line-options.php#layers),`optimize`实现可能会随时间改变。但是稍微调整了带有`-coalesce`标志的`convert`语句后,情况有所改善,但仍然不够理想。最终,我不得不使用`-layers optimize-transparency设置以获得最佳结果:convert 'output/*.jpg' -coalesce -layers optimize-transparency optimised.gif`。 - user486425

byzanz

概述

本答案包含三个shell脚本:

  1. byzanz-record-window - 用于选择要录制的窗口。
  2. byzanz-record-region - 用于选择要录制的屏幕部分。
  3. 一个简单的GUI前端程序,对应第一个脚本。

介绍

感谢Bruno Pereira向我介绍了byzanz!它非常有用,可以创建GIF动画。在某些情况下,颜色可能会有所偏差,但文件大小弥补了这一点。例如:40秒,3.7Mb

使用方法

将以下两个脚本中的一个/全部保存在您的$PATH文件夹中。这是使用第一个脚本制作特定窗口的屏幕录制的示例。
  1. 运行byzanz-record-window 30 -c output.gif
  2. 转到您想要捕捉的窗口(alt-tab)。点击它。
  3. 等待10秒钟(在$DELAY中硬编码),以便您准备录制。
  4. 在蜂鸣声后(在beep函数中定义),byzanz将开始。
  5. 30秒后(这是步骤1中30的意思),byzanz结束。蜂鸣声将再次播放。
我在byzanz-record-window中加入了-c标志,以说明我的shell脚本的任何参数都会附加到byzanz-record本身。 -c标志告诉byzanz在屏幕录制中也包括光标。
请参阅{{link1:man byzanz-record}}或byzanz-record --help获取更多详细信息。

byzanz-record-window

#!/bin/bash

# Delay before starting
DELAY=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.gif"
fi
XWININFO=$(xwininfo)
read X <<< $(awk -F: '/Absolute upper-left X/{print $2}' <<< "$XWININFO")
read Y <<< $(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W <<< $(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H <<< $(awk -F: '/Height/{print $2}' <<< "$XWININFO")

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done

beep
byzanz-record --verbose --delay=0 --x=$X --y=$Y --width=$W --height=$H $D
beep

byzanz-record-region

依赖项:从xrectsel获取xrectsel。克隆存储库并运行make以获取可执行文件(如果它抗议没有makefile,请运行./bootstrap./configure,然后再运行`make)。

#!/bin/bash

# Delay before starting
DELAY=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.gif"
fi

# xrectsel from https://github.com/lolilolicon/xrectsel
ARGUMENTS=$(xrectsel "--x=%x --y=%y --width=%w --height=%h") || exit -1

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done
beep
byzanz-record --verbose --delay=0 ${ARGUMENTS} $D
beep

byzanz-record-window的图形界面版本

带有简单GUI对话框的脚本:

#!/bin/bash

# AUTHOR:   (c) Rob W 2012, modified by MHC (https://askubuntu.com/users/81372/mhc)
# NAME:     GIFRecord 0.1
# DESCRIPTION:  A script to record GIF screencasts.
# LICENSE:  GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# DEPENDENCIES:   byzanz,gdialog,notify-send (install via sudo add-apt-repository ppa:fossfreedom/byzanz; sudo apt-get update && sudo apt-get install byzanz gdialog notify-osd)

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Delay before starting
DELAY=10

# Standard screencast folder
FOLDER="$HOME/Pictures"

# Default recording duration
DEFDUR=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/freedesktop/stereo/message-new-instant.oga &
}

# Custom recording duration as set by user
USERDUR=$(gdialog --title "Duration?" --inputbox "Please enter the screencast duration in seconds" 200 100 2>&1)

# Duration and output file
if [ $USERDUR -gt 0 ]; then
    D=$USERDUR
else
    D=$DEFDUR
fi

# Window geometry
XWININFO=$(xwininfo)
read X < <(awk -F: '/Absolute upper-left X/{print $2}' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print $2}' <<< "$XWININFO")

# Notify the user of recording time and delay
notify-send "GIFRecorder" "Recording duration set to $D seconds. Recording will start in $DELAY seconds."

#Actual recording
sleep $DELAY
beep
byzanz-record -c --verbose --delay=0 --duration=$D --x=$X --y=$Y --width=$W --height=$H "$FOLDER/GIFrecord_$TIME.gif"
beep

# Notify the user of end of recording.
notify-send "GIFRecorder" "Screencast saved to $FOLDER/GIFrecord_$TIME.gif"

另请参阅:


19这些脚本是否保存在类似GitHub的地方?它们非常有用,如果能够保存在比StackOverflow答案中的文本更好的地方会很不错。 - KFro
2@KFro 这里是Ask Ubuntu,不是SO ;) 不,我没有把它们放在Git仓库中,因为这些脚本本身的文档(供用户使用)很差。随附的文档已经包含在答案中了,所以我认为将文件和文档拆分到Git仓库中没有任何好处。 - Rob W
请注意,xrectsel已从FFcast2中分离出来;它现在是一个独立的存储库,位于https://github.com/lolilolicon/xrectsel。 - Rmano
@Rmano 谢谢你的指点。随意编辑我的答案,以便获得你的发现所应得的荣誉。 - Rob W
1不再有编辑的信用了,但是完成了 ;-). - Rmano
3只是想说非常感谢你,这个回答太棒了,帮了我很多忙。这是我最终得到的结果:这里。如果我的声音关闭了,我也喜欢使用notify-send - Daniel Buckmaster
拜占庭在16.04版本中无法正常工作。 - Léo Léopold Hertz 준영
不要使用 beep \n command \n beep 这样的方式,最好改成这样 - beep \n ( sleep $DURATION; beep; ) & \n command。原因是即使停止录制后,主程序在第二个蜂鸣声响起之前可能需要很长时间来渲染和生成输出。 - Anmol Singh Jaggi
https://github.com/lolilolicon/xrectsel 需要编译,幸运的是它很容易编译,只需将最后一步替换为 sudo make install - Nicolas Raoul
有没有办法避免事先知道持续时间?录音时我从来不知道需要多长时间。 - Nicolas Raoul
2@Masi Byzanz - 这些脚本对我在16.04版本中完全正常运行。 - Jeff Puckett

ffmpeg (安装)

我使用的最好的工具之一是ffmpeg。它可以将来自屏幕录制工具(如kazam)的大多数视频转换为其他格式。

软件中心安装它 - 如果您安装了出色的ubuntu-restricted-extras软件包,它会自动安装。

Kazam可以输出视频格式mp4webm。通常情况下,以mp4格式输出会获得更好的结果。

示例GIF制作语法

将视频转换为gif的基本语法如下:

ffmpeg -i [inputvideo_filename] -pix_fmt rgb24 [output.gif]

转换的GIF图像 - 特别是每秒25/29帧的标准GIF图像可能非常大。例如,以25fps为基础的800Kb、15秒长的webm视频文件可以输出为435 MB!

您可以通过多种方法来减小文件大小:

帧速率

使用选项-r [每秒帧数]。例如

ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

文件大小从435 MB减小到19 MB

文件大小限制

使用选项-fs [filesize]。例如

ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

注意:这是一个近似的输出文件大小,因此实际大小可能会略大于指定值。
输出视频的尺寸
使用选项-s [宽度x高度]。例如
ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

这将把示例1366x768的视频大小减小到26 MB。
无限循环
有时您可能希望GIF永远循环。
使用选项-loop_output 0。例如
ffmpeg -i Untitled_Screencast.webm -loop_output 0 -pix_fmt rgb24 out.gif

进一步优化和缩小

如果您使用imagemagickconvert命令,并将模糊因子设置在3%到10%之间,您可以显著减小图像大小

convert output.gif -fuzz 3% -layers Optimize finalgif.gif

最后

将其中一些选项结合起来,以便在Ask Ubuntu上减少到可管理的程度。

ffmpeg -i Untitled_Screencast.webm -loop_output 0 -r 5 -s 320x200 -pix_fmt rgb24 out.gif

跟着来
convert output.gif -fuzz 8% -layers Optimize finalgif.gif

示例

screencast example


如果你已经安装了Docker,并且你的视频文件名为demo.mkv,你可以运行以下命令:docker run --rm -v $(pwd):/tmp/video/ jrottenberg/ffmpeg -i /tmp/video/demo.mkv -framerate 1/2 -pix_fmt rgb24 -loop 0 /tmp/video/demo.gif,然后执行sudo chown $USER:$USER demo.gif - czerasz
3对我来说,它抱怨说没有-loop_output这样的选项... - user364819
1+1 最佳答案。但是有一个问题,你还认为ubuntu-restricted-extras很棒吗? - Severus Tux
2@ParanoidPanda 现在的选项是-loop。所以应该是-loop 0。这是一个在Ubuntu 16.04.01上可用的命令:ffmpeg -f x11grab -r 25 -s 100x100 -i :0.0+500,500 -pix_fmt rgb24 -loop 0 out2.gif+500,500是开始100x100矩形的X,Y位置。xgrab将屏幕作为输入。 - sanbor

Silentcast

Silentcast 是另一个用于创建动画 .gif 图像的出色 GUI 工具。其特点包括:

  • 4个录制模式:

    1. 整个屏幕

    2. 窗口内部

    3. 带有装饰的窗口

    4. 自定义选择

  • 5种输出格式:

    1. .gif

    2. .mp4

    3. .webm

    4. .png(帧)

    5. .mkv

  • 无需安装(便携版)

  • 自定义工作目录

  • 自定义帧率

安装

如果你想要进行常规安装,并且正在运行受支持的Ubuntu版本,你可以通过PPA安装Silentcast。
sudo add-apt-repository ppa:sethj/silentcast  
sudo apt-get update  
sudo apt-get install silentcast  

如果您没有运行受支持的Ubuntu版本(您真的应该升级!),您将需要从GitHub页面下载最新版本链接,并手动满足依赖项(您可以从这里获取yad和ffmpeg链接2链接3,或者如果您运行稍微更新的版本,如13.10,可以尝试直接下载.deb文件
如果您使用的是Gnome桌面环境,您可能希望安装Topicons扩展程序来更轻松地停止Silentcast。

使用方法

从桌面环境的图形界面启动Silentcast,或在终端中运行“silentcast”命令。选择您的设置并按照屏幕上的提示进行操作。录制完成后,您将看到一个对话框,用于通过删除一定数量的帧来优化最终输出。
要获取更详细的使用指南,请查看README,可以是在线GitHub版本或存储在“/usr/share/doc/silentcast”中的本地版本,使用zless或您喜欢的编辑器打开。

Example

注意事项:

Silentcast仍处于开发阶段,虽然它相当稳定,但您可能会遇到一些错误。如果确实遇到,请在项目的GitHub问题跟踪器上报告它们。如果您在安装PPA时遇到困难,并且正在运行受支持的Ubuntu版本,请在下方留言或通过联系维护者(即我)在Launchpad上进行沟通。


一旦我点击“停止”,它就会崩溃... - Francisco Corrales Morales
@FranciscoCorralesMorales 你能在命令行中运行它然后尝试一下吗?一旦它崩溃了,将输出上传到http://paste.ubuntu.com,并在这里提供链接,这样我就可以查看。谢谢! - Seth
1我可以确认这个方法非常好用!它可以在打开的窗口之外创建一个非常小(650 KB)的.gif文件,并且分辨率很高,就像在这个回答中显示的那样:http://askubuntu.com/questions/882419/how-can-bash-display-in-ubuntus-unity-system-tray/882420#882420 我还要补充一下,@Seth 这位作者是个非常棒的人,他在 AU 的聊天室里帮助我设置了这个方法 :) - WinEunuuchs2Unix
这个项目是被放弃了吗?在近两年里,代码库中都没有任何提交记录。 - Flux
1@flux 很不幸,由于健康问题和大学的原因,是的。目前这个仓库已经被放弃了。然而,GitHub上的项目并没有被放弃,你可以在那里获取最新的代码。 - Seth
6岁的废弃项目 - Wang

我创建了 record-gif.sh,是 Rob W的 byzanz-record-region 的改进版本:

一个简单的GUI工具用于 byzanz,改善了用户体验(可选择的鼠标区域,录制进度条,可重放的录制)。

record desktop with shell

  • 设置录制的时长;
  • 设置保存位置;
  • 用鼠标选择要录制的区域;
  • 创建一个脚本以重放录制内容(参见$HOME/record.again)。

安装

我还创建了一个安装脚本

curl --location https://git.io/record-gif.sh | bash -

1在运行此脚本之前,你需要执行sudo apt install autoconf byzanz。在Ubuntu中,默认情况下它是没有安装的。 - Crantisz
@Crantisz 谢谢,我更新了安装脚本以安装 autoconfbyzanz。你可以试一下吗? - Édouard Lopez
我刚刚在另一台电脑上测试了一下。我的新安装的Ubuntu系统上没有git。而且我不知道为什么,但是脚本在第二个apt-get Y/N问题之后就停止了。你能否将所有依赖项打包成一个命令吗? - Crantisz
1@Crantisz 这个命令是一个安装脚本,如果你只想要 record-gif.sh 文件,你可以从仓库中获取它:点击此处 - Édouard Lopez
错误报告:byzanz必须在执行之前加上GDK_SCALE=1,因为它不支持HiDPI。https://i.imgur.com/Y1KYZdU.gif 在脚本前添加也可以,但很麻烦。 - Mark Jeronimus

这里列出了各种复杂而有效(大概)的方法来完成这个任务。然而,我以前从未想过也不打算经历那个过程。所以,每当我需要这样做的时候,我只是简单地使用一个在线转换工具来满足我的需求。我使用的是这个网站:

http://ezgif.com/video-to-gif

这不是我的网站,我与他们没有任何关联。他们只是我书签中的一个,还有很多其他的。

我喜欢这个。我经常使用SimpleScreenRecorder来录制我的桌面用于YouTube,所以用它将MKV转换成GIF非常容易。 - isaaclw

好的,为了也能捕捉鼠标点击事件,我找到的唯一方法是通过阅读screenkey的README文件,使用key-mon工具: 然后我做了以下步骤:
  • 启动key-mon
  • 使用xrectsel获取屏幕坐标,并将其放入一个byzanz命令中
  • 运行byzanz命令
... 然后看起来就像这样:

out.gif

请注意,key-mon --visible_click会在鼠标点击时在鼠标指针周围画一个圆圈 - 这是我更喜欢的方式,但在Ubuntu 14.04.5 LTS中,这个功能有些问题,因为这个圆圈出现和消失得不够快,无法正确地展示点击(即鼠标按下和释放)的过程。

安装这3个软件包:imagemagick mplayer gtk-recordmydesktop 运行桌面录制器来捕捉屏幕/应用程序的一部分,以用作屏幕录像 从https://github.com/nicolas-raoul/ogv2gif下载ogv2gif.sh 运行:./ogv2gif.sh yourscreencast.ogv GIF文件将放在相同的目录中 100%受到maniat1k's answer的启发。