web-dev-qa-db-ja.com

スクリーンキャストのアニメーションGIF画像を作成する方法は?

このサイトでは、回答を改善する方法として、スクリーンキャストのアニメーションGIF画像(下のような)が何度か宣伝されています。

Animated GIF image

これらを作成するためにどのツールチェーンが使用されていますか?これを自動的に行うプログラムがありますか、それとも人々がスクリーンキャストを撮り、それらを一連の静的フレームに変換してからGIF画像を作成していますか?

472
andrewsomething

ピーク

画面からGIFを簡単に記録できる新しいアプリケーションです。

peek screencast demo

とにかく、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リポジトリ で詳細を確認してください。

264
stommestack

ビザンツ

GIFスクリーンキャストを録画するのに私が見つけた最高のソフトウェアは、Byzanzです。

ByzanzはGIFに直接記録するため、ファイルのサイズを最小限に抑えながら品質とFPSが印象的であるため、素晴らしいです。

Installation

Byzanzは現在、ユニバースリポジトリから入手できます。

Sudo apt-get install byzanz

使用法

インストールされると、ターミナルで実行できます。

これは私が今やった小さな例です

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

enter image description here

272
Bruno Pereira

最初にこれをインストールします:

Sudo apt-get install imagemagick mplayer gtk-recordmydesktop

これらは、必要なもの、ImageMagick、MPlayer、および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
236
maniat1k

概要

この回答には、3つのシェルスクリプトが含まれています。

  1. byzanz-record-window-記録するウィンドウを選択します。
  2. byzanz-record-region-記録する画面の一部を選択します。
  3. MHC による1のシンプルなGUIフロントエンド。

前書き

byzanz を紹介してくれたBruno Pereiraに感謝します! GIFアニメーションを作成するのに非常に便利です。場合によっては色が消えることもありますが、ファイルサイズがそれを補います。例: 40秒、3.7Mb

使用法

$PATH内のフォルダーに次の2つのスクリプトの1つ/すべてを保存します。最初のスクリプトを使用して特定のウィンドウのスクリーンキャストを作成する例を次に示します。

  1. byzanz-record-window 30 -c output.gifを実行します
  2. キャプチャするウィンドウ(alt-tab)に移動します。クリックして。
  3. 10秒間待機し($DELAYにハードコードされます)、ここで記録の準備をします。
  4. ビープ音(beep関数で定義)の後、byzanzが開始されます。
  5. 30秒後(ステップ1の30の意味)、byzanzは終了します。ビープ音が再び放送されます。

-cフラグをbyzanz-record-windowに含めて、シェルスクリプトへの引数が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 from xrectsel リポジトリを複製し、makeを実行して実行可能ファイルを取得します。 (メイクファイルがないと抗議する場合は、 `makeを実行する前に./bootstrap./configureを実行してください)。

#!/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バージョン

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"
136
Rob W

ffmpeg Install ffmpeg

私が使用する最良のツールの1つはffmpegです。 kazamなどのスクリーンキャストツールからほとんどのビデオを取得し、別の形式に変換できます。

これをsoftware-centerからインストールします-優れたubuntu-restricted-extrasパッケージをインストールすると、自動的にインストールされます。

Kazamはmp4またはwebmのビデオ形式で出力できます。一般に、mp4形式で出力すると、より良い結果が得られます。

gIF作成構文の例

ビデオをgifに変換する基本的な構文は次のとおりです。

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

変換されたGIF-特に毎秒25/29フレームの標準のものは非常に大きくなる可能性があります。たとえば、25fpsの800Kb webm 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

さらに最適化および縮小

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

enter image description here

51
fossfreedom

サイレントキャスト

Silentcastは、アニメーションの.gif画像を作成するための、GUIベースの優れたツールです。その機能は次のとおりです。

  • 4つの記録モード:

    1. 画面全体

    2. 内側の窓

    3. 装飾が施された窓

    4. カスタム選択

  • 3つの出力形式:

    1. .gif

    2. .mp4

    3. .webm

    4. .png(フレーム)

    5. .mkv

  • インストール不要(ポータブル)

  • カスタム作業ディレクトリ

  • カスタムfps

Installation

通常のインストールが必要で、Ubuntuのサポートされているバージョンを実行している場合、PPAでSilentcastをインストールできます。

Sudo add-apt-repository ppa:sethj/silentcast  
Sudo apt-get update  
Sudo apt-get install silentcast  

サポートされているバージョンのUbuntuを実行していない場合(実際にアップグレードする必要があります!)、最新バージョンをダウンロードする必要があります GitHubページから と手動で依存関係を満たします(yadおよびffmpegを入手できます) here および here )または、13.10などの少し新しいバージョンを実行している場合は、 。debを直接ダウンロード を試すことができます。

Gnomeを使用している場合は、Silentcastを簡単に停止できるように Topicons extension をインストールすることをお勧めします。

使用法

デスクトップ環境のGUIからSilentcastを起動するか、ターミナルでsilentcastコマンドを実行します。設定を選択して、画面の指示に従います。記録が終了すると、特定のフレーム数を削除して最終出力を最適化するためのダイアログが表示されます。

詳細な使用ガイドラインについては、READMEをご覧ください。 オンラインGitHubバージョン またはzlessまたはお気に入りのエディターで/usr/share/doc/silentcastに保存されているローカルバージョンのいずれかです。

Example

ノート:

Silentcastはまだ開発段階にあり、非常に安定していますが、いくつかのバグが発生する可能性があります。報告してください プロジェクトのGitHub課題トラッカー上 。 PPAからのインストールに問題があり、サポートされているバージョンのUbuntuを実行している場合は、以下のコメントを残すか、Launchpadで メンテナーに連絡 (私)に連絡してください。

34
Seth

ここには、これを行うためのあらゆる種類の複雑で適切な(おそらく)方法があります。しかし、これまでもそれ以降も、このプロセスを経験したことがありません。そのため、必要に応じて、自分のニーズに合ったオンラインコンバータを使用するだけです。私はこのサイトを使用しました:

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

それは私のサイトではなく、私は彼らとは何の関係もありません。これらは私のブックマークの1つに過ぎず、さらに多くのブックマークがあります。

8
KGIII

record-gif.sh を作成しました。これは Rob Wのbyzanz-record-region の改良版です:

byzanz の不完全なGUI、ユーザーエクスペリエンスの向上(マウス選択可能領域、レコードプログレスバー、再生可能な記録)。

record desktop with Shell

  • 記録durationを設定します。
  • save_as宛先を設定します。
  • –マウスで-記録する領域を選択します。
  • 記録を再生するスクリプトを作成します$HOME/record.againを参照)。

インストール

インストールスクリプトも作成しました

curl --location https://git.io/record-gif.sh | bash -
8
Édouard Lopez
  1. 次の3つのパッケージをインストールします。imagemagickmplayergtk-recordmydesktop
  2. Desktop Recorderを実行して、スクリーンキャストとして使用する画面/アプリケーションの一部をキャプチャします
  3. https://github.com/nicolas-raoul/ogv2gif からogv2gif.shをダウンロードします
  4. 実行:./ogv2gif.sh yourscreencast.ogv
  5. GIFファイルは同じディレクトリに配置されます

100% maniat1k's answerに触発された

4
Nicolas Raoul

さらに洗練されたい場合は、HTMl5キャンバススクリーンキャストを使用したアニメーションGIFよりも洗練された方法を使用できます。 x11-canvas-screencast プロジェクトは、html5キャンバスアニメーションスクリーンキャプチャを作成します。

Sublime TextのWebサイトで、この技術の 有名な例 を見たことがあるかもしれません。 x11-canvas-screencastは、マウスカーソルの追跡を組み込むことにより、このメソッドをさらに一歩進めます。 x11-canvas-screencastが生成するもののデモ

結果は、アニメーションGIFよりも優れています。色の数に制限されず、必要な帯域幅が少ないためです。

3
gene_wood

さて、マウスのクリックもキャプチャするために、私が見つけたのはkey-monscreenkey のREADMEを介して) ):

その後私は:

  • key-monを開始
  • xrectsel を使用して、byzanzコマンドに入力された画面座標を取得します。
  • byzanzコマンドを実行します

...それは次のようなものです:

out.gif

key-mon --visible_clickはマウスクリック時にマウスポインターの周りに円を描くことに注意してください-これは私が好むでしょうが、Ubuntu 14.04.5 LTSでは、この円は正しく壊れるのに十分な速さで現れたり消えたりしないため、これは多少壊れていますクリックを示します(マウスを押して離す)。

3
sdaau

マウスクリックまたはキーストロークの可視記録も必要な場合は、screenkeyが最善の策です。 https://github.com/wavexx/screenkey

2
nachtigall

私は最近、すでにここに投稿されたスクリプトの組み合わせバージョンを作成しました。
基本的に、画面領域を記録できますが、シンプルなGUIを使用します。

Rob W これらのクールなスクリプトを提供してくれてありがとう

コードは次のとおりです(または、必要に応じて Gist )。

#!/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"
2
Jacajack

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

参照:

1
Fedir RYKHTIK

上記のすべての方法をテストしましたが、最も簡単な方法は次のとおりです。

  1. gtk-recordmydesktopおよびkey-monを使用してogvを取得します
  2. ffmpeg -i xx.ogv xx.gif <-パラメータなし

fpsはオリジナルで、gifサイズはogvファイルより小さいです。

1
utopic eexpress