Làm thế nào để tạo hình ảnh GIF hoạt hình của screencast?


476

Tôi đã thấy hình ảnh GIF hoạt hình của các màn hình (như hình dưới đây) được quảng cáo một vài lần trên trang web này như một cách để cải thiện câu trả lời.

Ảnh GIF hoạt hình

Toolchain nào đang được sử dụng để tạo ra những thứ này? Có một chương trình thực hiện điều này một cách tự động, hoặc mọi người đang thực hiện screencasts, chuyển đổi chúng thành một loạt các khung tĩnh, sau đó tạo các hình ảnh GIF?


6
LICEcap (http://www.cockos.com/licecap) đơn giản hơn nhiều so với bất kỳ giải pháp nào dưới đây, vì nó dựa trên GUI. Nó miễn phí như trong tự do và giá cả. Nhược điểm duy nhất là bạn phải chạy nó qua Wine.
Dennis

4
Liên quan: ghi hình GIF; cách UNIX từ Sàn giao dịch ngăn xếp Unix & Linux.
Cristian Ciupitu


2
Là ví dụ ảnh chụp màn hình này được thực hiện trên Windows?
Clément

@ Clément Đó cũng là điều đầu tiên tôi nhận thấy :)
Đại

Câu trả lời:


269

Peek

Là một ứng dụng mới cho phép bạn dễ dàng ghi lại GIF từ màn hình của mình.

bản demo screencast

Dù sao, hãy nhớ rằng GIF có bảng màu rất hạn chế vì vậy không nên sử dụng chúng.

Kể từ Ubuntu 18.10, bạn có thể cài đặt Peek trực tiếp.

sudo apt install peek

Đối với các phiên bản Ubuntu cũ hơn, bạn có thể cài đặt các phiên bản Peek mới nhất từ PPA của nó .

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

Tìm thêm thông tin trong repo GitHub .


2
Có cái này là tuyệt vời. nó chỉ hoạt động với X11 và được nhắm mục tiêu tại Gnome 3.
Ajith R Nair

2
@BeastWinterwolf và ExillustX: không đăng báo cáo lỗi tại đây, hãy sử dụng trình theo dõi vấn đề nơi mọi người thực sự quan tâm đến việc xem chúng! Báo cáo tại đây: github.com/phw/peek/issues
oligofren

2
Đây là một công cụ tuyệt vời.
Mike

1
@Jop V. làm thế nào bạn làm một bản ghi của một bản ghi?
milkovsky

1
@milkovsky Tôi không ghi lại điều này. Điều đó đã được nói, tôi nghĩ rằng họ đã sử dụng một máy ảo và ghi lại điều đó.
stommestack

272

Byzanz

Phần mềm tốt nhất tôi từng tìm thấy để ghi lại các screencasts GIF là Byzanz.

Byzanz thật tuyệt vời vì nó ghi trực tiếp vào GIF, chất lượng và FPS rất ấn tượng trong khi duy trì kích thước của các tệp ở mức tối thiểu.

Cài đặt

Byzanz hiện có sẵn từ kho vũ trụ:

sudo apt-get install byzanz

Sử dụng

Khi nó được cài đặt, bạn có thể chạy nó trong một thiết bị đầu cuối.

Đây là một ví dụ nhỏ tôi vừa mới làm với

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

nhập mô tả hình ảnh ở đây


3
Cảm ơn, công cụ tốt đẹp! Màu sắc không phải lúc nào cũng chính xác, nhưng đó là một chi tiết nhỏ. Tôi đã viết một tập lệnh shell giúp chụp một cửa sổ (được người dùng chọn trong thời gian chạy), được đăng trong câu trả lời dưới đây .
Cướp W

57
Byzanz không có giao diện người dùng nào! Tôi có nên đoán x, y, chiều rộng và chiều cao của khu vực tôi muốn ghi lại không? Có một điều hơi nực cười là vào năm 2014 tôi vẫn phải làm điều này.
Dan Dascalescu

5
@DanDascalescu Không ai nói bạn cần sử dụng nó ... Tôi thích thiết bị đầu cuối hơn GUI, điều đó có gì sai?
Bruno Pereira

31
@DanDascalescu Không cần phải đoán. Bạn có thể sử dụng xwininfođể có được các thuộc tính cửa sổ.
Marcus Møller

4
Có cách nào để tránh phải biết trước thời hạn không? Khi ghi âm tôi không bao giờ biết trước sẽ mất bao nhiêu thời gian.
Nicolas Raoul

236

Đầu tiên cài đặt này:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

đó là những thứ bắt buộc, ImageMagick, MPlayer và Desktop Recorder. Sau đó, sử dụng Desktop Recorder để chụp một phần màn hình / ứng dụng để sử dụng làm screencast. Sau khi Trình ghi máy tính để bàn đã lưu bản ghi vào video OGV , MPlayer sẽ được sử dụng để chụp ảnh chụp màn hình JPEG, lưu chúng vào thư mục 'đầu ra'.

Trên thiết bị đầu cuối:

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

Sử dụng ImageMagick để chuyển đổi ảnh chụp màn hình thành ảnh gif hoạt hình.

convert output/* output.gif

bạn có thể tối ưu hóa các ảnh chụp màn hình theo cách này:

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

35
Một cách khác để tối ưu hóa gif là sử dụng gifsicle: gifsicle -O in.gif -o out.gifTôi vừa thử và đã giảm 100 lần kích thước tệp.
Yrogirg

10
Đối với những người thắc mắc, cờ đầu tiên trong lệnh @Yrogirg là chữ hoa "O", không phải chữ số "0" :)
brandizzi

2
Wow, gifsicle chỉ làm cho tôi nhanh hơn nhưng không nhỏ hơn, và lệnh convert tối ưu hóa làm cho nó thực sự xấu xí.
MalcolmOcean

6
Tôi khuyên bạn nên kết hợp hai convertbước cuối cùng thành một : convert output/* -layers Optimize output.gif. Đối với tôi, điều này tăng tốc thời gian xử lý cũng như làm cho tệp đầu ra nhỏ hơn. Tôi không thấy bất kỳ lý do để làm những bước đó một cách riêng biệt. (Tôi đã không thử -fuzz 10%tranh luận.)
thejoshwolfe 13/07/2015

1
Giống như @MalcolmOcean, converttuyên bố này khiến nó trở nên gớm ghiếc. Theo các tài liệu ( fantemagick.org/script/command-line-options.php#layers ), việc optimizethực hiện có thể thay đổi theo thời gian. Nhưng một converttuyên bố được điều chỉnh một chút với -coalescecờ đã cải thiện mọi thứ, nhưng vẫn không đến nơi được chấp nhận. -layers optimize-transparencyconvert 'output/*.jpg' -coalesce -layers optimize-transparency optimised.gif

136

Tổng quan

Câu trả lời này chứa ba tập lệnh shell:

  1. byzanz-record-window - Để chọn một cửa sổ để ghi âm.
  2. byzanz-record-region - Để chọn một phần của màn hình để ghi.
  3. Một giao diện người dùng GUI đơn giản cho 1, bởi MHC .

Giới thiệu

Cảm ơn Bruno Pereira đã giới thiệubyzanz cho tôi ! Nó khá hữu ích để tạo hoạt hình GIF. Màu sắc có thể bị tắt trong một số trường hợp, nhưng kích thước tệp bù cho nó. Ví dụ: 40 giây, 3,7Mb .

Sử dụng

Lưu một / tất cả hai tập lệnh sau vào một thư mục trong của bạn $PATH. Đây là một ví dụ về việc sử dụng tập lệnh đầu tiên để tạo ra một đoạn ghi hình của một cửa sổ cụ thể.

  1. Chạy byzanz-record-window 30 -c output.gif
  2. Chuyển đến cửa sổ (tab alt) bạn muốn chụp. Nhấn vào nó.
  3. Đợi 10 giây (mã hóa cứng $DELAY), trong đó bạn chuẩn bị ghi âm.
  4. Sau tiếng bíp (được xác định trong beephàm), byzanzsẽ bắt đầu.
  5. Sau 30 giây (đó là ý nghĩa của 30bước 1), byzanzkết thúc. Một tiếng bíp sẽ được phát lại.

Tôi đã đưa -ccờ vào byzanz-record-windowđể minh họa rằng mọi đối số cho tập lệnh shell của tôi đều được thêm vào byzanz-recordchính nó. Các -clá cờ nói byzanzcũng đưa con trỏ vào hình màn ảnh.
Xem man byzanz-recordhoặc byzanz-record --helpđể biết thêm chi tiết.

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

Phụ thuộc: xrectseltừ xrectsel . Nhân bản kho lưu trữ và chạy makeđể có được thực thi. (Nếu nó phản đối thì không có makefile, hãy chạy ./bootstrap./configuretrước khi chạy `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

Phiên bản Gui của byzanz-record-window

(nhận xét của MHC ): Tôi đã tự do sửa đổi tập lệnh bằng một đoạn hội thoại GUI đơn giản

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

17
Những đoạn script này có được giữ ở đâu đó như github không? Chúng rất hữu ích, thật tuyệt nếu chúng được giữ ở đâu đó tốt hơn văn bản trong câu trả lời của StackOverflow.
KFro

1
@KFro Đây là Hỏi Ubuntu, không phải SO;) Không, tôi chưa đặt chúng vào kho git, vì bản thân các tập lệnh được ghi lại rất tệ (đối với người dùng). Tài liệu đi kèm được kèm theo câu trả lời, vì vậy tôi thấy không có lợi ích gì khi chia nhỏ các tệp và tài liệu trong kho Git.
Rob W

1
Không có thêm tín dụng để chỉnh sửa, nhưng được thực hiện ;-).
Rmano

2
Chỉ muốn nói một lời cảm ơn rất lớn cho điều này - câu trả lời tuyệt vời và đã giúp tôi rất nhiều. Đây là những gì tôi đã kết thúc với. Tôi cũng thích sử dụng notify-sendtrong trường hợp âm thanh của tôi bị tắt.
Daniel Buckmaster

2
@Masi Byzanz - và các kịch bản này - hoạt động tốt với tôi trong 16.04
Jeff Puckett

51

ffmpeg Cài đặt ffmpeg

Một trong những công cụ tốt nhất tôi sử dụng là ffmpeg. Nó có thể lấy hầu hết video từ một công cụ screencast như kazamvà chuyển đổi nó sang định dạng khác.

Cài đặt phần mềm này từ trung tâm phần mềm - nó được cài đặt tự động nếu bạn cài đặt ubuntu-restricted-extrasgói tuyệt vời .

Kazam có thể xuất ra ở định dạng video mp4hoặc webm. Nói chung, bạn nhận được kết quả tốt hơn xuất ra ở mp4định dạng.

ví dụ cú pháp tạo ảnh GIF

Cú pháp cơ bản để chuyển đổi video sang gif là:

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

GIF được chuyển đổi - đặc biệt là những ảnh có 25/29 khung hình mỗi giây tiêu chuẩn có thể rất lớn. Ví dụ: một video 15 giây web 800Kb ở tốc độ 25 khung hình / giây có thể xuất ra 435Mb!

Bạn có thể giảm điều này bằng một số phương pháp:

tỷ lệ khung hình

Sử dụng tùy chọn -r [frame-per-second]

ví dụ ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Kích thước giảm từ 435Mb xuống 19Mb

giới hạn kích thước tập tin

Sử dụng tùy chọn -fs [filesize]

ví dụ ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Lưu ý - đây là kích thước tệp đầu ra gần đúng để kích thước có thể lớn hơn một chút so với chỉ định.

kích thước của video đầu ra

Sử dụng tùy chọn -s [widthxheight]

ví dụ ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Điều này đã giảm kích thước video 1366x768 xuống còn 26Mb

vòng lặp mãi mãi

Đôi khi bạn có thể muốn GIF lặp lại mãi mãi.

Sử dụng tùy chọn -loop_output 0

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

tiếp tục tối ưu hóa và thu nhỏ

Nếu bạn sử dụng imagemagick convertvới hệ số mờ từ 3% đến 10% thì bạn có thể giảm đáng kể kích thước hình ảnh

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

cuối cùng

kết hợp một số tùy chọn này để giảm xuống mức có thể quản lý được đối với Hỏi Ubuntu.

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

theo dõi bởi

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

thí dụ

nhập mô tả hình ảnh ở đây


Nếu bạn có Docker và video của bạn là demo.mkvbạn có thể chạy các lệnh này : docker run --rm -v $(pwd):/tmp/video/ jrottenberg/ffmpeg -i /tmp/video/demo.mkv -framerate 1/2 -pix_fmt rgb24 -loop 0 /tmp/video/demo.gif,sudo chown $USER:$USER demo.gif
czerasz

2
Đối với tôi nó than phiền rằng không có tùy chọn như -loop_output...

1
+1 Câu trả lời hay nhất. Nhưng một q bạn có nghĩ ubuntu-restricted-extraslà xuất sắc không ??
Severus Thục

1
@ParanoidPanda bây giờ là tùy chọn -loop. Vì vậy, nó sẽ được -loop 0. Đây là một lệnh làm việc trong Ubuntu 16.04.01 ffmpeg -f x11grab -r 25 -s 100x100 -i :0.0+500,500 -pix_fmt rgb24 -loop 0 out2.gif. +500,500là vị trí X, Y để bắt đầu hình chữ nhật 100x100. xgrablấy màn hình làm đầu vào.
sanbor

34

Im lặng

Silentcast là một công cụ dựa trên gui tuyệt vời khác để tạo hình ảnh .gif hoạt hình. Các tính năng của nó bao gồm:

  • 4 chế độ ghi:

    1. Toàn màn hình

    2. Cửa sổ bên trong

    3. Cửa sổ trang trí

    4. Lựa chọn tùy chỉnh

  • 3 định dạng đầu ra:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (khung)

    5. .mkv

  • Không cần cài đặt (di động)

  • Thư mục làm việc tùy chỉnh

  • Khung hình / giây tùy chỉnh

Cài đặt

Nếu bạn muốn cài đặt thường xuyên và đang chạy phiên bản Ubuntu được hỗ trợ, bạn có thể cài đặt Silentcast bằng PPA:

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

Nếu bạn không chạy phiên bản Ubuntu được hỗ trợ (bạn thực sự nên nâng cấp!), Bạn sẽ cần tải xuống phiên bản mới nhất từ trang GitHub và thỏa mãn thủ công (bạn có thể mua yad và ffmpeg từ đâytại đây ) hoặc, tương ứng nếu bạn đang chạy phiên bản mới hơn một chút, chẳng hạn như 13.10, bạn có thể thử tải xuống .deb trực tiếp .

Nếu bạn đang sử dụng Gnome, bạn có thể muốn cài đặt tiện ích mở rộng Topicons để giúp việc dừng Silentcast dễ dàng hơn.

Sử dụng

Bắt đầu Silentcast từ gui của môi trường máy tính để bàn của bạn hoặc chạy silentcastlệnh trong thiết bị đầu cuối. Chọn cài đặt của bạn và làm theo lời nhắc trên màn hình. Khi bạn ghi xong, bạn sẽ thấy một hộp thoại để tối ưu hóa đầu ra cuối cùng bằng cách loại bỏ một số khung nhất định.

Để biết thêm hướng dẫn sử dụng chuyên sâu, hãy xem README, phiên bản GitHub trực tuyến hoặc phiên bản cục bộ được lưu trữ /usr/share/doc/silentcastvới zless hoặc trình chỉnh sửa yêu thích của bạn.

Thí dụ

Ghi chú:

Silentcast vẫn đang trong giai đoạn phát triển và mặc dù nó khá ổn định nhưng bạn có thể gặp một số lỗi. Nếu bạn làm ơn hãy báo cáo cho họ về trình theo dõi các vấn đề GitHub của dự án . Nếu bạn gặp sự cố khi cài đặt từ PPA và đang chạy phiên bản Ubuntu được hỗ trợ, hãy để lại nhận xét bên dưới hoặc liên hệ với người bảo trì (tôi) trên Launchpad.


ngay khi tôi nhấn 'Dừng lại' thì nó gặp sự cố ...
Francisco Corrales Morales

@FranciscoCorralesMorales Bạn có thể chạy nó từ dòng lệnh và sau đó thử không? Khi nó gặp sự cố, hãy lấy đầu ra và tải nó lên paste.ubfox.com và liên kết nó lại ở đây để tôi có thể xem qua. Cảm ơn!
Seth

1
Tôi có thể xác nhận điều này hoạt động tuyệt vời! Nó tạo ra một rất nhỏ (650 KB) .gif tập tin với độ phân giải lớn bên ngoài cửa sổ đang mở như được hiển thị trong câu trả lời này: askubuntu.com/questions/882419/... tôi có thể thêm vào các poster @Seth là một chàng trai tuyệt vời và đã giúp tôi trong AU phòng trò chuyện chung đã thiết lập nó :)
WinEunuuchs2Unix

Là dự án bị bỏ rơi? Đã không có bất kỳ cam kết nào đối với kho lưu trữ trong gần hai năm.
Flux

@flux thật không may, giữa vấn đề sức khỏe và uni, vâng. Các kho lưu trữ hiện đang bị bỏ rơi. Tuy nhiên, dự án trên GitHub không có và bạn có thể lấy mã mới nhất ở đó.
Seth

8

Có tất cả các cách phức tạp và hoạt động tốt (có lẽ) để làm điều này được liệt kê ở đây. Tuy nhiên, tôi chưa bao giờ muốn trải qua quá trình đó trước đó và kể từ đó. Vì vậy, tôi chỉ cần sử dụng một công cụ chuyển đổi trực tuyến phù hợp với nhu cầu của mình vài lần tôi cần làm như vậy. Tôi đã sử dụng trang web này:

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

Đây không phải là trang web của tôi và tôi không liên kết với họ theo bất kỳ cách nào. Chúng chỉ là một trong các dấu trang của tôi và còn nhiều hơn nữa.


Tôi thích điều này. Tôi đã sử dụng simplescreenrecorder để ghi lại máy tính để bàn của mình cho youtube, vì vậy việc biến mkv thành gif thật dễ dàng với điều này.
isaaclw

8

Tôi đã tạo record-gif.sh, một phiên bản cải tiến của Rob W'sbyzanz-record-region :

GUI khập khiễng byzanz, cải thiện trải nghiệm người dùng ( khu vực có thể chọn chuột , thanh tiến trình ghi, ghi lại có thể phát lại ).

ghi lại máy tính để bàn có vỏ

  • thiết lập ghi âm duration;
  • đặt save_asđích;
  • chọn ăn với chuột Chuột khu vực để ghi;
  • tạo một kịch bản để phát lại ghi âm (xem $HOME/record.again).

Tải về

Tôi cũng đã tạo một tập lệnh cài đặt

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

1
Bạn cần làm sudo apt install autoconf byzanztrước khi chạy tập lệnh này. Nó không được cài đặt theo mặc định trong Ubuntu
Crantisz

@Crantisz cảm ơn, tôi đã cập nhật tập lệnh cài đặt để cài đặt autoconfbyzanz. Bạn có thể thử nó?
Édouard Lopez

Tôi chỉ thử nghiệm nó trên PC khác. Không có git trên hệ thống Ubuntu được cài đặt mới của tôi. Và tôi không biết tại sao, nhưng kịch bản dừng lại chỉ sau câu hỏi Y / N thứ hai. Bạn có thể đóng gói tất cả các phụ thuộc trong một lệnh?
Crantisz

@Crantisz lệnh là một tập lệnh cài đặt, nếu bạn chỉ muốn record-gif.sh bạn có thể lấy nó từ repo
Édouard Lopez


3

Nếu bạn muốn nhận được nhiều hơn nữa, bạn có thể sử dụng một phương pháp phức tạp hơn so với các gif hoạt hình bằng cách sử dụng hình vẽ trên nền vải HTMl5. Dự án x11-canvas-screencast sẽ tạo ra một bản chụp màn hình hoạt hình canvas html5.

Bạn có thể đã thấy một số ví dụ nổi tiếng về công nghệ này trên trang web Sublime Text. x11-canvas-screencastđưa phương pháp này tiến thêm một bước bằng cách kết hợp theo dõi con trỏ chuột. Đây là bản demo của những gì x11-canvas-screencast tạo ra

Kết quả tốt hơn một gif hoạt hình vì nó không giới hạn số lượng màu sắc có và nó tốn ít băng thông hơn.


1
Đó là điều tốt đẹp và tất cả nhưng bạn không thể dễ dàng chia sẻ điều này, ví dụ Slack, Twitter, v.v.
Elijah Lynn

@ElijahLynn rất đúng. Giải pháp này được tối ưu hóa cho tốc độ khung hình cao, băng thông thấp, độ sâu màu đầy đủ. Nó không phải là di động (ví dụ để nhúng vào một tweet) vì nó yêu cầu javascript.
gen_wood

3

Ok, do đó, để bắt chuột, điều duy nhất tôi tìm thấy là key-mon(thông qua README của screenkey):

Sau đó tôi:

  • Khởi đầu key-mon
  • Sử dụng xrectselđể lấy tọa độ màn hình đưa vào byzanzlệnh
  • Chạy byzanzlệnh

... và nó trông giống như thế này:

out.gif

Lưu ý rằng key-mon --visible_clicksẽ vẽ một vòng tròn xung quanh con trỏ chuột khi nhấp chuột - điều mà tôi thích, nhưng trong Ubuntu 14.04.5 LTS, điều này hơi bị hỏng, vì vòng tròn này không xuất hiện và biến mất đủ nhanh để minh họa chính xác các nhấp chuột (nghĩa là nhấn chuột và phát hành).


2

Gần đây tôi đã tạo phiên bản kết hợp của các kịch bản đã được đăng ở đây.
Về cơ bản, nó cho phép bạn ghi lại vùng màn hình, nhưng với GUI đơn giản.

Cảm ơn Rob W đã cung cấp những kịch bản tuyệt vời đó

Đây là mã (hoặc ý chính nếu bạn muốn):

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

Nếu bạn cũng muốn các bản ghi có thể nhìn thấy của các lần nhấp chuột hoặc các nét chính, thì screenkey là lựa chọn tốt nhất của bạn: https://github.com/wavexx/screenkey


2
Tôi không thấy cách screenkeyxử lý các lần nhấp chuột (dường như chỉ dành cho chỉ báo bàn phím), tuy nhiên, README của nó đề cập đến việc key-moncó thể làm điều đó, hãy xem câu trả lời của tôi dưới đây.
sdaau

1

Sử dụng gtk-recordmydesktopffmpeg:

apt-get install gtk-recordmydesktop ffmpeg

Chạy RecordMyDesktop chụp một phần màn hình / ứng dụng để sử dụng làm screencast:

gtk-recordmydesktop

Tạo ogv2gif.shvới nội dung sau:

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

Sử dụng nó :

./ogv2gif.sh yourscreencast.ogv

Người giới thiệu :


1

Tôi kiểm tra tất cả các phương pháp trên, tìm thấy một cách đơn giản nhất là:

  1. sử dụng gtk-recordmydesktopkey-mon để nhận ogv
  2. ffmpeg -i xx.ogv xx.gif <- không có bất kỳ tham số nào .

khung hình / giây là bản gốc và kích thước gif nhỏ hơn tệp ogv.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.