วิธีการสร้างภาพ GIF แบบเคลื่อนไหวของ screencast


476

ฉันเคยเห็นภาพ GIF แบบเคลื่อนไหวของการส่งหน้าจอ (เช่นเดียวกับที่แสดงด้านล่าง) เลื่อนตำแหน่งบนไซต์นี้สองสามครั้งเพื่อปรับปรุงคำตอบ

ภาพเคลื่อนไหว GIF

มีการใช้ toolchain ใดเพื่อสร้างสิ่งเหล่านี้ มีโปรแกรมที่ทำสิ่งนี้โดยอัตโนมัติหรือเป็นคนที่กำลัง screencasts แปลงให้เป็นชุดของเฟรมคงที่แล้วสร้างภาพ GIF หรือไม่?


6
LICEcap (http://www.cockos.com/licecap)นั้นง่ายกว่าโซลูชันด้านล่างใด ๆ เนื่องจากเป็นแบบอิง GUI ได้ฟรีในอิสระและราคา ข้อเสียเพียงอย่างเดียวคือคุณต้องเรียกใช้ผ่านทางไวน์
Dennis

4
ที่เกี่ยวข้อง: GIF screencasting; วิธี UNIXจาก Unix & Linux Stack Exchange
Cristian Ciupitu


2
ภาพหน้าจอตัวอย่างนี้ถ่ายใน Windows หรือไม่
Clément

@ Clémentนั่นเป็นสิ่งแรกที่ฉันสังเกตเห็นด้วย :)
UniversallyUniqueID

คำตอบ:


269

แอบมอง

เป็นแอปพลิเคชั่นใหม่ที่ช่วยให้คุณบันทึก GIF จากหน้าจอของคุณได้อย่างง่ายดาย

peek screencast สาธิต

อย่างไรก็ตามโปรดทราบว่า GIF มีจานสีที่ จำกัด มากดังนั้นจึงไม่ควรใช้มัน

ตั้งแต่ Ubuntu 18.10 คุณสามารถติดตั้ง Peek ได้โดยตรง

sudo apt install peek

สำหรับรุ่นเก่าของ Ubuntu คุณสามารถติดตั้งรุ่นล่าสุดของ Peek จากของPPA

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

ค้นหาข้อมูลเพิ่มเติมได้ในrepo GitHub


2
ใช่อันนี้ยอดเยี่ยม ใช้ได้กับ X11 เท่านั้นและมีเป้าหมายที่ GNOME 3
Ajith R Nair

2
@BeastWinterwolf และ ExillustX: อย่าโพสต์รายงานข้อผิดพลาดที่นี่ใช้ตัวติดตามปัญหาที่ผู้คนสนใจดูพวกเขาจริง ๆ ! รายงานได้ที่นี่: github.com/phw/peek/issues
oligofren

2
นี่เป็นเครื่องมือที่ยอดเยี่ยม
Mike

1
@Jop V. คุณทำบันทึกอย่างไร
milkovsky

1
@milkovsky ฉันไม่ได้บันทึกสิ่งนี้ อย่างที่พูดไปแล้วฉันคิดว่าพวกเขาใช้เครื่องเสมือนจริงและบันทึกไว้
stommestack

272

Byzanz

ซอฟต์แวร์ที่ดีที่สุดที่ฉันเคยพบในการบันทึก screencasts 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

ป้อนคำอธิบายรูปภาพที่นี่


3
ขอบคุณเครื่องมือที่ดี! สีไม่ถูกต้องเสมอไป แต่เป็นรายละเอียดเล็กน้อย ผมเคยเขียนสคริปต์เชลล์ซึ่งจะช่วยให้มีการจับภาพหน้าต่าง (เลือกบนรันไทม์โดยผู้ใช้), โพสต์ในคำตอบด้านล่าง
Rob W

57
Byzanz ไม่มี UI ใด ๆ ! ฉันควรจะคาดเดา x, y, ความกว้างและความสูงของพื้นที่ที่ฉันต้องการบันทึกหรือไม่? มันไร้สาระเล็กน้อยที่ในปี 2014 ฉันยังคงต้องทำเช่นนี้
Dan Dascalescu

5
@DanDascalescu ไม่มีใครบอกว่าคุณต้องใช้มัน ... ฉันชอบเทอร์มินัลมากกว่า GUI มีอะไรผิดปกติหรือเปล่า?
Bruno Pereira

31
@DanDascalescu ไม่จำเป็นต้องเดา คุณสามารถใช้xwininfoเพื่อรับคุณสมบัติหน้าต่าง
Marcus Møller

4
มีวิธีใดบ้างที่จะหลีกเลี่ยงการรู้ระยะเวลาล่วงหน้า? เมื่อทำการบันทึกฉันไม่เคยรู้ล่วงหน้าว่าจะใช้เวลานานเท่าใด
Nicolas Raoul

236

ก่อนติดตั้งสิ่งนี้:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

สิ่งเหล่านี้เป็นสิ่งที่จำเป็น, ImageMagick, MPlayer และ Desktop Recorder จากนั้นใช้Desktop Recorderเพื่อบันทึกส่วนหนึ่งของหน้าจอ / แอปพลิเคชันเพื่อใช้เป็นหน้าจอ screencast หลังจาก 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

35
อีกวิธีในการเพิ่มประสิทธิภาพ gif คือใช้ gifsicle: gifsicle -O in.gif -o out.gifฉันเพิ่งลองและลดขนาดไฟล์ได้ 100x
Yrogirg

10
สำหรับผู้ที่สงสัยว่าธงแรกในคำสั่ง @Yrogirg เป็นเมืองหลวง "O" ไม่ใช่ตัวเลข "0" :)
brandizzi

2
ว้าว gifsicle ทำให้การขุดของฉันเร็วขึ้น แต่ก็ไม่เล็กลงและคำสั่ง convert optimization ทำให้มันน่าเกลียด
MalcolmOcean

6
ฉันแนะนำให้รวมสองconvertขั้นตอนสุดท้ายไว้ในที่เดียว: convert output/* -layers Optimize output.gif. สำหรับฉันความเร็วในการประมวลผลนี้เพิ่มขึ้นรวมถึงทำให้ไฟล์เอาต์พุตมีขนาดเล็กลง ฉันไม่เห็นเหตุผลที่จะทำตามขั้นตอนเหล่านั้นแยกกัน (ฉันไม่ได้ลอง-fuzz 10%โต้แย้ง)
thejoshwolfe

1
เช่นเดียวกับ @ MalcolmOcean convertคำแถลงทำให้เหนือกว่าความน่ากลัว ตามเอกสาร ( imagemagick.org/script/command-line-options.php#layers ) การoptimizeใช้งานอาจเปลี่ยนแปลงได้ตลอดเวลา แต่ข้อความที่มีการปรับแต่งเล็กน้อยconvertกับ-coalesceธงทำให้สิ่งต่าง ๆ ดีขึ้น แต่ก็ยังไม่เป็นที่ยอมรับ ฉันสิ้นสุดต้องใช้การ-layers optimize-transparencyตั้งค่าเพื่อผลลัพธ์ที่ดีที่สุด:convert 'output/*.jpg' -coalesce -layers optimize-transparency optimised.gif

136

ภาพรวม

คำตอบนี้มีสามเชลล์สคริปต์:

  1. byzanz-record-window - เพื่อเลือกหน้าต่างสำหรับบันทึก
  2. byzanz-record-region - เพื่อเลือกส่วนหนึ่งของหน้าจอสำหรับการบันทึก
  3. ง่าย GUI front-end สำหรับ 1 โดยMHC

บทนำ

ขอบคุณ Bruno Pereira ที่แนะนำให้ฉันรู้จักbyzanz ! มันค่อนข้างมีประโยชน์สำหรับการสร้างภาพเคลื่อนไหว GIF สีอาจถูกปิดในบางกรณี แต่ขนาดไฟล์ทำขึ้น ตัวอย่าง: 40 วินาที 3.7MB

การใช้

บันทึกหนึ่ง / $PATHทั้งหมดต่อไปนี้สองสคริปต์ในโฟลเดอร์ภายในของคุณ นี่คือตัวอย่างของการใช้สคริปต์แรกเพื่อสร้างหน้าจอของหน้าต่างที่ระบุ

  1. วิ่ง byzanz-record-window 30 -c output.gif
  2. ไปที่หน้าต่าง (แท็บ alt) ที่คุณต้องการบันทึก คลิกที่มัน
  3. รอ 10 วินาที (กำหนดค่าตายตัว$DELAY) ซึ่งคุณเตรียมการบันทึก
  4. หลังจากเสียงบี๊บ (กำหนดในbeepฟังก์ชั่น) byzanzจะเริ่มขึ้น
  5. หลังจาก 30 วินาที (นั่นคือความหมายของ30ในขั้นตอนที่ 1) byzanzสิ้นสุดลง เสียงบี๊บจะออกอากาศอีกครั้ง

ฉันรวมการ-cตั้งค่าสถานะbyzanz-record-windowเพื่อแสดงให้เห็นว่าข้อโต้แย้งใด ๆ ในสคริปต์เชลล์ของฉันถูกผนวกเข้ากับbyzanz-recordตัวเอง -cธงบอกbyzanzยังรวมถึงเคอร์เซอร์ใน screencast ที่
ดู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

พึ่งพา: 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 ): ฉันมีอิสระที่จะแก้ไขสคริปต์ด้วยบทสนทนา 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"

17
สคริปต์เหล่านี้ถูกเก็บไว้ที่ใดที่หนึ่งเหมือน GitHub หรือไม่? พวกมันมีประโยชน์มากมันคงจะดีถ้าพวกมันถูกเก็บไว้ที่ใดที่หนึ่งดีกว่าข้อความในคำตอบ StackOverflow
KFro

1
@KFro นี่คือถาม Ubuntu ไม่ใช่ SO;) ไม่ฉันไม่ได้ใส่ไว้ในที่เก็บ git เพราะสคริปต์ตัวเองมีเอกสารไม่ดี (สำหรับผู้ใช้) เอกสารประกอบที่มาพร้อมกับคำตอบดังนั้นฉันไม่เห็นประโยชน์ของการแยกไฟล์และเอกสารในที่เก็บ Git
Rob W

1
ไม่มีเครดิตสำหรับการแก้ไข แต่ทำแล้วเสร็จ ;-)
Rmano

2
แค่อยากจะบอกว่าขอบคุณมากสำหรับสิ่งนี้ - คำตอบที่ยอดเยี่ยมและช่วยฉันออกมามาก นี่คือสิ่งที่ฉันลงเอยด้วย ฉันชอบที่จะใช้notify-sendเช่นกันในกรณีที่เสียงของฉันถูกปิด
Daniel Buckmaster

2
@Masi Byzanz - และสคริปต์เหล่านี้ - ทำงานได้ดีสำหรับฉันใน 16.04
Jeff Puckett

51

ffmpeg ติดตั้ง ffmpeg

ffmpegหนึ่งในเครื่องมือที่ดีที่สุดที่ผมใช้เป็น สามารถใช้วิดีโอส่วนใหญ่จากเครื่องมือ screencast เช่นkazamและแปลงเป็นรูปแบบอื่น

ติดตั้งจากศูนย์ซอฟต์แวร์ - ติดตั้งโดยอัตโนมัติหากคุณติดตั้งubuntu-restricted-extrasแพ็คเกจที่ดีเยี่ยม

Kazam สามารถส่งออกในรูปแบบวิดีโอหรือmp4 webmโดยทั่วไปแล้วคุณจะได้ผลลัพธ์ที่ดีกว่าในmp4รูปแบบ

ตัวอย่าง GIF การสร้างไวยากรณ์

ไวยากรณ์พื้นฐานในการแปลงวิดีโอเป็น gif คือ:

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

แปลง GIFs โดยเฉพาะที่มี 25/29 เฟรมต่อวินาทีมาตรฐานอาจมีขนาดใหญ่มาก ตัวอย่างเช่น - วิดีโอ 800Kb webm 15 วินาทีที่ 25fps สามารถส่งออกไปที่ 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กับปัจจัย 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

ตัวอย่าง

ป้อนคำอธิบายรูปภาพที่นี่


หากคุณมี Docker และวิดีโอของ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
czerasz

2
สำหรับฉันมันบ่นว่าไม่มีตัวเลือกเช่น-loop_output...

1
+1 คำตอบที่ดีที่สุด แต่คุณคิดว่ายังคงubuntu-restricted-extrasยอดเยี่ยมหรือไม่?
Severus Tux

1
@ParanoidPanda -loopตอนนี้ตัวเลือกที่ -loop 0ดังนั้นมันจะเป็น นี่เป็นคำสั่งที่ทำงานในอูบุนตู ffmpeg -f x11grab -r 25 -s 100x100 -i :0.0+500,500 -pix_fmt rgb24 -loop 0 out2.gif16.04.01 +500,500คือตำแหน่ง X, Y เพื่อเริ่มสี่เหลี่ยมผืนผ้า 100x100 xgrabใช้หน้าจอเป็นอินพุต
sanbor

34

Silentcast

Silentcast เป็นอีกหนึ่งเครื่องมือที่ยอดเยี่ยมสำหรับการสร้างภาพ. gif คุณสมบัติของมันรวมถึง:

  • 4 โหมดการบันทึก:

    1. หน้าจอทั้งหมด

    2. หน้าต่างด้านใน

    3. หน้าต่างพร้อมการตกแต่ง

    4. การเลือกที่กำหนดเอง

  • 3 รูปแบบผลลัพธ์:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (เฟรม)

    5. .mkv

  • ไม่จำเป็นต้องติดตั้ง (พกพา)

  • ไดเรกทอรีการทำงานที่กำหนดเอง

  • เฟรมต่อวินาทีที่กำหนดเอง

การติดตั้ง

หากคุณต้องการการติดตั้งปกติและใช้งาน 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 คุณอาจต้องการติดตั้งส่วนขยาย Topiconsเพื่อหยุด Silentcast ให้ง่ายขึ้น

การใช้

เริ่ม Silentcast จากกุยสภาพแวดล้อมเดสก์ท็อปของคุณหรือรันsilentcastคำสั่งในเทอร์มินัล เลือกการตั้งค่าของคุณและปฏิบัติตามคำแนะนำบนหน้าจอ เมื่อคุณบันทึกเสร็จแล้วคุณจะได้รับกล่องโต้ตอบสำหรับปรับแต่งผลลัพธ์สุดท้ายโดยการลบเฟรมจำนวนหนึ่ง

สำหรับแนวทางการใช้งานเชิงลึกเพิ่มเติมดูที่ README ไม่ว่าจะเป็นรุ่นออนไลน์ GitHubหรือรุ่นท้องถิ่นที่จัดเก็บ/usr/share/doc/silentcastด้วย zless หรือโปรแกรมแก้ไขรายการโปรดของคุณ

ตัวอย่าง

หมายเหตุ:

Silentcast ยังคงอยู่ในขั้นตอนการพัฒนาและแม้ว่าจะค่อนข้างเสถียรคุณอาจพบข้อบกพร่องบางอย่าง หากคุณโปรดรายงานปัญหาเหล่านี้ในตัวติดตามปัญหา GitHub ของโครงการ หากคุณมีปัญหาในการติดตั้งจาก PPA และใช้งาน Ubuntu รุ่นที่รองรับแสดงความคิดเห็นด้านล่างหรือติดต่อผู้ดูแล (ฉัน) บน Launchpad


ทันทีที่ฉันกด 'หยุด' มันจะขัดข้อง ...
Francisco Corrales Morales

@FranciscoCorralesMorales คุณเรียกใช้จากบรรทัดคำสั่งแล้วลอง? เมื่อเกิดข้อผิดพลาดเอาออกและอัปโหลดไปที่paste.ubuntu.comและเชื่อมโยงมันกลับมาที่นี่เพื่อให้ฉันสามารถดู ขอบคุณ!
เซท

1
ฉันสามารถยืนยันว่าใช้งานได้ดี! มันสร้างไฟล์. gif ขนาดเล็กมาก (650 KB) ที่มีความละเอียดสูงนอกหน้าต่างที่เปิดตามที่แสดงในคำตอบนี้: askubuntu.com/questions/882419//ฉันอาจเพิ่มโปสเตอร์ @Seth เป็นคนที่ยอดเยี่ยมและช่วยฉันใน AU ห้องแชททั่วไปตั้งค่า :)
WinEunuuchs2Unix

โครงการถูกยกเลิกหรือไม่ ไม่ได้มีข้อผูกมัดใด ๆ กับที่เก็บในเกือบสองปี
ฟลักซ์

@flux น่าเสียดายระหว่างปัญหาสุขภาพกับ uni ใช่ พื้นที่เก็บข้อมูลถูกยกเลิกในขณะนี้ อย่างไรก็ตามโครงการบน GitHub ไม่ได้เป็นเช่นนั้นและคุณสามารถรับรหัสล่าสุดได้
เซท

8

มีวิธีการที่ซับซ้อนและใช้งานได้ดี (น่าจะเป็น) ในการทำรายการที่นี่ อย่างไรก็ตามฉันไม่เคยต้องการผ่านกระบวนการนั้นมาก่อนหรือตั้งแต่ ดังนั้นฉันเพียงแค่ใช้ตัวแปลงออนไลน์ที่เหมาะสมกับความต้องการของฉันไม่กี่ครั้งที่ฉันต้องทำ ฉันใช้เว็บไซต์นี้:

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

ไม่ใช่เว็บไซต์ของฉันและฉันไม่ได้มีส่วนเกี่ยวข้องกับพวกเขา แต่อย่างใด พวกเขาเป็นเพียงหนึ่งในที่คั่นหนังสือของฉันและมีอีกมากมาย


ฉันชอบสิ่งนี้. ฉันใช้ simplescreenrecorder ในการบันทึกเดสก์ท็อปของฉันสำหรับ youtube เป็นครั้งคราวดังนั้นการเปลี่ยน mkv เป็น gif นั้นทำได้ง่าย
isaaclw

8

ฉันสร้างRob W'srecord-gif.shรุ่นปรับปรุงแล้ว:byzanz-record-region

lame GUI สำหรับbyzanzปรับปรุงประสบการณ์ผู้ใช้ ( พื้นที่ที่สามารถเลือกเมาส์ได้แถบบันทึกความคืบหน้าการบันทึกซ้ำที่สามารถเล่นซ้ำได้ )

เดสก์ท็อปบันทึกด้วยเชลล์

  • ตั้งค่าการบันทึกduration;
  • save_asปลายทางที่กำหนด;
  • เลือก - ด้วยเมาส์ -พื้นที่ที่จะบันทึก;
  • สร้างสคริปต์เพื่อเล่นซ้ำการบันทึก (cf. $HOME/record.again)

ติดตั้ง

ฉันยังสร้างสคริปต์การติดตั้ง

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

1
คุณต้องทำsudo apt install autoconf byzanzก่อนที่จะเรียกใช้สคริปต์นี้ ไม่ได้ติดตั้งตามค่าเริ่มต้นใน ubuntu
Crantisz

@Crantisz ขอบคุณฉันปรับปรุงสคริปต์ติดตั้งในการติดตั้งและautoconf byzanzลองดูไหม
Édouard Lopez

ฉันเพิ่งทดสอบบนพีซีเครื่องอื่น ไม่มี git ในระบบอูบุนตูที่เพิ่งติดตั้งใหม่ของฉัน และฉันก็ไม่รู้ว่าทำไม แต่สคริปต์หยุดหลังจากคำถามที่ฉลาด - ที่สองได้รับ คุณสามารถแพ็คการอ้างอิงทั้งหมดในคำสั่งเดียวได้หรือไม่?
Crantisz

@Crantisz คำสั่งเป็นสคริปต์ตัวติดตั้งหากคุณต้องการให้ record-gif.sh คุณสามารถรับมันได้จาก repo
Édouard Lopez

4
  1. ติดตั้ง 3 แพคเกจเหล่านี้: imagemagick mplayer gtk-recordmydesktop
  2. เรียกใช้Desktop Recorderเพื่อจับภาพหน้าจอ / แอปพลิเคชันบางส่วนเพื่อใช้เป็นหน้าจอ screencast
  3. ดาวน์โหลดogv2gif.shจากhttps://github.com/nicolas-raoul/ogv2gif
  4. วิ่ง: ./ogv2gif.sh yourscreencast.ogv
  5. ไฟล์ GIF จะถูกวางในไดเรกทอรีเดียวกัน

100% รับแรงบันดาลใจจากคำตอบของ maniat1k


3

หากคุณต้องการมีความเป็นนักเล่นมากยิ่งขึ้นคุณสามารถใช้วิธีการที่ซับซ้อนกว่า gif เคลื่อนไหวโดยใช้ HTMl5 Canvas screencasting x11-ผ้าใบ screencastโครงการจะสร้าง HTML5 ผ้าใบเคลื่อนไหวจับภาพหน้าจอ

คุณอาจเห็นตัวอย่างที่มีชื่อเสียงของเทคโนโลยีนี้ในเว็บไซต์ Sublime Text x11-canvas-screencastใช้วิธีนี้อีกขั้นด้วยการรวมการติดตามเคอร์เซอร์ของเมาส์ นี่คือตัวอย่างของสิ่งที่ x11-canvas-screencast ผลิต

ผลลัพธ์จะดีกว่า gif แบบเคลื่อนไหวเนื่องจากไม่ จำกัด จำนวนสีที่มีและใช้แบนด์วิดท์น้อยกว่า


1
นั่นเป็นสิ่งที่ดีและทั้งหมด แต่คุณไม่สามารถแบ่งปันสิ่งนี้ได้อย่างง่ายดายเช่น Slack, Twitter และอื่น ๆ
Elijah Lynn

@ElijahLynn จริงมาก โซลูชันนี้เหมาะสำหรับอัตราเฟรมสูงแบนด์วิดท์ต่ำความลึกของสีเต็ม ไม่ใช่แบบพกพา (เพื่อฝังในทวีตเป็นต้น) เนื่องจากต้องใช้จาวาสคริปต์
gene_wood

3

ตกลงดังนั้นเพื่อจับการคลิกเมาส์สิ่งเดียวที่ฉันพบคือkey-mon(ผ่าน README ของscreenkey):

แล้วฉัน:

  • เริ่มต้น key-mon
  • ใช้xrectselในการรับพิกัดของหน้าจอใส่ลงในbyzanzคำสั่ง
  • เรียกใช้byzanzคำสั่ง

... และมันก็เป็นแบบนี้:

out.gif

โปรดทราบว่าkey-mon --visible_clickจะวาดวงกลมรอบตัวชี้เมาส์เมื่อคลิกเมาส์ - ซึ่งฉันต้องการ แต่ใน Ubuntu 14.04.5 LTS มันค่อนข้างจะแตกเนื่องจากวงกลมนี้ไม่ปรากฏขึ้นและหายไปเร็วพอที่จะแสดงการคลิกได้อย่างถูกต้อง (เช่น เมาส์กดและปล่อย)


2

ฉันเพิ่งสร้างสคริปต์รวมรุ่นที่โพสต์แล้วที่นี่
โดยทั่วไปจะช่วยให้คุณบันทึกภูมิภาคของหน้าจอ แต่ใช้ 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"

2

หากคุณต้องการให้การบันทึกการคลิกเมาส์หรือการกดปุ่มปรากฏให้เห็นชัดเจน screenkey คือทางออกที่ดีที่สุดของคุณ: https://github.com/wavexx/screenkey


2
ฉันไม่เห็นว่าscreenkeyจะจัดการกับการคลิกเมาส์ได้อย่างไร (ดูเหมือนว่าเป็นเพียงการระบุแป้นพิมพ์เท่านั้น) อย่างไรก็ตาม README หมายถึงkey-monว่าสามารถทำได้อย่างไรโปรดดูคำตอบของฉันด้านล่าง
sdaau

1

ใช้gtk-recordmydesktopและffmpeg:

apt-get install gtk-recordmydesktop ffmpeg

เรียกใช้ RecordMyDesktop จับภาพส่วนหนึ่งของหน้าจอ / แอปพลิเคชันเพื่อใช้เป็นหน้าจอ screencast:

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

การอ้างอิง:


1

ฉันทดสอบวิธีข้างต้นทั้งหมดพบวิธีที่ง่ายที่สุดคือ:

  1. ใช้gtk-recordmydesktopและkey-monเพื่อรับ ogv
  2. ffmpeg -i xx.ogv xx.gif <- ไม่มีพารามิเตอร์ใด

fps เป็นต้นฉบับและขนาด gif น้อยกว่าไฟล์ ogv

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.