Jak vytvořit animované obrazy GIF screencastu?

422

Viděl jsem animované snímky GIF obrazových odlitků (jako je ten níže), které byly na tomto webu několikrát propagovány jako způsob, jak zlepšit odpovědi.

Jakou nástrojovou řadu používáte k vytvoření těchto nástrojů? Existuje nějaký program, který se provádí automaticky, nebo jsou lidé, kteří provádějí screencasty, převádějí je do řady statických snímků a pak vytvářejí obrazy GIF?

    
dané andrewsomething 25.02.2012 20:19

15 odpovědí

177

Peek je nová aplikace, která vám umožní snadno nahrávat GIF z obrazovky.

Mimochodem, mějte na paměti, že GIF mají velmi omezenou paletu barev, takže to není dobrý nápad použít.

Nejnovější verze Peek na Ubuntu můžete nainstalovat z PPA .

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

Další informace naleznete v repo společnosti GitHub: Odkaz

    
odpověděl Jop V. 06.10.2016 23:36
258

Nejlepší software, který jsem kdy zaznamenal při nahrávání GIF, je Byzanz.

Byzanz je skvělý, protože zaznamenává přímo do GIF, kvalita a FPS jsou impozantní při zachování velikosti souborů na minimální.

Instalace

Byzanz je nyní k dispozici z repozitáře vesmíru:

sudo apt-get install byzanz

Použití

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

Jedná se o malý příklad, který jsem udělal právě teď s

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

    
odpověděl Bruno Pereira 19.04.2012 21:47
233

Nejprve nainstalujte toto:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

to jsou požadované věci, ImageMagick, MPlayer a Desktop Recorder. Potom použijte Stolní rekordér pro zachycení části obrazovky / aplikace, kterou chcete použít jako vysílání. Po nahrání záznamu do záznamu video OGV se použije MPlayer pro zachycení snímků JPEG a jejich ukládání do adresáře 'výstup'.

Na terminálu:

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

Použijte ImageMagick k převodu snímků obrazovky do animovaných gifů.

convert output/* output.gif

můžete tyto snímky optimalizovat tímto způsobem:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
odpověděl maniat1k 25.02.2012 20:40
136

Přehled

Tato odpověď obsahuje tři shell skripty:

  1. byzanz-record-window - Výběr okna pro záznam.
  2. byzanz-record-region - Výběr části obrazovky pro záznam.
  3. Jednoduchý GUI rozhraní pro 1, MHC .

Úvod

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

Použití

Uložte jeden / všechny následující dva skripty do složky ve složce$PATH. Zde je příklad použití prvního skriptu pro vytvoření obrazovky konkrétního okna.

  1. Spustitbyzanz-record-window 30 -c output.gif
  2. Přejít na okno (alt-tab), které chcete zachytit. Klikněte na něj.
  3. Počkejte 10 sekund (hard-coded in$DELAY), ve kterém se připravujete pro nahrávání.
  4. Po pípnutí (definované v funkcibeep) spustíbyzanz.
  5. Po 30 sekundách (to je význam30 v kroku 1),byzanz končí. Znovu se ozve pípnutí.

Zahrnul jsem příznak-c vbyzanz-record-window, abych ilustroval, že všechny argumenty na můj skript shell jsou připojeny kbyzanz-record samotné. Příznak-c říkábyzanz také zahrnout kurzor v screencast.
Další podrobnosti naleznete v man byzanz-record nebobyzanz-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 }' <<< "$XWININFO")
read Y <<< $(awk -F: '/Absolute upper-left Y/{print }' <<< "$XWININFO")
read W <<< $(awk -F: '/Width/{print }' <<< "$XWININFO")
read H <<< $(awk -F: '/Height/{print }' <<< "$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 z xrectsel . Klonujte úložiště a spusťte spustitelný soubormake. (Pokud protestuje, že neexistuje makefile, spusťte./bootstrap a./configure před spuštěním '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

Gui verzebyzanz-record-window

(Komentář MHC ): Dostal jsem svobodu upravit skript pomocí jednoduchého dialogu GUI p>

#!/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 }' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print }' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print }' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print }' <<< "$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"
    
odpověděl Rob W 14.10.2012 17:44
49

ffmpeg

Jeden z nejlepších nástrojů, který používám, jeffmpeg. To může trvat většinu videa ze screencastového nástroje, jako jekazam a převést jej do jiného formátu.

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

Kazam může produkovat video formátymp4 nebowebm. Obecně získáte lepší výsledky při výstupu ve formátump4.

Příklad syntaxe vytváření GIF

Základní syntaxe pro konverzi videa do formátu gif je:

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

Převedené GIF - obzvláště ty se standardním rámcem 25 / 29krát za sekundu mohou být velmi velké. Například - video s rychlostí 800 kb 15 sekund videa při rychlosti 25 snímků za sekundu může být vydáno na 435 Mb!

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

framerate

Použijte volbu-r [frame-per-second]

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

Velikost zmenšená z 435Mb na 19Mb

omezení velikosti souboru

Použijte volbu-fs [filesize]

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

Poznámka - je to přibližná velikost souboru výstupu, takže velikost může být o něco větší než zadané.

velikost výstupního videa

Použijte volbu-s [widthxheight]

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

Toto zmenšilo velikost videa ve formátu 1366x768 až na 26Mb

smyčka navždy

Někdy můžete chtít GIF navždy navždy.

Použijte volbu-loop_output 0

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

dále optimalizovat a zmenšit

Pokud použijeteimagemagickconvert s faktorem fuzz mezi 3% a 10%, můžete dramaticky snížit velikost obrázku

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

nakonec

zkombinujte některé z těchto možností, aby se snížilo na něco, co je možné spravovat u Ask Ubuntu.

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

a poté

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

příklad

     

    
odpověděl fossfreedom 05.03.2012 22:46
33

Silentcast

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

  • 4 režimy nahrávání:

    1. Celá obrazovka

    2. Vnitřní okno

    3. Okno s výzdobou

    4. Vlastní výběr

  • 3 výstupní formáty:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (rámce)

    5. .mkv

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

  • Vlastní pracovní adresář

  • Vlastní fps

Instalace

Pokud chcete běžnou instalaci a provozujete podporovanou verzi Ubuntu, můžete nainstalovat Silentcast PPA:

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

Pokud nepoužíváte podporovanou verzi Ubuntu (opravdu byste měli upgrade), musíte si stáhnout nejnovější verzi z na stránce GitHub a ručně uspokojte závislosti (můžete získat yad a ffmpeg z zde a zde ) nebo pokud používáte mírně novější verzi, jako je 13.10 můžete zkusit stahovat přímo .deb .

Používáte-li aplikaci Gnome, možná byste chtěli nainstalovat rozšíření Topicons , abyste usnadnili zastavení funkce Silentcast.

Použití

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

Podrobnější pokyny k použití naleznete na stránce README, buď online verzí GitHub nebo místní verze uložená v/usr/share/doc/silentcast pomocí programu zless nebo vašeho oblíbeného editoru.

Poznámky:

Silentcast je stále ve fázi vývoje a přestože je poměrně stabilní, můžete se setkat s některými chybami. Pokud byste je měli nahlásit, na projektu GitHub issues tracker . Pokud máte problémy s instalací z PPA a máte spuštěnou podporovanou verzi Ubuntu, zanechte komentář níže nebo kontaktujte správce (me) na Launchpad.

    
odpověděl Seth 29.10.2014 02:27
7

Existuje nejrůznější komplikované a dobře fungující (pravděpodobně) způsoby, jak to udělat zde. Nikdy jsem však nechtěl tento proces projít ani předtím. Takže prostě používám online konvertor, který mi vyhovuje několikrát, co to potřebuji. Používal jsem tento web:

Odkaz

Není to můj web a nejsem s nimi žádným způsobem přidružen. Jsou to jen mé záložky a existuje mnoho dalších.

    
odpověděl KGIII 17.10.2015 19:45
7

Vytvořil jsem record-gif.sh , vylepšenou verzi Rob W jebyzanz-record-region :

  

Chybné GUI pro byzanz , vylepšené uživatelské prostředí ( oblast, kterou lze zvolit myší bar záznamu, záznam schopný přehrávání ).

  • nastavte záznamduration;
  • nastavtesave_as destination;
  • vyberte - pomocí myši - oblast, kterou chcete zaznamenat;
  • Vytvořte skript pro přehrávání záznamu (viz$HOME/record.again).

Nainstalovat

Také jsem vytvořil instalační skript

curl --location https://git.io/record-gif.sh | bash -
    
odpověděl Édouard Lopez 06.10.2016 22:27
3

  1. Nainstalujte tyto 3 balíčky:imagemagickmplayergtk-recordmydesktop
  2. Spusťte Stolní rekordér pro zachycení části obrazovky / aplikace, kterou chcete použít jako obrazovku
  3. Stáhnoutogv2gif.sh z Odkazu
  4. Spustit:./ogv2gif.sh yourscreencast.ogv
  5. Soubor GIF bude vložen do stejného adresáře

100% inspirovaný odpovědí maniat1k .

    
odpověděl Nicolas Raoul 30.06.2016 09:25
2

Chcete-li získat ještě více chlápek, můžete použít sofistikovanější metodu než animované gify pomocí skenování plátna HTMl5. Projekt x11-canvas-screencast vytvoří animaci obrazovky html5 animovaného plátna.

Možná jste viděli některé slavné příklady tohoto tech na webových stránkách Sublime Text. x11-canvas-screencast tuto metodu učiní o krok dále tím, že začlení sledování kurzoru myši. Zde je uká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 zabere méně šířky pásma.

    
odpověděl gene_wood 22.09.2015 19:37
2

Ok, takže za účelem zachycení kliknutí myší jediná věc, kterou jsem našel, bylakey-mon (prostřednictvím README z screenkey ):

Pak jsem:

  • Spusťtekey-mon
  • Použijte % co_kde % pro získání souřadnic obrazovky do příkazuxrectsel
  • Spusťte příkazbyzanz

... a vypadá to takto:

Všimněte si, žebyzanz by nakreslil kružnici kolem ukazatele myši po kliknutí myší - což bych dává přednost, ale v Ubuntu 14.04.5 LTS to je poněkud rozbité, protože tento kruh se neobjeví a nezmizí dost rychle, aby správně ilustrují kliknutí (tj. stisknutí myší a uvolnění).

    
odpověděl sdaau 24.08.2016 06:34
1

Nedávno jsem vytvořil kombinovanou verzi skriptů, které již byly zveřejněny V podstatě vám umožňuje zaznamenávat oblast obrazovky, ale pomocí jednoduchého grafického rozhraní.

Děkujeme za Rob W , který vám poskytne ty skvělé skripty

Pokud se vám líbí, zde je kód (nebo seznam ):

#!/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"
    
odpověděl Jacajack 26.05.2016 22:17
1

Pokud chcete také viditelné záznamy kliknutí myší nebo klávesových zkratek, pak je vaše nejlepší sázka: Odkaz

    
odpověděl nachtigall 12.06.2016 08:25
0

Použijtegtk-recordmydesktop affmpeg:

apt-get install gtk-recordmydesktop ffmpeg

Spusťte RecordMyDesktop zachytit část obrazovky / aplikace, kterou chcete použít jako screencast:

gtk-recordmydesktop

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

INPUT_FILE=
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žijte:

./ogv2gif.sh yourscreencast.ogv

Odkazy:

odpověděl Fedir RYKHTIK 14.02.2017 10:15
0

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

  1. Použijte gtk-recordmydesktop a key-mon pro získání ogv
  2. ffmpeg -i xx.ogv xx.gif < - bez parametru .

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

    
odpověděl utopic eexpress 10.03.2017 11:11