Jak stworzyć animowane obrazy GIF z screencastu?

414

Widziałem animowane obrazy GIF z rzutów ekranowych (jak ten poniżej) kilka razy promowane na tej stronie jako sposób na poprawę odpowiedzi.

Do jakich narzędzi używa się toolchain? Czy istnieje program, który robi to automagicznie, czy ludzie biorą screencasty, przekształcając je w serię statycznych klatek, a następnie tworząc obrazy GIF?

    
zadawane andrewsomething 25.02.2012, 20:19
źródło

15 odpowiedzi

165

Peek to nowa aplikacja, która pozwala łatwo nagrywać GIF-y z ekranu.

W każdym razie, pamiętaj, że GIF mają bardzo ograniczoną paletę kolorów, więc nie jest to dobry pomysł, aby z nich korzystać.

Możesz zainstalować najnowsze wersje Peek na Ubuntu ze swojego PPA .

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

Znajdź więcej informacji w repozytorium GitHub: link

    
odpowiedział Jop V. 06.10.2016, 23:36
źródło
257

Najlepsze oprogramowanie, jakie kiedykolwiek znalazłem, aby nagrywać screencasty GIF to Byzanz.

Byzanz jest świetny, ponieważ nagrywa bezpośrednio na GIF, jakość i FPS są imponujące, przy zachowaniu minimalnego rozmiaru plików.

Instalacja

Byzanz jest teraz dostępny z repozytorium wszechświata:

sudo apt-get install byzanz

Wykorzystanie

Po zainstalowaniu możesz uruchomić go w terminalu.

To jest mały przykład, który właśnie zrobiłem z

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

    
odpowiedział Bruno Pereira 19.04.2012, 21:47
źródło
232

Najpierw zainstaluj to:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

to są wymagane rzeczy, ImageMagick, MPlayer i Desktop Recorder. Następnie użyj Desktop Recorder , aby uchwycić część ekranu / aplikacji do wykorzystania jako screencast. Po zapisaniu nagrania w nagraniu wideo OGV , MPlayer będzie używany do przechwytywania zrzutów ekranu JPEG, zapisując je w katalogu "wyjściowym".

Na terminalu:

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

Użyj ImageMagick , aby przekonwertować zrzuty ekranu na animowane gify.

convert output/* output.gif

Możesz zoptymalizować zrzuty ekranu w ten sposób:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
odpowiedział maniat1k 25.02.2012, 20:40
źródło
136

Omówienie

Ta odpowiedź zawiera trzy skrypty powłoki:

  1. byzanz-record-window - Aby wybrać okno do nagrywania.
  2. byzanz-record-region - Aby wybrać część ekranu do nagrywania.
  3. Prosty front-end GUI dla 1, MHC .

Wprowadzenie

Dziękuję Bruno Pereirze za wprowadzenie mnie do byzanz ! Przydaje się do tworzenia animacji GIF. Kolory mogą w niektórych wypadkach być wyłączone, ale rozmiar pliku to wynagradza. Przykład: 40 sekund, 3,7 MB .

Wykorzystanie

Zapisz jeden / wszystkie z następujących dwóch skryptów w folderze w twoim $PATH . Oto przykład użycia pierwszego skryptu do wykonania screencastu określonego okna.

  1. Uruchom byzanz-record-window 30 -c output.gif
  2. Przejdź do okna (alt-tab), które chcesz przechwycić. Kliknij na niego.
  3. Poczekaj 10 sekund (zakodowane w $DELAY ), w którym przygotowujesz się do nagrywania.
  4. Po sygnale dźwiękowym (zdefiniowanym w funkcji beep ) rozpocznie się byzanz .
  5. Po 30 sekundach (to jest znaczenie 30 w kroku 1), kończy się byzanz . Sygnał będzie ponownie emitowany.

Zawarłem flagę -c w byzanz-record-window , aby zilustrować, że wszelkie argumenty do mojego skryptu powłoki są dołączane do byzanz-record . Flaga -c mówi byzanz , aby również umieścił kursor w screencast.
Zobacz man byzanz-record lub byzanz-record --help , by dowiedzieć się więcej.

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

Zależność: xrectsel od xrectsel . Sklonuj repozytorium i uruchom make , aby pobrać plik wykonywalny. (Jeśli protestuje, nie ma pliku Makefile, uruchom ./bootstrap i ./configure przed uruchomieniem '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

Wersja GUI byzanz-record-window

(komentarz MHC ): Miałem możliwość modyfikowania skryptu za pomocą prostego dialogu 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 }' <<< "$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"
    
odpowiedział Rob W 14.10.2012, 17:44
źródło
48

ffmpeg

Jednym z najlepszych narzędzi, których używam, jest ffmpeg . Może pobrać większość wideo z narzędzia do screencastu, takiego jak kazam i przekonwertować je na inny format.

Zainstaluj to z centrum oprogramowania - zostanie ono automatycznie zainstalowane po zainstalowaniu doskonałego pakietu ubuntu-restricted-extras .

Kazam może wyświetlać w formatach wideo mp4 lub webm . Zwykle uzyskujesz lepsze wyniki w formacie mp4 .

przykładowa składnia GIF

Podstawowa składnia konwersji wideo na gif to:

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

Konwertowane pliki GIF - szczególnie te ze standardową 25/29 klatek na sekundę mogą być bardzo duże. Na przykład - 15-sekundowe wideo o szybkości próbkowania 800 kb przy 25 klatkach na sekundę może wyprowadzić do 435 MB!

Możesz zmniejszyć to poprzez kilka metod:

liczba klatek na sekundę

Użyj opcji -r [frame-per-second]

na przykład ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Rozmiar zmniejszony z 435Mb do 19Mb

limit rozmiaru pliku

Użyj opcji -fs [filesize]

na przykład ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Uwaga - jest to przybliżony rozmiar pliku wyjściowego, więc rozmiar może być nieco większy niż podany.

rozmiar wyjściowego wideo

Użyj opcji -s [widthxheight]

na przykład ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Zmniejszyło to przykładowy rozmiar wideo 1366x768 do 26 MB

pętla na zawsze

Czasem możesz chcieć, aby GIF zapętlał się na zawsze.

Użyj opcji -loop_output 0

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

dalej optymalizuj i zmniejszaj

jeśli użyjesz imagemagick convert przy współczynniku fuzz między 3% a 10%, możesz znacznie zmniejszyć rozmiar obrazu

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

w końcu

Połącz niektóre z tych opcji, aby zredukować do czegoś, co można zarządzać dla Ask Ubuntu.

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

, a następnie

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

przykład

     

    
odpowiedział fossfreedom 05.03.2012, 22:46
źródło
33

Silentcast

Silentcast to kolejne świetne narzędzie oparte na gui do tworzenia animowanych obrazów .gif. Jego funkcje obejmują:

  • 4 tryby nagrywania:

    1. Cały ekran

    2. Okno wewnętrzne

    3. Okno z dekoracją

    4. Wybór niestandardowy

  • 3 formaty wyjściowe:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (ramki)

    5. .mkv

  • Nie jest wymagana instalacja (przenośna)

  • Niestandardowy katalog roboczy

  • Niestandardowe fps

Instalacja

Jeśli chcesz mieć regularną instalację i działa obsługiwana wersja Ubuntu, możesz zainstalować Silentcast przez PPA:

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

Jeśli nie używasz obsługiwanej wersji Ubuntu (naprawdę powinieneś uaktualnić!), musisz pobrać najnowszą wersję z na stronie GitHub i ręcznie zaspakajaj zależności (możesz pobrać yad i ffmpeg z tutaj i tutaj odpowiednio) lub, jeśli używasz nieco nowszej wersji, takiej jak 13.10 możesz spróbować bezpośrednio pobrać .deb .

Jeśli używasz Gnome, możesz chcieć zainstalować rozszerzenie Topicons , aby ułatwić zatrzymanie Silentcast.

Wykorzystanie

Uruchom Silentcast z gui środowiska graficznego lub uruchom polecenie silentcast w terminalu. Wybierz ustawienia i postępuj zgodnie z instrukcjami na ekranie. Po zakończeniu nagrywania zostanie wyświetlone okno dialogowe do optymalizacji końcowego wydruku poprzez usunięcie pewnej liczby klatek.

Aby poznać bardziej szczegółowe wytyczne użytkowania, zapoznaj się z plikiem README: wersja online GitHub lub lokalna wersja zapisana w /usr/share/doc/silentcast z zless lub twoim ulubionym edytorem.

Uwagi:

Silentcast jest wciąż w fazie rozwoju i chociaż jest dość stabilny, możesz napotkać pewne błędy. Jeśli to zrobisz, zgłoś je na temat śledzenia problemów z programem GitHub . Jeśli masz problemy z instalacją z PPA i działa obsługiwana wersja Ubuntu zostaw komentarz poniżej lub skontaktuj się z opiekunem (mnie) na Starter.

    
odpowiedział Seth 29.10.2014, 02:27
źródło
7

Jest tutaj wiele rodzajów skomplikowanych i dobrze działających (prawdopodobnie) sposobów na zrobienie tego. Jednak nigdy nie chciałem przejść tego procesu wcześniej ani później. Tak więc po prostu używam konwertera online, który odpowiada moim potrzebom kilka razy, kiedy muszę to zrobić. Użyłem tej witryny:

link

To nie jest moja strona i nie jestem z nią w żaden sposób powiązany. Są tylko tymi w moich zakładkach i jest ich znacznie więcej.

    
odpowiedział KGIII 17.10.2015, 19:45
źródło
7

Stworzyłem record-gif.sh , ulepszoną wersję Rob W: byzanz-record-region :

  

Uparty GUI dla byzanz , poprawił wygodę użytkownika ( obszar do wyboru myszy , zapisz pasek postępu, odtwarzanie powtórne ).

  • ustaw nagrywanie duration ;
  • ustaw save_as miejsca docelowego;
  • wybierz -z myszą - obszar do nagrania;
  • utwórz skrypt do powtórnego nagrania (patrz $HOME/record.again ).

Zainstaluj

Stworzyłem również skrypt instalacyjny

curl --location https://git.io/record-gif.sh | bash -
    
odpowiedział Édouard Lopez 06.10.2016, 22:27
źródło
3
  1. Zainstaluj te 3 pakiety: imagemagick mplayer gtk-recordmydesktop
  2. Uruchom Desktop Recorder , aby uchwycić część ekranu / aplikacji, która będzie używana jako screencast
  3. Pobierz ogv2gif.sh z linku
  4. Uruchom: ./ogv2gif.sh yourscreencast.ogv
  5. Plik GIF zostanie umieszczony w tym samym katalogu

100% inspiracji z odpowiedzi maniat1k .

    
odpowiedział Nicolas Raoul 30.06.2016, 09:25
źródło
2

Jeśli chcesz stać się jeszcze bardziej wyrafinowanym, możesz użyć bardziej zaawansowanej metody niż animowane gify z wykorzystaniem screencastingu Canvas HTMl5. Projekt x11-canvas-screencast utworzy animowane zrzut ekranu w kanale HTML5.

Być może widziałeś znane przykłady tej technologii na stronie internetowej Sublime Text. x11-canvas-screencast czyni tę metodę o krok dalej, włączając śledzenie kursora myszy. Oto demonstracja tego, co x11- sitodruk generuje

Wynik jest lepszy niż animowany gif, ponieważ nie jest ograniczony do liczby kolorów i zajmuje mniejszą przepustowość.

    
odpowiedział gene_wood 22.09.2015, 19:37
źródło
2

Ok, więc aby uchwycić kliknięcia myszy, jedyną rzeczą, którą znalazłem, było key-mon (przez README screenkey ):

Potem ja:

  • Rozpocznij key-mon
  • Użyj xrectsel , aby ustawić współrzędne ekranu w komendzie byzanz
  • Uruchom polecenie byzanz

... i wygląda to mniej więcej tak:

Zauważ, że key-mon --visible_click narysowałoby kółko wokół wskaźnika myszy po kliknięciu myszki - co wolałbym, ale w systemie Ubuntu 14.04.5 LTS jest nieco zepsuty, ponieważ ten okrąg nie pojawia się i znika wystarczająco szybko, aby poprawnie ilustruje kliknięcia (tj. naciśnięcia i zwolnienia myszy).

    
odpowiedział sdaau 24.08.2016, 06:34
źródło
1

Ostatnio utworzyłem połączoną wersję skryptów już opublikowanych tutaj.
Zasadniczo pozwala na nagrywanie regionu ekranu, ale z prostym GUI.

Dziękujemy za Rob W za udostępnienie tych fajnych skryptów

Oto kod (lub gist jeśli chcesz):

#!/bin/bash

#Records selected screen region, with GUI

#This is combined version of GIF recording scripts, that can be found here: https://911ubuntu.com/questions/148/jak-stworzyc-animowane-obrazy-gif-z-screencastu"%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"
    
odpowiedział Jacajack 26.05.2016, 22:17
źródło
1

Jeśli chcesz również widocznych nagrań kliknięć myszy lub naciśnięć klawiszy, najlepiej jest użyć przycisku ekranowego: link

    
odpowiedział nachtigall 12.06.2016, 08:25
źródło
0

Użyj gtk-recordmydesktop i ffmpeg :

apt-get install gtk-recordmydesktop ffmpeg

Uruchom RecordMyDesktop, przechwytując część ekranu / aplikacji, która będzie używana jako screencast:

gtk-recordmydesktop

Utwórz ogv2gif.sh z następującą treścią:

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

Użyj go:

./ogv2gif.sh yourscreencast.ogv

Piśmiennictwo:

odpowiedział Fedir RYKHTIK 14.02.2017, 10:15
źródło
0

Testuję powyższą metodę, a najprostszą jest:

  1. użyj gtk-recordmydesktop i key-mon , aby uzyskać ogv
  2. ffmpeg -i xx.ogv xx.gif & lt; - bez żadnego parametru .

fps jest oryginalny, a rozmiar gif jest mniejszy niż plik ogv.

    
odpowiedział utopic eexpress 10.03.2017, 11:11
źródło

Przeczytaj inne pytania na temat tagów