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

382

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

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

задан andrewsomething 25.02.2012 в 20:19
источник

15 ответов

116

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

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

Вы можете установить последние версии Peek на Ubuntu из PPA .

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

Найдите дополнительную информацию в репозитории GitHub: Ссылка

    
ответ дан Jop V. 06.10.2016 в 23:36
источник
245

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

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

Установка

Byzanz теперь доступен из репозитория юниверса:

sudo apt-get install byzanz

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

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

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

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

    
ответ дан Bruno Pereira 19.04.2012 в 21:47
источник
232

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

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

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

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

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

Используйте ImageMagick , чтобы преобразовать скриншоты в анимированные gifs.

convert output/* output.gif

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

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
ответ дан maniat1k 25.02.2012 в 20:40
источник
132

Обзор

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

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

Введение

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

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

Сохраните один или все следующие два сценария в папке внутри вашего $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 }' <<< "$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

Зависимость: 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

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

#!/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"
    
ответ дан Rob W 14.10.2012 в 17:44
источник
45

ffmpeg

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

Установите это из software-center - он будет автоматически установлен, если вы установите отличный пакет ubuntu-restricted-extras .

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

пример синтаксиса GIF

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

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

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

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

фреймрейт

Используйте параметр -r [frame-per-second]

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

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

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

Используйте параметр -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

дальнейшая оптимизация и сжатие

, если вы используете imagemagick convert с коэффициентом fuzz от 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
  

Пример

     

    
ответ дан fossfreedom 05.03.2012 в 22:46
источник
32

Silentcast

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

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

    1. Весь экран

    2. Внутреннее окно

    3. Окно с отделкой

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

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

    1. .gif

    2. .mp4

    3. .webm

    4. .png (frames)

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

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

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

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

Примечания:

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

    
ответ дан Seth 29.10.2014 в 02:27
источник
7

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

Ссылка

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

    
ответ дан KGIII 17.10.2015 в 19:45
источник
7

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

  

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

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

Установка

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

curl --location https://git.io/record-gif.sh | bash -
    
ответ дан Édouard Lopez 06.10.2016 в 22:27
источник
2

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

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

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

    
ответ дан gene_wood 22.09.2015 в 19:37
источник
2
  1. Установите эти 3 пакета: imagemagick mplayer gtk-recordmydesktop
  2. Запустите Настольный рекордер , чтобы захватить часть экрана / приложения для использования в качестве средства просмотра
  3. Загрузить ogv2gif.sh из Ссылка
  4. Выполнить: ./ogv2gif.sh yourscreencast.ogv
  5. Файл GIF будет помещен в тот же каталог

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

    
ответ дан Nicolas Raoul 30.06.2016 в 09:25
источник
1

Если вам также нужны видимые записи щелчков мышью или нажатия клавиш, тогда лучше всего выбрать screenkey: Ссылка

    
ответ дан nachtigall 12.06.2016 в 08:25
источник
1

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

Тогда I:

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

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

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

    
ответ дан sdaau 24.08.2016 в 06:34
источник
0

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

Спасибо за 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"
    
ответ дан Jacajack 26.05.2016 в 22:17
источник
0

Используйте gtk-recordmydesktop и ffmpeg :

apt-get install gtk-recordmydesktop ffmpeg

Запустите RecordMyDesktop, чтобы захватить часть экрана / приложения для использования в качестве скринкаста:

gtk-recordmydesktop

Создайте ogv2gif.sh со следующим содержимым:

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

Используйте его:

./ogv2gif.sh yourscreencast.ogv

Ссылки:

ответ дан Fedir RYKHTIK 14.02.2017 в 10:15
источник
0

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

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

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

    
ответ дан utopic eexpress 10.03.2017 в 11:11
источник

Ознакомьтесь с другими вопросами по меткам