Как создать анимированные GIF-изображения скринкаста?

Я видел анимированные GIF-изображения скриншотов (как на картинке ниже), которые несколько раз рекламировались на этом сайте как способ улучшить ответы.

Animated GIF image

Какой набор инструментов используется для их создания? Есть ли программа, которая делает это автоматически, или люди снимают скриншоты, преобразуют их в серию статических кадров, а затем создают изображения GIF?

537
задан 3 September 2012 в 06:19

16 ответов

Peek

- это новое приложение, которое позволяет легко записывать GIF-файлы с экрана.

peek screencast demo

В любом случае, имейте в виду, что GIF-файлы имеют очень ограниченную цветовую палитру, поэтому это не очень хорошо идея их использования.

Начиная с Ubuntu 18.10, вы можете установить Peek напрямую.

sudo apt install peek

Для более старых версий Ubun tu, вы можете установить последние версии Peek из его PPA .

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

Дополнительную информацию можно найти в репозитории GitHub .

319
ответ дан 3 September 2012 в 06:19

ባይዛንዝ

የጂአይኤፍ ማያ ገጽ ማሳያዎችን ለመቅዳት ያገኘኋቸው ምርጥ ሶፍትዌሮች ባይዛንዝ ናቸው ፡፡ የፋይሎችን መጠን በትንሹ።

ጭነት

ባይዛንዝ አሁን ከአጽናፈ ሰማይ ማከማቻ ይገኛል:

sudo apt-get install byzanz

አጠቃቀም

ሲጫን በተርሚናል ውስጥ ማስኬድ ይችላሉ።

ይህ አሁን በ

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

enter image description here

275
ответ дан 3 September 2012 в 06:19

Сначала установите это:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

это необходимые вещи, ImageMagick, MPlayer и Desktop Recorder. Затем используйте Desktop Recorder , чтобы захватить часть экрана / приложения для использования в качестве скринкаста. После того, как Desktop Recorder сохранит запись в видео OGV , MPlayer будет использоваться для захвата снимков экрана в формате JPEG, сохраняя их в каталоге «output».

На терминале:

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

Используйте ImageMagick для преобразования снимков экрана в анимированные гифки.

convert output/* output.gif

вы можете оптимизировать снимки экрана следующим образом:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
236
ответ дан 3 September 2012 в 06:19

byzanz

Обзор

Этот ответ содержит три сценария оболочки:

  1. byzanz-record-window - Выбор окна для записи.
  2. byzanz-record -region - Выбор части экрана для записи.
  3. Простой интерфейс с графическим интерфейсом для 1.

Введение

Спасибо Бруно Перейре за , который познакомил меня с byzanz ! Это очень полезно для создания GIF-анимации. В некоторых случаях цвета могут быть нечеткими, но размер файла компенсирует это. Пример: 40 секунд, 3,7 МБ .

Использование

Сохраните один или все следующие два сценария в папке в вашем $ PATH . Вот пример использования первого скрипта для создания скринкаста определенного окна.

  1. Выполните byzanz-record-window 30 -c output.gif
  2. Перейдите в окно (alt-tab), которое вы хотите захватить. Щелкните по нему.
  3. Подождите 10 секунд (жестко запрограммировано в $ DELAY ), в течение которых вы готовитесь к записи.
  4. После звукового сигнала (определенного в функции beep ) ) Запустится byzanz .
  5. Через 30 секунд (это значение 30 на шаге 1) byzanz завершится. Снова раздастся звуковой сигнал.

Я включил флаг -c в byzanz-record-window , чтобы показать, что любые аргументы моего сценария оболочки добавляются к byzanz -запись сама. Флаг -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, запустите ./ 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

Gui-версия byzanz-record-window

Скрипт с простым диалогом графического интерфейса пользователя:

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

См. Также:

142
ответ дан 3 September 2012 в 06:19

ffmpeg ( install )

Один из лучших инструментов, которые я использую, это ffmpeg . Он может брать большую часть видео из такого инструмента, как kazam , и конвертировать его в другой формат.

Установите его из software-center - он устанавливается автоматически, если вы устанавливаете отличный пакет ubuntu-limited-extras .

Kazam может выводить видео в форматах mp4 или webm . Обычно лучшие результаты получаются при выводе в формате mp4 .

Пример синтаксиса создания GIF

Базовый синтаксис для преобразования видео в GIF:

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

Преобразованные GIF-файлы - особенно со стандартным 25/29 кадр в секунду может быть очень большим. Например - 15-секундное видео размером 800 КБ Webm со скоростью 25 кадров в секунду может быть выведено до 435 МБ!

Вы можете уменьшить это количество следующими способами:

Частота кадров

Используйте параметр -r [frame-per -секунда] . Например,

ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Размер уменьшен с 435 МБ до 19 МБ

Ограничение размера файла

Используйте параметр -fs [размер файла] . Например,

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 до 26 МБ.

Цикл навсегда

Иногда может потребоваться, чтобы 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

Пример

screencast example

53
ответ дан 3 September 2012 в 06:19

Silentcast

Silentcast - еще один отличный инструмент на основе графического интерфейса для создания анимированных изображений .gif. Его функции включают:

  • 4 режима записи:

    1. Весь экран

    2. Внутри окна

    3. Окно с декором

    4. Пользовательский выбор

  • 3 формата вывода:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (кадры)

    5. .mkv

  • Установка не требуется (переносимая)

  • Пользовательский рабочий каталог

  • Пользовательский fps

Установка

Если вы хотите обычная установка и вы используете поддерживаемую версию Ubuntu, вы можете установить Silentcast с помощью PPA:

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.

Использование

Запустите Silentcast из графического интерфейса рабочего стола или запустите команду silentcast в терминале. Выберите свои настройки и следуйте инструкциям на экране. Когда вы закончите запись, вам будет представлено диалоговое окно для оптимизации конечного результата путем удаления определенного количества кадров.

Для получения более подробных рекомендаций по использованию ознакомьтесь с README, либо онлайн-версией GitHub , либо локальной версией, хранящейся в / usr / share / doc / silentcast с zless или ваш любимый редактор.

Example

Примечания:

Silentcast все еще находится в стадии разработки, и хотя он довольно стабилен, вы можете столкнуться с некоторыми ошибками. Если вы это сделаете, сообщите о них в трекере проблем GitHub проекта . Если у вас возникли проблемы с установкой из PPA и вы используете поддерживаемую версию Ubuntu, оставьте комментарий ниже или свяжитесь с сопровождающим (я) на Launchpad.

34
ответ дан 3 September 2012 в 06:19

Я создал record-gif.sh , улучшенную версию ] Роб В. byzanz-record-region :

Неудачный графический интерфейс для byzanz , улучшено взаимодействие с пользователем ( выбираемая мышью область , индикатор выполнения записи, запись с возможностью воспроизведения ).

record desktop with shell

  • установить продолжительность записи ;
  • установить save_as назначение;
  • выбрать –с помощью мыши– область для записи;
  • создать сценарий для воспроизведения записи (см. $ HOME / record.again ).

Установить

Я также создал сценарий установки

curl --location https://git.io/record-gif.sh | bash -
7
ответ дан 3 September 2012 в 06:19
  1. Установите эти 3 пакета: imagemagick mplayer gtk-recordmydesktop
  2. Запустите Desktop Recorder, чтобы захватить часть экрана/приложения для использования в качестве скринкаста
  3. Скачайте ogv2gif.sh с https://github.com/nicolas-raoul/ogv2gif
  4. Выполните: ./ogv2gif.sh yourscreencast.ogv
  5. Файл GIF будет помещён в тот же каталог

100% вдохновлён ответом maniat1k.

4
ответ дан 3 September 2012 в 06:19

Здесь перечислены всевозможные сложные и хорошо работающие (предположительно) способы сделать это. Однако, я никогда не хотел проходить через этот процесс ни до, ни после. Поэтому я просто использую онлайн-конвертер, который соответствует моим потребностям несколько раз, когда мне это нужно. Я использовал этот сайт:

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

Это не мой сайт и я никак с ними не связан. Это только один из моих закладок, и их гораздо больше.

8
ответ дан 3 September 2012 в 06:19

Если вы хотите стать еще более фантастическим, вы можете использовать более изощренный метод, чем анимированные gifs, используя скринкастинг HTMl5 canvas. Проект x11-canvas-screencast создаст захват анимированного экрана на холсте html5.

Вы, возможно, видели некоторые известные примеры этой технологии на сайте Sublime Text. x11-canvas-screencast делает этот метод еще одним шагом вперед, включив в него отслеживание курсора мыши. Вот демонстрация того, что производит x11-canvas-screencast

Результат лучше, чем анимированный gif, так как он не ограничен количеством цветов и занимает меньше полосы пропускания.

3
ответ дан 3 September 2012 в 06:19

Если вы также хотите видеть записи щелчков мыши или нажатий клавиш, то лучшим вариантом будет экранная кнопка: https://github.com/wavexx/screenkey

2
ответ дан 3 September 2012 в 06:19

Я тестировал все вышеперечисленные методы и обнаружил, что самый простой из них:

  1. используйте gtk-recordmydesktop и key-mon , чтобы получить ogv
  2. ffmpeg -i xx.ogv xx.gif <- без каких-либо параметров .

частота кадров в секунду исходная, а размер gif меньше, чем файл ogv.

1
ответ дан 3 September 2012 в 06:19

Итак, чтобы также фиксировать щелчки мыши, я нашел только key-mon (через README screenkey ):

Затем я:

  • Start key-mon
  • Используйте xrectsel , чтобы поместить координаты экрана в команду byzanz
  • Запустите byzanz команда

... и это выглядит примерно так:

out.gif

Обратите внимание, что key-mon --visible_click будет рисовать кружок вокруг указателя мыши при щелчке мышью - что я бы предпочел , но в Ubuntu 14.04.5 LTS это несколько нарушено, поскольку этот кружок не появляется и не исчезает достаточно быстро, чтобы правильно проиллюстрировать щелчки (т.е.мышь нажимает и отпускает).

3
ответ дан 3 September 2012 в 06:19

Я недавно создал комбинированную версию скриптов, уже размещённую здесь.
. В основном, это позволяет записывать область экрана, но с простым графическим интерфейсом.

Спасибо за 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
ответ дан 3 September 2012 в 06:19

Используйте 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
ответ дан 3 September 2012 в 06:19

Это подход, который я использую для записи высококачественных GIF-файлов.

  • Запишите экран с помощью средства записи экрана, такого как Obs.
  • При необходимости отредактируйте видео.
  • Преобразуйте видео в GIF с помощью GifTuna .
0
ответ дан 5 January 2021 в 23:45

Другие вопросы по тегам:

Похожие вопросы: