Como criar imagens GIF animadas de um screencast?

405

Eu vi imagens GIF animadas de projeções de tela (como a abaixo) promovidas algumas vezes neste site como uma forma de melhorar as respostas.

Qual toolchain está sendo usado para criá-los? Existe um programa que faz isso de forma automática, ou as pessoas estão fazendo screencasts, convertendo-os em uma série de quadros estáticos e, em seguida, criando as imagens GIF?

    
por andrewsomething 25.02.2012 / 20:19

15 respostas

149

Peek é uma nova aplicação que lhe permite gravar facilmente GIFs a partir do seu ecrã.

De qualquer forma, lembre-se de que os GIFs têm uma paleta de cores muito limitada, por isso não é uma boa ideia usá-los.

Você pode instalar as versões mais recentes do Peek no Ubuntu em seu PPA .

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

Encontre mais informações no repositório do GitHub: link

    
por Jop V. 06.10.2016 / 23:36
255

O melhor software que já encontrei para gravar screencasts GIF é Byzanz.

O Byzanz é ótimo porque grava diretamente no GIF, a qualidade e o FPS são impressionantes, mantendo o tamanho dos arquivos no mínimo.

Instalação

Byzanz agora está disponível no repositório do universo:

sudo apt-get install byzanz

Uso

Quando instalado, você pode executá-lo em um terminal.

Este é um pequeno exemplo que fiz agora com

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

    
por Bruno Pereira 19.04.2012 / 21:47
233

Primeiro instale isto:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

essas são as coisas necessárias, ImageMagick, MPlayer e Desktop Recorder. Em seguida, use Desktop Recorder para capturar uma parte da tela / aplicativo para usar como o screencast. Depois que o Desktop Recorder salvar a gravação em um vídeo OGV , o MPlayer será usado para capturar capturas de tela JPEG, salvando-as no diretório 'output'.

Em um terminal:

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

Use ImageMagick para converter as capturas de tela em um gif animado.

convert output/* output.gif

você pode otimizar as capturas de tela desta maneira:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
por maniat1k 25.02.2012 / 20:40
135

Visão geral

Esta resposta contém três scripts de shell:

  1. byzanz-record-window - Para selecionar uma janela para gravação.
  2. byzanz-record-region - Para selecionar uma parte da tela para gravação.
  3. Um front-end de GUI simples para 1, por MHC .

Introdução

Obrigado Bruno Pereira por apresentar-me byzanz ! É bastante útil para criar animações GIF. As cores podem estar desativadas em alguns casos, mas o tamanho do arquivo compensa isso. Exemplo: 40 segundos, 3,7Mb .

Uso

Salve um / todos os dois scripts a seguir em uma pasta no seu $PATH . Aqui está um exemplo sobre como usar o primeiro script para fazer um screencast de uma janela específica.

  1. Executar byzanz-record-window 30 -c output.gif
  2. Vá para a janela (alt-tab) que você deseja capturar. Clique nele.
  3. Aguarde 10 segundos (codificados em $DELAY ), nos quais você se prepara para gravar.
  4. Após o bipe (definido na função beep ), byzanz será iniciado.
  5. Após 30 segundos (esse é o significado de 30 no passo 1), byzanz termina. Um sinal sonoro será transmitido novamente.

Eu incluí o sinal -c em byzanz-record-window para ilustrar que quaisquer argumentos para o meu script de shell são anexados ao byzanz-record em si. O -c sinalizador diz byzanz para incluir também o cursor no screencast.
Consulte man byzanz-record ou byzanz-record --help para mais detalhes.

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

Dependência: xrectsel de xrectsel . Clone o repositório e execute make para obter o executável. (Se houver protestos, não haverá makefile, execute ./bootstrap e ./configure antes de executar '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

Versão Gui de byzanz-record-window

(comentário de MHC ): Tomei a liberdade de modificar o script com um simples diálogo com a 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"
    
por Rob W 14.10.2012 / 17:44
47

ffmpeg

Uma das melhores ferramentas que uso é ffmpeg . Pode levar a maioria dos vídeos de uma ferramenta de screencast, como kazam , e convertê-lo em outro formato.

Instale isto em software-center - ele é automaticamente instalado se você instalar o excelente pacote ubuntu-restricted-extras .

O Kazam pode produzir nos formatos de vídeo mp4 ou webm . Geralmente você obtém melhores resultados em formato mp4 .

exemplo de sintaxe de criação de GIF

A sintaxe básica para converter vídeo em gif é:

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

GIFs convertidos - especialmente aqueles com um frame-por-segundo 25/29 padrão podem ser muito grandes. Por exemplo - um vídeo de 15 segundos de web de 800 Kb a 25 fps pode produzir até 435 MB!

Você pode reduzir isso por vários métodos:

framerate

Use a opção -r [frame-per-second]

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

Tamanho reduzido de 435 MB para 19 MB

limite de tamanho de arquivo

Use a opção -fs [filesize]

por exemplo, ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Nota - este é um tamanho de arquivo de saída aproximado para que o tamanho possa ser um pouco maior que o especificado.

tamanho do vídeo de saída

Use a opção -s [widthxheight]

por exemplo, ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Isso reduziu o tamanho do vídeo de 1366x768 para 26Mb

loop para sempre

Às vezes, você pode querer que o GIF faça um loop para sempre.

Use a opção -loop_output 0

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

otimizar ainda mais e encolher

Se você usar imagemagick convert com um fator fuzz entre 3% e 10%, poderá reduzir drasticamente o tamanho da imagem

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

finalmente

combine algumas dessas opções para reduzir a algo gerenciável para o Ask Ubuntu.

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

seguido por

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

exemplo

     

    
por fossfreedom 05.03.2012 / 22:46
33

Silentcast

O Silentcast é outra ótima ferramenta baseada em gui para criar imagens .gif animadas. Suas características incluem:

  • 4 modos de gravação:

    1. Tela inteira

    2. Janela interna

    3. Janela com decoração

    4. Seleção personalizada

  • 3 formatos de saída:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (frames)

    5. .mkv

  • Nenhuma instalação é necessária (portátil)

  • Diretório de trabalho personalizado

  • Fps personalizados

Instalação

Se você quer uma instalação regular e está executando uma versão suportada do Ubuntu, você pode instalar o Silentcast by PPA:

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

Se você não estiver executando uma versão suportada do Ubuntu (você deve realmente atualizar!), você precisará baixar a última versão a página do GitHub e satisfazer manualmente as dependências (você pode obter yad e ffmpeg de aqui e aqui respectivamente) ou, se você estiver executando uma versão um pouco mais recente, como 13.10 você pode tentar baixar o .deb diretamente .

Se você estiver usando o Gnome, talvez queira instalar a extensão Topicons para facilitar o fechamento do Silentcast.

Uso

Inicie o Silentcast a partir do gui do seu ambiente de trabalho ou execute o comando silentcast em um terminal. Escolha suas configurações e siga os prompts na tela. Quando terminar de gravar, você verá uma caixa de diálogo para otimizar a saída final, removendo um certo número de quadros.

Para obter diretrizes mais detalhadas sobre o uso, leia o README, a versão on-line do GitHub ou a versão local armazenada em /usr/share/doc/silentcast com zless ou seu editor favorito.

Notas:

O Silentcast ainda está em fase de desenvolvimento e, embora seja bastante estável, você pode encontrar alguns bugs. Se você, por favor, informe-os sobre no rastreador de problemas do projeto GitHub . Se você tiver problemas para instalar a partir do PPA e estiver executando uma versão suportada do Ubuntu, deixe um comentário abaixo ou entre em contato com o mantenedor (eu) no Barra de lançamento.

    
por Seth 29.10.2014 / 02:27
7

Existem todos os tipos de maneiras complicadas e bem-sucedidas (presumivelmente) de fazer isso listadas aqui. No entanto, nunca quis passar por esse processo antes nem depois. Então, eu simplesmente uso um conversor on-line que atenda às minhas necessidades nas poucas vezes que preciso. Eu usei este site:

link

Não é o meu site e não sou afiliado a eles de nenhuma maneira. Eles são apenas um dos meus favoritos e há muitos mais.

    
por KGIII 17.10.2015 / 19:45
7

Eu criei record-gif.sh , uma versão melhorada de Rob W's byzanz-record-region :

  

Uma interface fraca para byzanz melhorou a experiência do usuário ( área selecionável pelo mouse , gravar barra de progresso, gravação capaz de reproduzir ).

  • definir a gravação duration ;
  • definir save_as destination;
  • selecione –com o mouse - a área a ser gravada;
  • crie um script para reproduzir novamente (cf. $HOME/record.again ).

Instalar

Eu também criei um script de instalação

curl --location https://git.io/record-gif.sh | bash -
    
por Édouard Lopez 06.10.2016 / 22:27
3
  1. Instale estes 3 pacotes: imagemagick mplayer gtk-recordmydesktop
  2. Execute Desktop Recorder para capturar uma parte da tela / aplicativo para usar como o screencast
  3. Faça o download de ogv2gif.sh de link
  4. Executar: ./ogv2gif.sh yourscreencast.ogv
  5. O arquivo GIF será colocado no mesmo diretório

100% inspirado em resposta do maniat1k .

    
por Nicolas Raoul 30.06.2016 / 09:25
2

Se você quiser ficar ainda mais chique, você pode usar um método mais sofisticado do que os gifs animados usando o screencasting de tela HTMl5. O projeto x11-canvas-screencast criará uma captura de tela animada em tela html5.

Você pode ter visto alguns exemplos famosos desta tecnologia no site do Sublime Text. x11-canvas-screencast leva esse método um passo adiante ao incorporar o rastreamento do cursor do mouse. Aqui está uma demonstração do que x11- canvas-screencast produz

O resultado é melhor do que um gif animado, pois não se limita ao número de cores que possui e ocupa menos largura de banda.

    
por gene_wood 22.09.2015 / 19:37
2

Ok, para capturar também os cliques do mouse, a única coisa que encontrei foi key-mon (por meio do README de screenkey ):

Então eu:

  • Iniciar key-mon
  • Use xrectsel para colocar as coordenadas da tela em um comando byzanz
  • Execute o comando byzanz

... e parece mais ou menos assim:

Note que key-mon --visible_click desenharia um círculo ao redor do ponteiro do mouse após o clique do mouse - o que eu preferiria, mas no Ubuntu 14.04.5 LTS isso é um pouco quebrado, pois esse círculo não aparece e desaparece rápido o suficiente para ilustrar corretamente os cliques (isto é, pressionar e liberar o mouse).

    
por sdaau 24.08.2016 / 06:34
1

Eu criei recentemente uma versão combinada de scripts já postada aqui. Basicamente, ele permite gravar a região da tela, mas com uma interface gráfica simples.

Obrigado por Rob W por fornecer esses scripts legais

Aqui está o código (ou gist se você quiser):

#!/bin/bash

#Records selected screen region, with GUI

#This is combined version of GIF recording scripts, that can be found here: https://sobrelinux.info/questions/67/how-to-create-animated-gif-images-of-a-screencast"%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"
    
por Jacajack 26.05.2016 / 22:17
1

Se você também quiser gravações visíveis de cliques do mouse ou de toques de tecla, a tela virtual é sua melhor aposta: link

    
por nachtigall 12.06.2016 / 08:25
0

Use gtk-recordmydesktop e ffmpeg :

apt-get install gtk-recordmydesktop ffmpeg

Executar RecordMyDesktop capturar uma parte da tela / aplicativo para usar como o screencast:

gtk-recordmydesktop

Crie ogv2gif.sh com o seguinte conteúdo:

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

Use:

./ogv2gif.sh yourscreencast.ogv

Referências:

por Fedir RYKHTIK 14.02.2017 / 10:15
0

Eu testo todo o método acima, encontrei o mais simples:

  1. use gtk-recordmydesktop e key-mon para obter um ogv
  2. ffmpeg -i xx.ogv xx.gif & lt; - sem nenhum parâmetro .

o fps é original e o tamanho do gif é menor que o arquivo ogv.

    
por utopic eexpress 10.03.2017 / 11:11

Tags