如何创建截屏视频的动画 GIF 图像?

and*_*ing 537 screencast

我已经看到在本网站上多次宣传屏幕投射的动画 GIF 图像(如下所示),以此作为改进答案的一种方式。

动画 GIF 图像

使用什么工具链来创建这些?是否有自动执行此操作的程序,或者人们是否正在截屏,将它们转换为一系列静态帧,然后创建 GIF 图像?

sto*_*ack 355

窥视

是一个新的应用程序,可让您轻松地从屏幕录制 GIF。

偷看截屏演示

无论如何,请记住,GIF 的调色板非常有限,因此使用它们并不是一个好主意。

从 Ubuntu 18.10 开始,您可以直接安装 Peek。

sudo apt install peek
Run Code Online (Sandbox Code Playgroud)

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

sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
sudo apt install peek
Run Code Online (Sandbox Code Playgroud)

GitHub 存储库中查找更多信息。

  • 是的,这个很棒。它仅适用于 X11,并且针对 GNOME 3。 (3认同)
  • 这是一个很棒的工具。 (3认同)
  • 不幸的是,自 2023 年 1 月起,[Peek 已弃用](https://github.com/phw/peek/issues/1191)。 (3认同)
  • @BeastWinterwolf 和 ExillustX:不要在这里发布错误报告,在人们真正关心看到它们的地方使用问题跟踪器!在这里报告:https://github.com/phw/peek/issues (2认同)

Bru*_*ira 277

拜占庭

我发现的用于录制 GIF 截屏视频的最佳软件是 Byzanz。

Byzanz 很棒,因为它直接记录到 GIF,质量和 FPS 令人印象深刻,同时将文件的大小保持在最小。

安装

Byzanz 现在可以从 Universe 存储库中获得:

sudo apt-get install byzanz
Run Code Online (Sandbox Code Playgroud)

用法

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

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

byzanz-record --duration=15 --x=200 --y=300 --width=700 --height=400 out.gif
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 拜占庭没有任何用户界面!我应该猜测我想要记录的区域的 x、y、宽度和高度吗?在 2014 年我仍然必须这样做,这有点荒谬。 (68认同)
  • @DanDascalescu 无需猜测。您可以使用 `xwininfo` 来获取窗口属性。 (34认同)
  • 有什么办法可以避免提前知道持续时间?录制时我永远不知道要花多少时间。 (7认同)
  • @DanDascalescu 没有人说你需要使用它......我更喜欢终端而不是 GUI,这有什么问题? (5认同)
  • 谢谢,不错的工具!颜色并不总是准确的,但这是一个小细节。我编写了一个 shell 脚本,它有助于捕获一个窗口(由用户在运行时选择),发布在 [下面的答案](http://askubuntu.com/questions/107726/how-to-create-animated- gif-images-of-a-screencast/201018#201018)。 (4认同)
  • 我最近为拜占庭创建了一个 GUI。你可以在这里查看:https://github.com/zaak/jscreencaster。 (4认同)

man*_*k13 235

首先安装这个:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop
Run Code Online (Sandbox Code Playgroud)

这些是必需的东西,ImageMagick、MPlayer 和 Desktop Recorder。然后使用Desktop Recorder捕获屏幕/应用程序的一部分以用作截屏视频。在 Desktop Recorder 将录制内容保存为OGV 视频后MPlayer将用于捕获 JPEG 屏幕截图,并将它们保存到“输出”目录中。

在终端上:

mplayer -ao null <video file name> -vo jpeg:outdir=output
Run Code Online (Sandbox Code Playgroud)

使用ImageMagick将屏幕截图转换为动画 gif。

convert output/* output.gif
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式优化屏幕截图:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
Run Code Online (Sandbox Code Playgroud)

  • 优化 gif 的另一种方法是使用 gifsicle:`gifsicle -O in.gif -o out.gif` 我刚刚尝试过,文件大小减少了 100 倍。 (35认同)
  • 对于那些想知道的人,@Yrogirg 命令中的第一个标志是大写的“O”,而不是数字“0”:) (10认同)
  • 我建议将最后两个 `convert` 步骤合二为一:`convert output/* -layers Optimize output.gif`。对我来说,这加快了处理时间并使输出文件更小。我认为没有任何理由单独执行这些步骤。(我没有尝试使用 `-fuzz 10%` 参数。) (6认同)
  • 哇,gifsicle 只是让我的更快,但并没有变小,并且 convert optimize 命令使它变得非常丑陋。 (2认同)

Rob*_*b W 144

拜占庭

概述

这个答案包含三个 shell 脚本:

  1. byzanz-record-window - 选择一个窗口进行录制。
  2. byzanz-record-region - 选择屏幕的一部分进行录制。
  3. 一个简单的 GUI 前端,用于 1。

介绍

感谢布鲁诺·佩雷拉 (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 秒后(即30步骤 1 中的含义),byzanz结束。将再次广播哔声。

我在其中包含了-c标志,byzanz-record-window以说明我的 shell 脚本的任何参数都附加到byzanz-record其自身。该-c标志告诉byzanz在截屏视频中也包含光标。
查看man byzanz-recordbyzanz-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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

贵版 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"
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 这些脚本是否保存在 github 之类的地方?它们非常有用,如果将它们保存在比 StackOverflow 答案中的文本更好的地方就好了。 (19认同)
  • 只是想对此表示非常感谢 - 很棒的答案并帮了我很多。[这里是](https://github.com/eightyeight/dotfiles/blob/ubuntu/byzanz/byzanz-record-region) 我最终得到了什么。我也喜欢使用`notify-send`,以防我的声音关闭。 (3认同)
  • @KFro 这是 Ask Ubuntu,而不是 SO ;) 不,我没有将它们放在 git 存储库中,因为脚本本身的文档记录很差(对于用户)。随附的文档包含在答案中,因此我认为在 Git 存储库中拆分文件和文档没有任何好处。 (2认同)
  • @Masi Byzanz - 以及这些脚本 - 在 16.04 对我来说很好用 (2认同)

fos*_*dom 53

ffmpeg安装

我使用的最好的工具之一是ffmpeg. 它可以从截屏工具中获取大部分视频kazam,并将其转换为另一种格式。

软件中心安装它 - 如果你安装了优秀的ubuntu-restricted-extras软件包,它会自动安装。

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

示例 GIF 制作语法

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

ffmpeg -i [inputvideo_filename] -pix_fmt rgb24 [output.gif]
Run Code Online (Sandbox Code Playgroud)

已转换的 GIF - 特别是那些具有标准每秒 25/29 帧的 GIF 可能非常大。例如 - 一个 800Kb 的 webm 15 秒 25fps 视频可以输出到 435 MB!

您可以通过多种方法减少这种情况:

帧率

使用选项-r [frame-per-second]。例如

ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif
Run Code Online (Sandbox Code Playgroud)

大小从 435 MB 减少到 19 MB

文件大小限制

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

ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif
Run Code Online (Sandbox Code Playgroud)

注意:这是一个近似的输出文件大小,因此大小可能比指定的略大。

输出视频大小

使用选项-s [widthxheight]。例如

ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif
Run Code Online (Sandbox Code Playgroud)

这将示例 1366x768 视频大小减少到 26 MB

永远循环

有时您可能希望 GIF 永远循环播放。

使用选项-loop_output 0。例如

ffmpeg -i Untitled_Screencast.webm -loop_output 0 -pix_fmt rgb24 out.gif
Run Code Online (Sandbox Code Playgroud)

进一步优化和收缩

如果使用imagemagick convert3% 到 10% 之间的模糊因子,则可以显着减小图像大小

convert output.gif -fuzz 3% -layers Optimize finalgif.gif
Run Code Online (Sandbox Code Playgroud)

最后

结合这些选项中的一些,以减少对 Ask Ubuntu 的管理。

ffmpeg -i Untitled_Screencast.webm -loop_output 0 -r 5 -s 320x200 -pix_fmt rgb24 out.gif
Run Code Online (Sandbox Code Playgroud)

其次是

convert output.gif -fuzz 8% -layers Optimize finalgif.gif
Run Code Online (Sandbox Code Playgroud)

例子

截屏示例

  • 对我来说,它抱怨没有像`-loop_output`这样的选项...... (3认同)
  • @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` 将屏幕作为输入。 (2认同)

Set*_*eth 34

无声广播

Silentcast 是另一个很棒的基于 gui 的工具,用于创建动画 .gif 图像。其特点包括:

  • 4种录音模式:

    1. 全屏

    2. 内窗

    3. 带装饰的窗户

    4. 自定义选择

  • 3种输出格式:

    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  
Run Code Online (Sandbox Code Playgroud)

如果您没有运行受支持的 Ubuntu 版本(您真的应该升级!),您需要从 GitHub 页面下载最新版本并手动满足依赖项(您可以分别从这里这里获取 yad 和 ffmpeg )或者,如果您运行的是稍微更新的版本,例如 13.10,您可以尝试直接下载 .deb

如果您正在使用 Gnome,您可能需要安装Topicons 扩展,以便更轻松地停止 Silentcast。

用法

从桌面环境的 gui 启动 Silentcast 或silentcast在终端中运行该命令。选择您的设置并按照屏幕上的提示进行操作。完成录制后,您将看到一个对话框,用于通过删除一定数量的帧来优化最终输出。

有关更深入的使用指南,请查看自述文件,无论是在线 GitHub 版本还是/usr/share/doc/silentcast使用 zless 或您喜欢的编辑器存储的本地版本。

例子

笔记:

Silentcast 仍处于开发阶段,尽管它非常稳定,但您可能会遇到一些错误。如果您这样做,请在项目的 GitHub 问题跟踪器上报告它们。如果您在从 PPA 安装时遇到问题并且正在运行受支持的 Ubuntu 版本,请在下面发表评论或联系Launchpad 上的维护者(我)。


KGI*_*III 8

这里列出了各种复杂且有效(大概)的方法来做到这一点。但是,我之前和之后都不想经历这个过程。所以,我只是使用一个适合我需要的在线转换器,我需要这样做几次。我用过这个网站:

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

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


Édo*_*pez 8

我创建record-gif.shRob W 的byzanz-record-region改进版本:

一个蹩脚的图形byzanz用户界面,改善了用户体验(鼠标可选择区域、记录进度条、可重播记录)。

用shell记录桌面

  • 设置录音duration
  • 设定save_as目的地;
  • 用鼠标选择要记录的区域;
  • 创建一个脚本来重播录音(参见$HOME/record.again)。

安装

我还创建了一个安装脚本

curl --location https://git.io/record-gif.sh | bash -
Run Code Online (Sandbox Code Playgroud)