我看过一些关于屏幕投射的GIF动画图像(如下面的图像)在此站点上得到了几次推广,以改善答案。
使用什么工具链来创建这些工具链?是否有一个程序可以自动执行此操作,还是人们在进行截屏录像,将其转换为一系列静态帧,然后创建GIF图像?
我看过一些关于屏幕投射的GIF动画图像(如下面的图像)在此站点上得到了几次推广,以改善答案。
使用什么工具链来创建这些工具链?是否有一个程序可以自动执行此操作,还是人们在进行截屏录像,将其转换为一系列静态帧,然后创建GIF图像?
Answers:
是一个新的应用程序,可让您轻松地从屏幕上记录GIF。
无论如何,请记住,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存储库中找到更多信息。
我见过的最好的录制GIF截屏视频的软件是Byzanz。
拜占士之所以出色,是因为它直接记录到GIF中,其质量和FPS令人印象深刻,同时将文件的大小保持在最小。
现在可以从Universe存储库中获取Byzanz:
sudo apt-get install byzanz
安装后,您可以在终端中运行它。
这是我刚才做的一个小例子
byzanz-record --duration=15 --x=200 --y=300 --width=700 --height=400 out.gif
xwininfo
用来获取窗口属性。
首先安装:
sudo apt-get install imagemagick mplayer gtk-recordmydesktop
这些是必需的东西,ImageMagick,MPlayer和Desktop Recorder。然后使用Desktop Recorder捕获屏幕/应用程序的一部分以用作屏幕录像。在Desktop Recorder将记录保存到OGV视频之后,将使用MPlayer捕获JPEG屏幕截图,并将其保存到“输出”目录中。
在终端上:
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
gifsicle -O in.gif -o out.gif
我刚刚尝试过,文件大小减少了100倍。
convert
步骤合并为一个:convert output/* -layers Optimize output.gif
。对我来说,这加快了处理时间,并使输出文件更小。我认为没有理由单独执行这些步骤。(我没有尝试过-fuzz 10%
争论。)
convert
语句使它变得更加丑陋。根据文档(imagemagick.org/script/command-line-options.php#layers),optimize
实现会随着时间而变化。但是convert
带有-coalesce
标志的稍微调整的语句可以改善情况,但是仍然不能令人满意。我最终不得不使用该-layers optimize-transparency
设置以获得最佳结果:convert 'output/*.jpg' -coalesce -layers optimize-transparency optimised.gif
该答案包含三个shell脚本:
byzanz-record-window
-选择要录制的窗口。byzanz-record-region
-选择屏幕的一部分进行录制。感谢Bruno Pereira 向我介绍byzanz
!这对于创建GIF动画非常有用。在某些情况下,颜色可能会关闭,但文件大小会弥补这一点。例如:40秒,3.7Mb。
将以下两个脚本之一/全部保存在中的文件夹中$PATH
。这是一个使用第一个脚本对特定窗口进行截屏的示例。
byzanz-record-window 30 -c output.gif
$DELAY
),您准备在其中进行记录。beep
功能中定义)后,byzanz
将开始。30
步骤1中的含义),byzanz
结束。会再次播放哔声。我加入了该-c
标志,byzanz-record-window
以说明我的shell脚本的任何参数都附加到byzanz-record
其自身上。该-c
标志指示byzanz
还将光标包含在截屏中。
请参阅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,请运行make ./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
(MHC的评论):我可以通过简单的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"
我使用的最好的工具之一是ffmpeg
。它可以从诸如的截屏工具中获取大多数视频kazam
,并将其转换为另一种格式。
从软件中心安装它-如果安装了出色的ubuntu-restricted-extras
软件包,它将自动安装。
Kazam可以视频格式mp4
或格式输出webm
。通常,以mp4
格式输出可获得更好的结果。
将视频转换为gif的基本语法是:
ffmpeg -i [inputvideo_filename] -pix_fmt rgb24 [output.gif]
转换的GIF-特别是那些具有标准的每秒25/29帧的GIF可能会很大。例如-800Kb webm的25秒15秒视频可以输出到435Mb!
您可以通过多种方法来减少这种情况:
使用选项 -r [frame-per-second]
例如 ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif
大小从435Mb减少到19Mb
使用选项 -fs [filesize]
例如 ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif
注意-这是一个近似的输出文件大小,因此该大小可以略大于指定的大小。
使用选项 -s [widthxheight]
例如 ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif
这将示例1366x768视频大小减小到26Mb
有时您可能希望GIF永远循环。
使用选项 -loop_output 0
ffmpeg -i Untitled_Screencast.webm -loop_output 0 -pix_fmt rgb24 out.gif
如果您使用imagemagick
convert
的模糊系数在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
例
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
ubuntu-restricted-extras
一个优秀吗?
-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
将屏幕作为输入。
Silentcast是另一个基于gui的出色工具,用于创建动画.gif图像。其功能包括:
4种录音模式:
整个画面
内窗
装饰窗
自定义选择
3种输出格式:
.gif
.mp4
.webm
.png
(框架)
.mkv
无需安装(便携式)
自定义工作目录
自定义fps
如果要常规安装并运行受支持的Ubuntu版本,可以通过PPA安装Silentcast:
sudo add-apt-repository ppa:sethj/silentcast
sudo apt-get update
sudo apt-get install silentcast
如果您没有运行受支持的Ubuntu版本(您应该进行真正的升级!),则需要从GitHub页面下载最新版本,并手动满足相关性(您可以分别从此处和此处购买yad和ffmpeg ),或者,如果您运行的是最新版本,例如13.10,则可以尝试直接下载.deb。
如果您使用的是Gnome,则可能需要安装Topicons扩展程序,以使停止Silentcast更容易。
从桌面环境的gui启动Silentcast或silentcast
在终端中运行命令。选择您的设置并按照屏幕上的提示进行操作。录制完成后,将显示一个对话框,用于通过删除一定数量的帧来优化最终输出。
有关更深入的使用指南,请阅读自述文件,它是在线GitHub版本或/usr/share/doc/silentcast
使用zless或您喜欢的编辑器存储的本地GitHub版本。
Silentcast仍处于开发阶段,尽管它非常稳定,但是您可能会遇到一些错误。如果您愿意,请在项目的GitHub问题跟踪器中报告他们。如果您无法从PPA安装并且正在运行受支持的Ubuntu版本,请在下面发表评论,或与 Launchpad上的维护人员(me)联系。
这里列出了各种复杂且运行良好(大概)的方法。但是,我从来没有想过要经历那个过程。因此,我只需要使用几次适合自己需求的在线转换器即可。我使用了这个网站:
这不是我的网站,也不以任何方式与他们有任何关系。它们只是我的书签中的一个,还有更多。
我创建record-gif.sh
了Rob W'sbyzanz-record-region
的改进版本:
糟糕的GUI
byzanz
,改善了用户体验(鼠标可选区域,记录进度栏,可重播记录)。
duration
;save_as
目的地;$HOME/record.again
)。我还创建了一个安装脚本
curl --location https://git.io/record-gif.sh | bash -
sudo apt install autoconf byzanz
先运行此脚本。默认情况下未在ubuntu中安装它
autoconf
和byzanz
。你可以试试看吗?
imagemagick
mplayer
gtk-recordmydesktop
ogv2gif.sh
从https://github.com/nicolas-raoul/ogv2gif下载./ogv2gif.sh yourscreencast.ogv
100%来自maniat1k的答案。
如果您想变得更高级,可以使用比使用HTMl5帆布截屏动画gif更为复杂的方法。该X11-帆布截屏项目将创建一个HTML5画布动画截屏。
您可能已经在Sublime Text网站上看到了该技术的一些著名示例。x11-canvas-screencast
通过合并对鼠标光标的跟踪,使此方法更进一步。这是x11-canvas-screencast产生的演示
结果比动画gif好,因为它不仅限于它具有的颜色数量,而且占用的带宽更少。
好的,为了也捕获鼠标单击,我发现的唯一是key-mon
(通过的自述文件screenkey
):
sudo apt-get install key-mon
然后我:
key-mon
xrectsel
获得的屏幕坐标放入byzanz
命令byzanz
命令...看起来像这样:
请注意,这key-mon --visible_click
会在单击鼠标时在鼠标指针周围绘制一个圆圈-我更喜欢,但是在Ubuntu 14.04.5 LTS中,此圆圈有些破损,因为该圆圈没有足够快地出现和消失,从而可以正确地说明单击(例如鼠标按下并释放)。
我最近创建了已在此处发布的脚本的组合版本。
基本上,它允许您记录屏幕区域,但是具有简单的GUI。
感谢Rob W提供了这些很棒的脚本
这是代码(如果需要,也可以是要点):
#!/bin/bash
#Records selected screen region, with GUI
#This is combined version of GIF recording scripts, that can be found here: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast
#Thanks to Rob W, and the other author (unmentioned), for creating this lovely scripts
#I do not own any rights to code I didn't write
# ~Jacajack
DELAY=5 #Delay before starting
DEFDUR=10 #Default recording duration
TIME=$(date +"%Y-%m-%d_%H%M%S") #Timestamp
FOLDER="$HOME/Pictures/Byzanz" #Default output directory
#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
#Get coordinates using xrectsel from https://github.com/lolilolicon/xrectsel
REGION=$(xrectsel "--x=%x --y=%y --width=%w --height=%h") || exit -1
notify-send "GIFRecorder" "Recording duration set to $D seconds. Recording will start in $DELAY seconds."
for (( i=$DELAY; i>0; --i )) ; do
sleep 1
done
#Record
beep
byzanz-record --cursor --verbose --delay=0 ${REGION} --duration=$D "$FOLDER/byzanz-record-region-$TIME.gif"
beep
notify-send "GIFRecorder" "Screencast saved to $FOLDER/byzanz-record-region-$TIME.gif"
如果您还希望看到鼠标单击或击键的可见记录,那么screenkey是最好的选择:https : //github.com/wavexx/screenkey
使用gtk-recordmydesktop
和ffmpeg
:
apt-get install gtk-recordmydesktop ffmpeg
运行RecordMyDesktop捕获屏幕/应用程序的一部分以用作屏幕录像:
gtk-recordmydesktop
ogv2gif.sh
使用以下内容创建:
INPUT_FILE=$1
FPS=15
WIDTH=320
TEMP_FILE_PATH="~/tmp.png"
ffmpeg -i $INPUT_FILE -vf fps=$FPS,scale=$WIDTH:-1:flags=lanczos,palettegen $TEMP_FILE_PATH
ffmpeg -i $INPUT_FILE -i $TEMP_FILE_PATH -loop 0 -filter_complex "fps=$FPS,scale=$WIDTH:-1:flags=lanczos[x];[x][1:v]paletteuse" $INPUT_FILE.gif
rm $TEMP_FILE_PATH
用它 :
./ogv2gif.sh yourscreencast.ogv
参考文献: