it-swarm.dev

Jak vytvořit animované GIF obrázky screencastu?

Viděl jsem animované GIF obrázky obsazení obrazovky (jako je ta dole), které byly na tomto webu několikrát propagovány jako způsob, jak zlepšit odpovědi.

Animated GIF image

Jaký nástroj se používá k jejich vytvoření? Existuje program, který to provádí automaticky, nebo lidé berou scénáře, převádějí je do řady statických rámců a pak vytvářejí obrázky GIF?

492
andrewsomething

Peek

Jedná se o novou aplikaci, která vám umožní snadno nahrávat GIF z obrazovky.

peek screencast demo

Každopádně mějte na paměti, že GIF mají velmi omezenou paletu barev, takže není dobrý nápad je používat.

Od Ubuntu 18.10 můžete Peek instalovat přímo.

Sudo apt install peek

U starších verzí Ubuntu můžete nainstalovat nejnovější verze Peek z jeho PPA .

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

Více informací najdete v GitHub repo .

286
stommestack

Byzanz

Nejlepší software, jaký jsem kdy našel pro nahrávání GIF screencastů, je Byzanz.

Byzanz je skvělý, protože nahrává přímo do GIF, kvalita a FPS jsou působivé při zachování velikosti souborů na minimu.

Installation

Byzanz je nyní k dispozici z úložiště vesmíru:

Sudo apt-get install byzanz

Používání

Když je nainstalován, můžete jej spustit v terminálu.

Toto je malý příklad, který jsem právě udělal

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

enter image description here

275
Bruno Pereira

Nejprve nainstalujte toto:

Sudo apt-get install imagemagick mplayer gtk-recordmydesktop

to jsou požadované věci, ImageMagick, MPlayer a Desktop Recorder. Pak použijte Desktop Recorder k zachycení části obrazovky/aplikace, která se použije jako vysílání obrazovky. Poté, co stolní rekordér uloží záznam do OGV video, MPlayer bude použito k zachycení screenshotů JPEG a jejich uložení do adresáře 'output'.

Na terminálu:

mplayer -ao null <video file name> -vo jpeg:outdir=output

Pomocí ImageMagick převeďte snímky obrazovky na animované gify.

convert output/* output.gif

snímky obrazovky můžete optimalizovat takto:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
236
maniat1k

byzanz

Přehled

Tato odpověď obsahuje tři skripty Shell:

  1. byzanz-record-window - Výběr okna pro nahrávání.
  2. byzanz-record-region - Výběr části obrazovky pro nahrávání.
  3. Jednoduchý front-end GUI pro 1.

Úvod

Díky Bruno Pereira za představí mě byzanz ! Je to docela užitečné pro vytváření animací GIF. V některých případech mohou být barvy vypnuté, ale velikost souboru je za to. Příklad: 40 sekund, 3,7 MB .

Používání

Uložte jeden nebo všechny z následujících dvou skriptů do složky v rámci vašeho $PATH. Zde je příklad použití prvního skriptu k vytvoření screencastu konkrétního okna.

  1. Spustit byzanz-record-window 30 -c output.gif
  2. Přejděte do okna (alt-tab), které chcete zachytit. Klikněte na to.
  3. Počkejte 10 sekund (pevně zakódováno v $DELAY), Ve kterém se připravujete na nahrávání.
  4. Po pípnutí (definovaném ve funkci beep) se spustí byzanz.
  5. Po 30 sekundách (to je význam 30 V kroku 1) končí byzanz. Zazní znovu pípnutí.

Do -c Jsem zahrnul příznak byzanz-record-window, Abych dokázal, že všechny argumenty ke svému skriptu Shell jsou připojeny k samotnému byzanz-record. Příznak -c Říká byzanz, aby do screencastu zahrnul také kurzor.
Viz man byzanz-record nebo byzanz-record --help Pro více informací.

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="[email protected]"
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

Závislost: xrectsel od xrectsel . Klonujte úložiště a spusťte make, čímž získáte spustitelný soubor. (Pokud protestuje, že neexistuje žádný makefile, před spuštěním příkazu `make) spusťte ./bootstrap A ./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="[email protected]"
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

Gui verze byzanz-record-window

Skript s jednoduchým dialogem 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"

Viz také:

140
Rob W

ffmpeg Install ffmpeg

Jedním z nejlepších nástrojů, které používám, je ffmpeg. Většinu videí může převzít z nástroje screencast, například kazam, a převést jej do jiného formátu.

Nainstalujte to z softwarového centra - automaticky se nainstaluje, pokud nainstalujete vynikající ubuntu-restricted-extras balíček.

Kazam může vystupovat ve video formátech mp4 nebo webm. Obecně získáte lepší výsledky výstupem v mp4 formát.

příklad syntaxe vytváření GIF

Základní syntaxe pro převod videa do gif je:

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

Převedené GIFy - zejména ty se standardním 25/29 snímkem za sekundu, mohou být velmi velké. Například - 15 000 sekundového videa s rychlostí 800 Kb a rychlostí 25 snímků/s může mít výstup až 435 MB!

Můžete to snížit řadou metod:

snímková frekvence

Použijte možnost -r [frame-per-second]

například ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Velikost snížena z 435 MB na 19 MB

limit velikosti souboru

Použijte možnost -fs [filesize]

například ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Poznámka - jedná se o přibližnou velikost výstupního souboru, takže velikost může být o něco větší, než je uvedeno.

velikost výstupního videa

Použijte možnost -s [widthxheight]

například ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Tím se snížila velikost videa v příkladu 1366 x 768 na 26 MB

navždy

Někdy můžete chtít, aby se GIF navždy opakoval.

Použijte možnost -loop_output 0

ffmpeg -i Untitled_Screencast.webm -loop_output 0 -pix_fmt rgb24 out.gif

dále optimalizovat a zmenšovat

pokud použijete imagemagickconvert s faktorem chmele mezi 3% a 10%, můžete dramaticky snížit velikost obrázku

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

konečně

kombinujte některé z těchto možností a zredukujte se na něco, co lze pro Ask Ubuntu zvládnout.

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

následován

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

příklad

enter image description here

51
fossfreedom

Silentcast

Silentcast je další skvělý nástroj pro vytváření animovaných obrázků GIF. Mezi jeho vlastnosti patří:

  • 4 režimy záznamu:

    1. Celá obrazovka

    2. Vnitřní okno

    3. Okno s ozdobou

    4. Vlastní výběr

  • 3 výstupní formáty:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (snímky)

    5. .mkv

  • Není nutná žádná instalace (přenosná)

  • Vlastní pracovní adresář

  • Vlastní fps

Installation

Pokud chcete pravidelnou instalaci a používáte podporovanou verzi Ubuntu, můžete si nainstalovat Silentcast pomocí PPA:

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

Pokud nepoužíváte podporovanou verzi Ubuntu (měli byste opravdu upgradovat!), Budete si muset stáhnout nejnovější verzi ze stránky GitHub a ručně uspokojit závislosti (můžete získat yad a ffmpeg od zde a zde v tomto pořadí), nebo pokud používáte trochu novější verzi, například 13.10, můžete zkusit stáhnout přímo .deb .

Pokud používáte Gnome, možná budete chtít nainstalovat rozšíření Topicons , aby se zastavilo Silentcast.

Používání

Spusťte Silentcast z gui prostředí vašeho počítače nebo spusťte příkaz silentcast v terminálu. Vyberte nastavení a postupujte podle pokynů na obrazovce. Po dokončení nahrávání se zobrazí dialogové okno pro optimalizaci konečného výstupu odstraněním určitého počtu snímků.

Podrobnější pokyny k použití najdete v README, buď online verze GitHub , nebo místní verzi uloženou v /usr/share/doc/silentcast se zlessem nebo vaším oblíbeným editorem.

Example

Poznámky:

Silentcast je stále ve vývojové fázi a přestože je docela stabilní, můžete narazit na některé chyby. Pokud tak učiníte, nahlaste je v projektu GitHub issues tracker . Pokud máte potíže s instalací z PPA a používáte podporovanou verzi Ubuntu, zanechte komentář níže nebo kontaktujte správce (me) na Launchpadu.

34
Seth

Zde je celá řada komplikovaných a dobře fungujících (pravděpodobně) způsobů, jak toho dosáhnout. Nikdy jsem však nechtěl projít tímto procesem dříve ani od té doby. Takže jednoduše používám online převodník, který vyhovuje mým potřebám, několikrát, kdy to musím udělat. Použil jsem tento web:

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

Nejedná se o můj web a já s nimi nijak nesouvisím. Jsou to jen ty v mých záložkách a je jich mnohem víc.

8
KGIII

Vytvořil jsem record-gif.sh , vylepšená verze Rob W's byzanz-record-region :

Chromý GUI pro byzanz , vylepšil uživatelské prostředí ( oblast, kterou lze vybrat myší , zaznamenat ukazatel průběhu, opakovatelné nahrávání ).

record desktop with Shell

  • nastavit nahrávání duration;
  • set save_as destinace ;
  • vyberte - pomocí myši - oblast, kterou chcete zaznamenat;
  • vytvořte skript pro přehrávání záznamu (srov. $HOME/record.again).

Nainstalujte

Také jsem vytvořil instalační skript

curl --location https://git.io/record-gif.sh | bash -
8
Édouard Lopez
  1. Nainstalujte tyto 3 balíčky: imagemagickmplayergtk-recordmydesktop
  2. Spusťte Desktop Recorder , abyste zachytili část obrazovky/aplikace, která se použije jako vysílání obrazovky
  3. Stažení ogv2gif.sh od https://github.com/nicolas-raoul/ogv2gif
  4. Spustit: ./ogv2gif.sh yourscreencast.ogv
  5. Soubor GIF bude umístěn do stejného adresáře

100% inspirováno odpověď maniat1k .

4
Nicolas Raoul

Pokud chcete dosáhnout ještě lepšího vzhledu, můžete použít sofistikovanější metodu než animované gify pomocí plátna screeningu HTMl5. Projekt x11-canvas-screencast vytvoří animovaný snímek obrazovky html5.

Možná jste viděli nějaké slavné příklady této technologie na webu Sublime Text. x11-canvas-screencast bere tuto metodu o krok dále začleněním sledování kurzoru myši. Zde je kázka toho, co x11-canvas-screencast produkuje

Výsledek je lepší než animovaný gif, protože není omezen na počet barev, které má, a vyžaduje menší šířku pásma.

3
gene_wood

Dobře, abych zachytil i kliknutí myší, jediné, co jsem našel, bylo key-mon (prostřednictvím README z screenkey ):

Pak já:

  • Start key-mon
  • Pomocí xrectsel získejte souřadnice obrazovky do příkazu byzanz
  • Spusťte příkaz byzanz

... a vypadá to takto:

out.gif

Všimněte si, že key-mon --visible_click by po kliknutí myší nakreslil kolem myši ukazatel - což bych dal přednost, ale v Ubuntu 14.04.5 LTS je to poněkud zlomené, protože tento kruh se neobjeví a rychle zmizí, aby správně ilustroval kliknutí (tj. stisknutí a uvolnění myši).

3
sdaau

Pokud chcete také viditelné záznamy kliknutí myší nebo stisknutí kláves, je nejlepší volbou screenkey: https://github.com/wavexx/screenkey

2
nachtigall

Nedávno jsem vytvořil kombinovanou verzi skriptů, které zde již byly zveřejněny.
V podstatě to umožňuje zaznamenat oblast obrazovky, ale s jednoduchým GUI.

Děkujeme za Rob W za poskytnutí těchto skvělých skriptů

Zde je kód (nebo Gist , pokud chcete):

#!/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

Použijte gtk-recordmydesktop a ffmpeg:

apt-get install gtk-recordmydesktop ffmpeg

Spustit RecordMyDesktop zachytit část obrazovky/aplikace použít jako vysílání obrazovky:

gtk-recordmydesktop

Vytvořit ogv2gif.sh s následujícím obsahem:

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

Použij to :

./ogv2gif.sh yourscreencast.ogv

Reference :

1
Fedir RYKHTIK

Testuji všechny výše uvedené metody, zjistil jsem, že nejjednodušší je:

  1. použijte gtk-recordmydesktop a key-mon k získání ogv
  2. ffmpeg -i xx.ogv xx.gif <- bez jakéhokoli parametr.

fps je originální a velikost gif je menší než soubor ogv.

1
utopic eexpress