Bir screencast'in animasyonlu GIF görüntüleri nasıl oluşturulur?

419

Bu videoda birkaç kez tanıttığı (aşağıdaki gibi) ekranlı animasyonlu GIF resimlerinin yanıtlarını iyileştirmenin bir yolu olduğunu gördüm.

Bunları oluşturmak için hangi araç zinciri kullanılıyor? Bunu otomatik olarak yapan bir program var mı, yoksa insanlar ekran kartı kullanıyor, bir dizi statik çerçeveye dönüştürüyor ve ardından GIF görüntüleri oluşturuluyor mu?

    
sordu andrewsomething 25.02.2012 20:19

15 cevap

173

Peek , GIF'leri ekranınızdan kolayca kaydedebilmenizi sağlayan yeni bir uygulamadır.

Her durumda, GIF’lerin çok sınırlı bir renk paletine sahip olduklarını unutmayın. Bu nedenle, bunları kullanmak çok iyi bir fikir değildir.

Peek'in en son sürümlerini Ubuntu'da PPA 'dan yükleyebilirsiniz.

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

GitHub repo'da daha fazla bilgi bulabilirsiniz: İşte

    
verilen cevap Jop V. 06.10.2016 23:36
258

GIF sayfalarını kaydetmek için bulduğum en iyi yazılım Byzanz.

Byzanz mükemmeldir, çünkü doğrudan GIF'e kayıt yapar, dosyaların boyutunu minimumda tutarken kalite ve FPS etkileyici olur.

Kurulum

Byzanz şimdi evren deposundan edinilebilir:

sudo apt-get install byzanz

Kullanım

Yüklendiğinde onu bir terminalde çalıştırabilirsiniz.

Bu, şu an yaptığım küçük bir örnektir

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

    
verilen cevap Bruno Pereira 19.04.2012 21:47
233

İlk önce şunu yükleyin:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

bunlar gerekli şeyler, ImageMagick, MPlayer ve Desktop Recorder. Daha sonra ekran / uygulamanın ekran bölümünü kullanabilmek için Masaüstü Kaydedici 'yi kullanın. Masaüstü Kaydedici, kaydı bir OGV videosu 'na kaydettikten sonra, JPEG ekran görüntülerini yakalamak için MPlayer , bunları' çıkış 'dizinine kaydetmek için kullanılacaktır.

Bir terminalde:

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

Ekran görüntülerini hareketli bir gif haline dönüştürmek için ImageMagick 'i kullanın.

convert output/* output.gif

ekran görüntülerini şu şekilde optimize edebilirsiniz:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
verilen cevap maniat1k 25.02.2012 20:40
136

Genel Bakış

Bu cevap üç kabuk betiği içeriyor:

  1. byzanz-record-window - Kayıt için bir pencere seçmek için.
  2. byzanz-record-region - Kayıt için ekranın bir bölümünü seçmek için.
  3. 1 için basit bir GUI ön ucu, MHC .

Tanıtım

Teşekkürler Bruno Pereira beni tanıtmak için byzanz ! GIF animasyonları oluşturmak için oldukça kullanışlıdır. Renkler bazı durumlarda kapalı olabilir, ancak dosya boyutu bunu telafi eder. Örnek: 40 saniye, 3,7 MB .

Kullanım

Aşağıdaki iki betiğin birini / tümünü $PATH öğenizdeki bir klasöre kaydedin. İşte, belirli bir pencerenin ekran görüntüsünü oluşturmak için ilk komut dosyasını kullanma örneğidir.

  1. byzanz-record-window 30 -c output.gif çalıştır
  2. Yakalamak istediğiniz pencereye (alt sekme) gidin. Üzerine tıkla.
  3. Kayıt için hazırladığınız 10 saniye ( $DELAY cinsinden kodlanmış) bekleyin.
  4. Bip sesinden sonra ( beep işlevinde tanımlanır), byzanz başlayacaktır.
  5. 30 saniye sonra (bu, 1. adımda 30 'si anlamına gelir) byzanz değeri biter. Bir bip sesi tekrar yayınlanacak.

Kabuk komut dosyamdaki herhangi bir argümanın -c 'nin kendisine eklendiğini göstermek için byzanz-record-window işaretçisine byzanz-record işaretini ekledim. % Co_de% bayrağı, -c 'yi de imleci ekran görüntüsüne dahil etmesini söyler.
Daha fazla bilgi için byzanz veya man byzanz-record adresine bakın.

byzanz-record --help

#!/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="[email protected]"
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-window

Bağımlılık: xrectsel 'dan byzanz-record-region . Depoyu klonlayın ve yürütülebilir dosyayı almak için xrectsel dosyasını çalıştırın. (İtiraz yoksa makefile yoktur, "make" komutunu çalıştırmadan önce make ve co_de% değerini çalıştırın.

#!/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="[email protected]"
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

./bootstrap Gui sürümü

( MHC 'ye yorum yapın): Basit bir GUI diyaloğu ile komut dosyasını değiştirme özgürlüğünü kullandım

#!/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"
    
verilen cevap Rob W 14.10.2012 17:44
49

ffmpeg ile bağlantı kurun ffmpeg

Kullandığım en iyi araçlardan biri ffmpeg . Çoğu videoyu kazam gibi bir screencast aracından alabilir ve başka bir biçime dönüştürebilir.

Bunu yazılım merkezi 'den yükleyin - mükemmel ubuntu-restricted-extras paketini yüklerseniz otomatik olarak yüklenir.

Kazam, mp4 veya webm video biçimlerinde yayınlanabilir. Genellikle, mp4 biçiminde çıktı almak için daha iyi sonuçlar elde edersiniz.

örnek GIF sözdizimi

yapılıyor

Videoyu gif dosyasına dönüştürmek için temel sözdizimi şöyledir:

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

Dönüştürülmüş GIF'ler - özellikle saniyede 25/29 standartlarında olanlar çok büyük olabilir. Örneğin - 25 fps'de 800Kb'lik bir web-15 saniyelik video, 435Mb'ye çıkabilir!

Bunu birkaç yöntemle azaltabilirsiniz:

kare hızı

-r [frame-per-second]

seçeneğini kullanın

örneğin, ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Boyut 435Mb'den 19Mb'ye düşürüldü

dosya boyutu sınırı

-fs [filesize]

seçeneğini kullanın

örneğin, ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Not - bu, yaklaşık bir çıktı dosyası boyutudur, bu nedenle boyut, belirtilenden biraz daha büyük olabilir.

çıkış videosunun boyutu

-s [widthxheight]

seçeneğini kullanın

örneğin, ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Bu, 1366x768 boyutundaki video boyutunu 26Mb'ye düşürdü

sonsuza dek döngü

Bazen GIF’in sonsuza kadar döngü yapmasını isteyebilirsiniz.

-loop_output 0

seçeneğini kullanın

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

daha da optimize edin ve küçültün

imagemagick convert değerini% 3 ile% 10 arasında bir fuzz faktörü ile kullanırsanız, görüntü boyutunu önemli ölçüde azaltabilirsiniz

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

nihayet

Bu seçeneklerden bazılarını, Ubuntu’ya göre yönetilebilir bir şeye indirgemek için birleştirin.

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

ardından

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

örneğin

     

    
verilen cevap fossfreedom 05.03.2012 22:46
33

Silentcast

Silentcast, hareketli .gif resimler oluşturmak için başka bir harika gui tabanlı araçtır. Özellikleri şunlardır:

  • 4 kayıt modu:

    1. Tüm ekran

    2. İç pencere

    3. Dekorasyonlu pencere

    4. Özel seçim

  • 3 çıktı biçimi:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (kare)

    5. .mkv

  • Kurulum gerektirmez (taşınabilir)

  • Özel çalışma dizini

  • Özel fps

Kurulum

Düzenli bir yükleme yapmak ve desteklenen bir Ubuntu sürümünü çalıştırıyorsanız, Silentcast'i PPA ile yükleyebilirsiniz:

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

Desteklenen bir Ubuntu sürümünü çalıştırmıyorsanız (gerçekten yeni sürüme geçmelisiniz!) en son sürümü GitHub sayfasına ve bağımlılıkları el ile karşılayın (yad ve ffmpeg'i buradan ve burada ) veya eğer daha yeni bir sürümü kullanıyorsanız 13.10, .deb'yi doğrudan indirmeyi deneyebilirsiniz.

Gnome kullanıyorsanız, Silentcast'in daha kolay durmasını sağlamak için Topicons uzantısını yüklemek isteyebilirsiniz.

Kullanım

Silentcast'i masaüstü ortamınızın gui'sinden başlatın veya bir terminalde silentcast komutunu çalıştırın. Ayarlarınızı seçin ve ekrandaki komutları izleyin. Kaydı bitirdiğinizde, belirli bir sayıda kareyi kaldırarak son çıktıyı optimize etmek için bir iletişim kutusu sunulur.

Daha ayrıntılı kullanım kılavuzları için, çevrimiçi GitHub sürümü veya yerel sürüm /usr/share/doc/silentcast 'da zless veya favori düzenleyicinizle saklanır.

Notlar:

Silentcast hala geliştirme aşamasındadır ve oldukça kararlı olmasına rağmen bazı hatalarla karşılaşabilirsiniz. Eğer yaparsanız, bunları projenin GitHub sorunları izleyicisine bildirin. PPA'dan yükleme yapmakta sorun yaşıyorsanız ve Ubuntu'nun desteklenen bir sürümünü çalıştırıyorsanız aşağıda bir yorum bırakın ya da bakıcınızla iletişim kurun (bana) Başlatma.

    
verilen cevap Seth 29.10.2014 02:27
7

Burada listelenen her türlü karmaşık ve iyi çalışan (muhtemelen) yollar vardır. Ancak, bu süreci ne zamandan önce ne zamandan beri geçmek istemedim. Bu yüzden, ihtiyacım olan birkaç kez çevrimiçi bir çevirici kullanıyorum. Bu siteyi kullanıyorum:

İşte

Bu benim sitem değil ve onlarla hiçbir şekilde bağlı değilim. Onlar benim yer işaretlerimden sadece bir tanesi ve daha fazlası var.

    
verilen cevap KGIII 17.10.2015 19:45
7

record-gif.sh , Rob W'nin byzanz-record-region :

  

byzanz için bir lame GUI'si, kullanıcı deneyimini iyileştirdi ( fare seçilebilir alanı , kayıt ilerleme çubuğu, tekrar oynatılabilir kayıt ).

  • kayıt duration ;
  • save_as hedefini ayarla;
  • - fareyle birlikte - seçmek için alanı seçin
  • Kaydı tekrarlamak için bir komut dosyası oluştur ( $HOME/record.again ).

Yükle

Ayrıca bir yükleme komut dosyası oluşturdum

curl --location https://git.io/record-gif.sh | bash -
    
verilen cevap Édouard Lopez 06.10.2016 22:27
3
  1. Bu 3 paketi yükle: imagemagick mplayer gtk-recordmydesktop
  2. Ekranın / uygulamanın bir bölümünü ekran görüntüsü olarak kullanmak için Masaüstü Kaydedici 'yi çalıştırın
  3. İşte 'den ogv2gif.sh indir
  4. Çalıştır: ./ogv2gif.sh yourscreencast.ogv
  5. GIF dosyası aynı dizine eklenir

% 100, maniat1k'in yanıtından ilham aldı.

    
verilen cevap Nicolas Raoul 30.06.2016 09:25
2

Hatta meraklı olmak istiyorsanız, HTMl5 tuval ekranını kullanarak animasyonlu giflerden daha karmaşık bir yöntem kullanabilirsiniz. x11-canvas-screencast projesi, bir html5 tuval animasyonlu ekran görüntüsü yakalayacaktır.

Sublime Text web sitesinde bu teknolojinin bazı ünlü örneklerini görmüş olabilirsiniz. x11-canvas-screencast , fare imlecinin izlenmesiyle bu yöntemi bir adım daha ileri götürür. İşte bir x11 tuval-screencast üretir

Sonuç, sahip olduğu renk sayısıyla sınırlı olmadığı ve daha az bant genişliği aldığı için animasyonlu bir GIF'den daha iyidir.

    
verilen cevap gene_wood 22.09.2015 19:37
2

Tamam, böylece, fare tıklamaları da yakalamak için, bulduğum tek şey key-mon idi ( screenkey ):

O zaman ben:

... ve şöyle görünüyor:

byzanz 'nin fare tıklamasıyla fare işaretçisi etrafında bir çember çizeceğini unutmayın - ki bunu tercih ederim, fakat Ubuntu 14.04.5 LTS'de bu daire bir parça kırılmamış, çünkü bu çember görünmeyecek ve tıklamaları doğru şekilde gösterir (yani fare presleri ve sürümleri).

    
verilen cevap sdaau 24.08.2016 06:34
1

Kısa süre önce burada yayınlanan komut dosyalarının birleşik sürümünü oluşturdum.
Temel olarak, ekran bölgesini kaydetmenize izin verir, ancak basit GUI ile.

Bu harika komut dosyalarını sağlamak için Rob W için teşekkürler

İşte isterseniz (veya isterseniz 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"
    
verilen cevap Jacajack 26.05.2016 22:17
1

Ayrıca, fare tıklamaları veya tuş vuruşlarının görünür kayıtlarını da istiyorsanız, en iyi seçiminiz screenkey: İşte

    
verilen cevap nachtigall 12.06.2016 08:25
0

gtk-recordmydesktop ve ffmpeg kullanın:

apt-get install gtk-recordmydesktop ffmpeg

RecordMyDesktop'u çalıştırın ekran / uygulamanın bir bölümünü ekran görüntüsü olarak kullanmak için:

gtk-recordmydesktop

Aşağıdaki içerikle ogv2gif.sh oluştur:

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

Kullanın:

./ogv2gif.sh yourscreencast.ogv

Referanslar:

verilen cevap Fedir RYKHTIK 14.02.2017 10:15
0

Yukarıdakilerin tümünü test ediyorum, en basit olanı buldum:

  1. ogv almak için gtk-recordmydesktop ve key-mon 'i kullanın
  2. ffmpeg -i xx.ogv xx.gif & lt; - herhangi bir parametre olmadan .

fps orijinaldir ve gif boyutu ogv dosyasından daha azdır.

    
verilen cevap utopic eexpress 10.03.2017 11:11

Etiketlerdeki diğer soruları oku