이 사이트에서 스크린 캐스트 (아래 그림과 같은)의 애니메이션 GIF 이미지가 답변을 개선하는 방법으로 몇 번 홍보되는 것을 보았습니다.
이를 작성하기 위해 어떤 툴체인이 사용되고 있습니까? 이것을 자동적으로 수행하는 프로그램이 있습니까, 아니면 사람들이 스크린 캐스트를 찍어 일련의 정적 프레임으로 변환 한 다음 GIF 이미지를 만드는 프로그램이 있습니까?
이 사이트에서 스크린 캐스트 (아래 그림과 같은)의 애니메이션 GIF 이미지가 답변을 개선하는 방법으로 몇 번 홍보되는 것을 보았습니다.
이를 작성하기 위해 어떤 툴체인이 사용되고 있습니까? 이것을 자동적으로 수행하는 프로그램이 있습니까, 아니면 사람들이 스크린 캐스트를 찍어 일련의 정적 프레임으로 변환 한 다음 GIF 이미지를 만드는 프로그램이 있습니까?
답변:
화면에서 GIF를 쉽게 기록 할 수있는 새로운 응용 프로그램입니다.
어쨌든 GIF는 색상 팔레트가 매우 제한되어 있으므로 사용하는 것이 좋지 않습니다.
Ubuntu 18.10부터 Peek를 직접 설치할 수 있습니다.
sudo apt install peek
이전 버전의 Ubuntu의 경우 PPA 에서 최신 버전의 Peek를 설치할 수 있습니다 .
sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
sudo apt install peek
자세한 내용은 GitHub 리포지토리 에서 찾으십시오 .
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
xwininfo
창 속성을 얻는 데 사용할 수 있습니다 .
먼저 이것을 설치하십시오 :
sudo apt-get install imagemagick mplayer gtk-recordmydesktop
이것들은 ImageMagick, MPlayer 및 Desktop Recorder와 같은 필수 항목입니다. 그런 다음 Desktop Recorder 를 사용하여 스크린 캐스트로 사용할 화면 / 응용 프로그램의 일부를 캡처하십시오. 바탕 화면 레코더가로 녹음을 저장 한 후 OGV 비디오 , MPlayer는이 '출력'디렉토리로 저장, JPEG 스크린 샷을 캡처하는 데 사용됩니다.
터미널에서 :
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
gifsicle -O in.gif -o out.gif
것입니다. 방금 파일 크기를 100 배 줄였습니다.
convert
단계를 하나로 결합하는 것이 좋습니다 convert output/* -layers Optimize output.gif
.. 나에게 이것은 처리 시간을 단축시키고 출력 파일을 작게 만들었습니다. 해당 단계를 별도로 수행해야 할 이유가 없습니다. (나는 -fuzz 10%
논쟁을 시도하지 않았다 .)
convert
성명서는 끔찍한 것 이상이었습니다. 문서 ( imagemagick.org/script/command-line-options.php#layers )에 따르면 optimize
구현은 시간이 지남에 따라 변경 될 수 있습니다. 그러나 깃발 로 약간 수정 된 convert
진술은 -coalesce
개선되었지만 여전히 수용 가능한 곳은 아닙니다. -layers optimize-transparency
최상의 결과를 위해 설정 을 사용해야했습니다 .convert 'output/*.jpg' -coalesce -layers optimize-transparency optimised.gif
이 답변에는 세 가지 셸 스크립트가 포함되어 있습니다.
byzanz-record-window
-녹화 할 창을 선택합니다.byzanz-record-region
-녹화 화면의 일부를 선택합니다.소개해byzanz
주셔서 감사합니다 Bruno Pereira ! GIF 애니메이션을 만드는 데 매우 유용합니다. 경우에 따라 색상이 꺼져있을 수 있지만 파일 크기가이를 보완합니다. 예 : 40초, 3.7MB .
다음 두 스크립트 중 하나 / 모두를에있는 폴더에 저장하십시오 $PATH
. 다음은 첫 번째 스크립트를 사용하여 특정 창의 스크린 캐스트를 만드는 예입니다.
byzanz-record-window 30 -c output.gif
$DELAY
녹음 준비를하는 10 초 동안 (하드 코딩 됨 ) 기다립니다 .beep
함수에 정의 된) 후에 byzanz
시작됩니다.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
종속성 : xrectselxrectsel
로부터 . 저장소를 복제하고 실행 파일을 가져 오십시오. (이 항의 경우에는 메이크 파일, 실행이없는 과 `메이크업을 실행하기 전에이).make
./bootstrap
./configure
#!/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
byzanz-record-window
( MHC의 주석 ) : 간단한 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 $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"
notify-send
소리가 나지 않을 때도 사용 하고 싶습니다 .
내가 사용하는 가장 좋은 도구 중 하나는 ffmpeg
입니다. 스크린 캐스트 도구에서 대부분의 비디오를 가져 와서 kazam
다른 형식으로 변환 할 수 있습니다.
소프트웨어 센터 에서 설치하십시오 -우수한 ubuntu-restricted-extras
패키지 를 설치하면 자동으로 설치됩니다 .
Kazam은 비디오 형식으로 mp4
또는을 출력 할 수 있습니다 webm
. 일반적으로 더 나은 결과를 mp4
형식으로 출력 합니다.
비디오를 gif로 변환하는 기본 구문은 다음과 같습니다.
ffmpeg -i [inputvideo_filename] -pix_fmt rgb24 [output.gif]
변환 된 GIF-특히 표준 초당 25/29 프레임의 GIF는 매우 클 수 있습니다. 예를 들어, 25fps에서 800Kb webm 15 초 비디오를 435Mb로 출력 할 수 있습니다!
여러 가지 방법으로이를 줄일 수 있습니다.
옵션을 사용하십시오 -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 비디오 크기를 26Mb로 줄였습니다.
때로는 GIF가 영원히 반복되기를 원할 수 있습니다.
옵션을 사용하십시오 -loop_output 0
ffmpeg -i Untitled_Screencast.webm -loop_output 0 -pix_fmt rgb24 out.gif
imagemagick
convert
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
예
demo.mkv
이 명령을 실행할 수 있습니다 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
ubuntu-restricted-extras
우수 하다고 생각합니까 ??
-loop
입니다. 그렇습니다 -loop 0
. 다음은 Ubuntu 16.04.01의 작동 명령입니다 ffmpeg -f x11grab -r 25 -s 100x100 -i :0.0+500,500 -pix_fmt rgb24 -loop 0 out2.gif
. +500,500
100x100 직사각형을 시작하는 X, Y 위치입니다. xgrab
화면을 입력으로 사용합니다.
Silentcast는 애니메이션 .gif 이미지를 만들기위한 훌륭한 GUI 기반 도구입니다. 기능은 다음과 같습니다.
4 가지 녹화 모드 :
전체 화면
내부 창
장식 창
맞춤 선택
3 가지 출력 형식 :
.gif
.mp4
.webm
.png
(프레임)
.mkv
설치 불필요 (휴대용)
사용자 정의 작업 디렉토리
커스텀 FPS
정기적으로 설치하고 지원되는 Ubuntu 버전을 실행중인 경우 PPA로 Silentcast를 설치할 수 있습니다.
sudo add-apt-repository ppa:sethj/silentcast
sudo apt-get update
sudo apt-get install silentcast
당신이 (당신이 정말로 업그레이드해야합니다!) 우분투의 지원되는 버전을 실행하지 않는 경우 최신 버전을 다운로드해야합니다 GitHub의 페이지에서 수동으로 (당신이에서 야드와는 FFmpeg을 조달 할 수있는 종속 관계를 만족 여기 와 여기에 각각)이나, 13.10과 같은 약간 더 최신 버전을 실행중인 경우 .deb를 직접 다운로드 할 수 있습니다 .
Gnome을 사용하는 경우 Topicons 확장 프로그램 을 설치하여 Silentcast를보다 쉽게 중지 할 수 있습니다.
데스크탑 환경의 GUI에서 Silentcast를 시작하거나 silentcast
터미널 에서 명령을 실행하십시오 . 설정을 선택하고 화면의 지시를 따릅니다. 녹음이 끝나면 특정 수의 프레임을 제거하여 최종 출력을 최적화하기위한 대화 상자가 표시됩니다.
자세한 사용 지침은 온라인 GitHub 버전 또는 /usr/share/doc/silentcast
zless 또는 좋아하는 편집기에 저장된 로컬 버전 인 README를 살펴보십시오 .
Silentcast는 여전히 개발 단계에 있으며 상당히 안정적이지만 몇 가지 버그가 발생할 수 있습니다. 그렇다면 프로젝트의 GitHub 이슈 트래커에 보고하십시오 . PPA에서 설치하는 데 문제가 있고 지원되는 Ubuntu 버전을 실행중인 경우 아래에 의견을 남기거나 Launchpad 의 관리자 에게 문의하십시오 .
여기에 나열된 모든 종류의 복잡하고 잘 작동하는 (아마도) 방법이 있습니다. 그러나 나는 그 과정을 이전과 이후로 진행하고 싶지 않았습니다. 그래서, 나는 몇 번이나 필요에 맞는 온라인 변환기를 사용합니다. 이 사이트를 사용했습니다 :
그것은 내 사이트가 아니며 어떤 식 으로든 그들과 제휴하지 않습니다. 그들은 내 북마크에있는 것 중 하나이며 더 많은 것들이 있습니다.
Rob W의record-gif.sh
개선 된 버전을 만들었습니다 .byzanz-record-region
byzanz
사용자 경험 향상 ( 마우스 선택 가능 영역 , 레코딩 진행률 표시 줄, 재생 가능 레코딩 )을 위한 절름발이 GUI .
duration
;save_as
목적지 설정 ;$HOME/record.again
).또한 설치 스크립트를 만들었습니다
curl --location https://git.io/record-gif.sh | bash -
sudo apt install autoconf byzanz
이 스크립트를 실행하기 전에 수행해야합니다 . 그것은 우분투에서 기본적으로 설치되지 않습니다
autoconf
하고 byzanz
. 당신은 그것을 시도 할 수 있습니까?
imagemagick
mplayer
gtk-recordmydesktop
ogv2gif.sh
에서 다운로드./ogv2gif.sh yourscreencast.ogv
maniat1k의 답변 에서 100 % 영감을 얻었습니다 .
더 화려하게 만들고 싶다면 HTMl5 캔버스 스크린 캐스팅을 사용하는 애니메이션 GIF보다 더 정교한 방법을 사용할 수 있습니다. X11-캔버스 스크린 캐스트의 프로젝트는 HTML5 캔버스 애니메이션 화면 캡처를 작성합니다.
Sublime Text 웹 사이트에서이 기술의 유명한 예 를 보았을 것 입니다. x11-canvas-screencast
마우스 커서 추적을 통합하여이 방법을 한 단계 더 발전시킵니다. 다음은 x11-canvas-screencast가 생산 하는 데모입니다.
결과는 색상 수에 제한되지 않고 대역폭을 덜 사용하기 때문에 애니메이션 GIF보다 좋습니다.
마우스 클릭을 캡처하기 위해 내가 찾은 유일한 것은 key-mon
(의 README를 통해 screenkey
) :
sudo apt-get install key-mon
그럼 내가:
key-mon
xrectsel
화면을 얻기 위해 투입 좌표 byzanz
명령byzanz
명령을... 그리고 다음과 같이 보입니다.
그 주 key-mon --visible_click
마우스 클릭시 마우스 포인터 주위에 원 그리는 것 - (내가 선호하지만,이 원이 표시 올바르게 클릭을 설명하기 위해 충분히 빠르게 사라지지 않는 한 우분투 14.04.5 LTS에서이 다소 깨진 즉, 마우스를 눌렀다 놓습니다).
최근에 여기에 게시 된 통합 스크립트 버전을 만들었습니다.
기본적으로 간단한 GUI로 화면 영역을 기록 할 수 있습니다.
멋진 스크립트를 제공 해준 Rob W 에게 감사합니다
다음은 코드입니다 (또는 원하는 경우 요점 ).
#!/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"
마우스 클릭이나 키 스트로크를 눈에 띄게 녹화하려면 screenkey를 사용하는 것이 가장 좋습니다. https://github.com/wavexx/screenkey
사용 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
참고 문헌 :