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

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

Анимированное GIF изображение

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

17 ответов

Решение

заглядывать

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

посмотреть демо-ролик

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

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

sudo apt install peek

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

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

Найдите больше информации в репозитории GitHub.

Byzanz

Лучшее программное обеспечение, которое я когда-либо нашел для записи GIF-скринкастов, - Byzanz.

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

Монтаж

Визанц теперь доступен из репозитория вселенной:

sudo apt-get install byzanz

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

Когда он установлен, вы можете запустить его в терминале.

Это небольшой пример, который я только что сделал с

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

введите описание изображения здесь

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

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 для преобразования скриншотов в анимированные GIF-изображения.

convert output/* output.gif

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

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

обзор

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

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

Вступление

Спасибо Бруно Перейра за то, что познакомил меня с 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-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 от xrectsel. Клонировать репозиторий и запустить make чтобы получить исполняемый файл. (Если протестует, что нет make-файла, запустите ./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

(комментарий Glutanimate): я позволил себе изменить скрипт с помощью простого графического интерфейса

#!/bin/bash

# AUTHOR:   (c) Rob W 2012, modified by MHC (https://Ask-ubuntu.ru/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"

FFmpeg Install ffmpeg

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

Установите это из софт-центра - он устанавливается автоматически, если вы устанавливаете отличное ubuntu-restricted-extras пакет.

Kazam может выводить видео в форматах mp4 или же webm, Как правило, вы получите лучшие результаты в mp4 формат.

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

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

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

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

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

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

Используйте опцию -r [frame-per-second]

например ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

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

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

Используйте опцию -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 до 26 МБ

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

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

пример

введите описание изображения здесь

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 или вашим любимым редактором.

пример

Заметки:

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

Я создал record-gif.sh, улучшенная версия Rob W's byzanz-record-region:

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

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

устанавливать

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

curl --location https://git.io/record-gif.sh | bash -

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

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

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

  1. Установите эти 3 пакета: imagemagickmplayergtk-recordmydesktop
  2. Запустите Desktop Recorder, чтобы захватить часть экрана / приложения для использования в качестве скринкаста
  3. Скачать ogv2gif.sh с https://github.com/nicolas-raoul/ogv2gif
  4. Бегать: ./ogv2gif.sh yourscreencast.ogv
  5. Файл GIF будет помещен в тот же каталог

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

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

Затем я:

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

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

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

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

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

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

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

Спасибо за Rob W за предоставление этих классных сценариев

Вот код (или суть, если хотите):

#!/bin/bash

#Records selected screen region, with GUI

#This is combined version of GIF recording scripts, that can be found here: https://Ask-ubuntu.ru/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"

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

в 2022 году большая часть предлагаемого программного обеспечения либо давно заброшена, либо отсутствует возможность просто записать часть экрана.

  • kazam не поддерживается с 6 лет назад. (вы все еще можете увидеть это в ubuntu ppa, но очень глючно)
  • byzanz также остановился 6 лет назад.
  • peek: может записывать только полный экран и все экраны, которые у вас есть.
  • системное значение по умолчанию: может записывать только полноэкранный режим и все имеющиеся у вас экраны.

Единственное недавнее простое приложение для скринкастов, которое я могу найти в официальном репозитории, — это vokoscreen-NG. Он очень активно развивается и работает в направлении Wayland.

Тогда есть монстр: obs-studio

Я проверил все вышеописанные методы, нашел самый простой:

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

fps является оригинальным, а размер gif меньше размера файла ogv.

Использование 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

Рекомендации:

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

  • Запишите экран с помощью средства записи экрана, такого как Obs.
  • При необходимости отредактируйте видео.
  • Конвертируйте видео в GIF с помощью GifTuna.
Другие вопросы по тегам