چگونه تصاویر GIF متحرک از یک صفحه نمایش ایجاد کنیم؟


به جواب پذیرفته شده بروید




من تصاویر GIF متحرک از بازیگران روی صفحه را مشاهده کرده ام (مانند تصویر زیر) چند بار در این سایت به عنوان راهی برای بهبود پاسخ ها تبلیغ شده است.


تصویر متحرک GIF

برای ایجاد اینها از چه ابزار زنجیری استفاده می شود؟ آیا برنامه ای وجود دارد که این کار را بصورت اتوماتیک انجام می دهد ، یا افراد در حال گرفتن عکس از صفحه هستند ، آنها را به یک سری فریم استاتیک تبدیل کرده و سپس تصاویر GIF را ایجاد می کنند؟


482









15 :تعداد پاسخها


زیرچشمی نگاه کردن

برنامه جدیدی است که به شما امکان می دهد GIF را به راحتی از روی صفحه نمایش خود ضبط کنید.


نمایش نسخه ی نمایشی زیرچشمی نگاه کردن

به هر حال به خاطر داشته باشید که GIF یک پالت رنگی بسیار محدود دارد بنابراین استفاده از آنها ایده خوبی نیست.

از اوبونتو 18.10 می توانید Peek را مستقیماً نصب کنید.

 sudo apt install peek
 

برای نسخه های قدیمی تر اوبونتو ، می توانید آخرین نسخه های Peek را از PPA آن نصب کنید .

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

اطلاعات بیشتری را در repo GitHub پیدا کنید .


278



بیزانز

بهترین نرم افزاری که تاکنون برای ضبط صفحه نمایش GIF پیدا کردم ، بیزانز است.

Byzanz بسیار عالی است زیرا مستقیماً در GIF ضبط می شود ، کیفیت و FPS در حالی که اندازه پرونده ها را به حداقل می رساند چشمگیر است.

نصب و راه اندازی

Byzanz اکنون از مخازن جهان در دسترس است:

 sudo apt-get install byzanz
 

طریقه استفاده

وقتی نصب شد می توانید آن را در یک ترمینال اجرا کنید.

این یک نمونه کوچک است که من همین حالا با آن انجام دادم

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


توضیحات تصویر را اینجا وارد کنید


272



ابتدا این را نصب کنید:

 sudo apt-get install imagemagick mplayer gtk-recordmydesktop
 

این موارد مورد نیاز ، ImageMagick ، ​​MPlayer و Recorder Desktop هستند. سپس از ضبط دسکتاپ استفاده کنید تا بخشی از صفحه / برنامه را ضبط کنید تا از آن به عنوان محافظ صفحه استفاده کنید. پس از اینکه دستگاه ضبط دسکتاپ ضبط را در یک فیلم OGV ذخیره کرده است ، از MPlayer برای ضبط تصاویر JPEG استفاده می شود و آنها را در فهرست "خروجی" ذخیره می کند.

در ترمینال:

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

از ImageMagick برای تبدیل تصاویر به گیف های متحرک استفاده کنید.

 convert output/* output.gif
 

می توانید تصاویر را از این طریق بهینه کنید:

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

236



بررسی اجمالی

این پاسخ شامل سه اسکریپت پوسته است:

  1. byzanz-record-window - برای انتخاب یک پنجره برای ضبط.
  2. byzanz-record-region - برای انتخاب بخشی از صفحه برای ضبط.
  3. جلوی ساده GUI برای 1 ، توسط MHC .

مقدمه

از برونو پریرا تشکر می کنم که مرا معرفی کردید byzanz ! برای ایجاد انیمیشن های GIF کاملاً مفید است. ممکن است رنگها در بعضی موارد خاموش باشند ، اما اندازه پرونده آن را تشکیل می دهد. مثال: 40 ثانیه ، 3.7Mb .

طریقه استفاده

یک / همه دو اسکریپت زیر را در یک پوشه در داخل خود ذخیره کنید $PATH . در اینجا مثالی در مورد استفاده از اولین اسکریپت برای نمایش صفحه نمایش یک پنجره خاص ارائه شده است.

  1. اجرا کن byzanz-record-window 30 -c output.gif
  2. به پنجره (alt-tab) که می خواهید ضبط کنید بروید. روی آن کلیک کنید.
  3. 10 ثانیه صبر کنید (کدگذاری شده $DELAY ) ، که در آن شما را برای ضبط آماده می کنید.
  4. پس از بوق (در beep عملکرد تعریف شده است) ، byzanz شروع می شود.
  5. بعد از 30 ثانیه (این معنی 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="[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 $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 قبل از اجرای 'که).

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

نسخه 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"
 

138



ffmpeg
ffmpeg را نصب کنید

یکی از بهترین ابزاری که استفاده می کنم ffmpeg . این می تواند اکثر فیلم ها را از یک ابزار Scencast مانند مانند گرفته kazam و آن را به قالب دیگری تبدیل کند.

این کار را از طریق مرکز نرم افزار نصب کنید - در صورت نصب ubuntu-restricted-extras بسته عالی ، به صورت خودکار نصب می شود.

Kazam می تواند در قالب های ویدیویی mp4 یا webm . به طور کلی نتیجه بهتری در mp4 قالب می گیرید .

به عنوان مثال نحوی ساخت GIF

نحو اصلی برای تبدیل فیلم به gif عبارت است از:

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

GIF های تبدیل شده - به ویژه آنهایی که فریم در هر ثانیه 25/29 استاندارد دارند می توانند بسیار بزرگ باشند. به عنوان مثال - یک ویدیوی 15 ثانویه 800 کیلوبایت وب با سرعت 25 فریم در ثانیه می تواند به 435 مگابایت برسد!

می توانید این کار را با چند روش کاهش دهید:

فریمر

از گزینه استفاده کنید -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 را به 26 مگابایت کاهش داد

حلقه برای همیشه

بعضی اوقات ممکن است بخواهید 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
 

مثال


توضیحات تصویر را اینجا وارد کنید


51



Silentcast

Silentcast یکی دیگر از ابزارهای عالی مبتنی بر gui برای ایجاد تصاویر .gif متحرک است. ویژگی های آن عبارتند از:

  • 4 حالت ضبط:

    1. صفحه نمایش کامل

    2. داخل پنجره

    3. پنجره با دکوراسیون

    4. انتخاب سفارشی

  • 3 قالب خروجی:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (فریم)

    5. .mkv

  • بدون نصب لازم (قابل حمل)

  • دایرکتوری کار سفارشی

  • فریم در ثانیه سفارشی

نصب و راه اندازی

اگر می خواهید یک نصب معمولی داشته باشید و نسخه پشتیبانی شده اوبونتو را اجرا می کنید ، می توانید Silentcast by PPA را نصب کنید:

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

اگر نسخه پشتیبانی شده اوبونتو را اجرا نمی کنید (باید واقعاً ارتقا دهید!) باید جدیدترین نسخه را از صفحه GitHub بارگیری کنید و وابستگی ها را به صورت دستی برآورده کنید (می توانید yad و ffmpeg را به ترتیب از اینجا و اینجا تهیه کنید ) یا ، اگر نسخه کمی جدیدتر مانند 13.10 را اجرا می کنید ، می توانید مستقیماً .deb را بارگیری کنید .

اگر از Gnome استفاده می کنید ، می توانید افزونه Topicons را نصب کنید تا توقف Silentcast آسان تر شود.

طریقه استفاده

Silentcast را از گرافیک محیط دسک تاپ خود شروع کنید یا silentcast دستور را در یک ترمینال اجرا کنید. تنظیمات خود را انتخاب کرده و پیام های روی صفحه را دنبال کنید. هنگامی که کار ضبط را تمام کردید ، با از بین بردن تعداد مشخصی از فریمها ، دیالوگ برای بهینه سازی خروجی نهایی ارائه می شود.

برای استفاده بیشتر از دستورالعمل های عمیق ، به README یا نسخه آنلاین GitHub یا نسخه محلی ذخیره شده در آن /usr/share/doc/silentcast با ویرایشگر zless یا مورد علاقه خود نگاهی بیندازید.


مثال

یادداشت:

Silentcast هنوز در مرحله توسعه است و اگرچه کاملاً پایدار است اما ممکن است با برخی از اشکالات روبرو شوید. اگر شما لطفاً آنها را در مورد ردیاب مسائل GitHub پروژه گزارش دهید . اگر در نصب برنامه PPA مشکلی دارید و یک نسخه پشتیبانی شده از اوبونتو را اجرا می کنید ، نظر خود را در زیر بگذارید یا با نگهبان (من) در Launchpad تماس بگیرید.


34



انواع روش های پیچیده و خوب (احتمالاً) برای انجام این کار ذکر شده در اینجا وجود دارد. با این حال ، من هرگز نخواسته ام قبل از آن یا از آن زمان این روند را طی کنم. بنابراین ، من به سادگی از مبدل آنلاین استفاده می کنم که متناسب با نیازهای من است که چند بار برای انجام این کار نیاز دارم. من از این سایت استفاده کردم:

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

این سایت من نیست و من به هیچ وجه با آنها وابسته نیستم. آنها فقط یکی در نشانک های من هستند و تعداد بسیاری دیگر وجود دارد.


8



من record-gif.sh نسخه بهبود یافته ای از Rob W را ایجاد کردم byzanz-record-region :

یک رابط کاربری گرافیکی لنگ byzanz ، باعث بهبود تجربه کاربر ( ناحیه قابل انتخاب ماوس ، نوار پیشرفت ضبط ، ضبط قابلیت پخش مجدد ).


ضبط رومیزی با پوسته

  • تنظیم ضبط duration ؛
  • save_as مقصد را تعیین کنید ؛
  • را انتخاب کنید - با ماوس - منطقه برای ضبط.
  • یک اسکریپت برای پخش مجدد ضبط ایجاد کنید (ر.ک. $HOME/record.again ).

نصب

من یک اسکریپت نصب هم ایجاد کردم

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

8



  1. نصب این 3 بسته: imagemagick mplayer gtk-recordmydesktop
  2. ضبط دسکتاپ را اجرا کنید تا قسمتی از صفحه / برنامه را برای استفاده به عنوان پرده ضبط کنید
  3. دانلود ogv2gif.sh از https://github.com/nicolas-raoul/ogv2gif
  4. اجرا کن: ./ogv2gif.sh yourscreencast.ogv
  5. پرونده GIF در همان فهرست قرار می گیرد

100٪ از جواب maniat1k الهام گرفته شده است .


4



اگر می خواهید حتی متعادل تر شوید ، می توانید از یک روش پیچیده تر از gif های متحرک با استفاده از صفحه نمایش بوم HTMl5 استفاده کنید. پروژه x11-canvas-screenen یک صفحه نمایش متحرک بوم html5 ایجاد می کند.

شما ممکن است نمونه های معروف این فناوری را در وب سایت Sublime Text دیده باشید. x11-canvas-screencast این روش را با استفاده از ردیابی مکان نما موش ، یک قدم بیشتر می برد. در اینجا نمایشی از آنچه x11-canvas-screenen تولید می کند وجود دارد

نتیجه بهتر از یک گیف متحرک است زیرا به تعداد رنگ های موجود محدود نمی شود و پهنای باند کمتری را می طلبد.


3



خوب ، بنابراین به منظور ضبط کلیک ماوس ، تنها چیزی که پیدا کردم این بود key-mon (از طریق README screenkey ):

سپس من:

  • شروع کنید key-mon
  • استفاده xrectsel به روی صفحه نمایش مختصات قرار داده و به byzanz فرمان
  • byzanz دستور را اجرا کنید

... و به نظر می رسد مانند این:


بیرون

توجه داشته باشید که key-mon --visible_click با کلیک ماوس ، یک دایره در اطراف نشانگر ماوس بکشید - که من ترجیح می دهم ، اما در اوبونتو 14.04.5 LTS این تا حدودی شکسته است ، زیرا این دایره ظاهر نمی شود و به اندازه کافی سریع ناپدید می شود تا بتواند کلیک های صحیح را نشان دهد. مطبوعات و انتشار ماوس).


3



اخیراً نسخه اسکریپت هایی را که قبلاً در اینجا ارسال شده اند ، ایجاد کردم.
در اصل ، این امکان را به شما می دهد تا منطقه صفحه نمایش را ضبط کنید ، اما با رابط کاربری گرافیکی ساده.

از 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



اگر می خواهید ضبط های قابل مشاهده از کلیک های ماوس یا سکته های کلیدی را نیز انجام دهید ، بهترین گزینه شرط بندی برای شما است: https://github.com/wavexx/screenkey


2



استفاده 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
 

منابع :


1



من تمام روش های فوق را تست کردم ، که ساده ترین روش این است:

  1. برای به دست آوردن ogv از gtk-recordmydesktop و key-mon استفاده کنید
  2. ffmpeg -i xx.ogv xx.gif <- بدون هیچ پارامتری .

fps اصلی است ، و اندازه gif از پرونده ogv کمتر است.


1



انتشارات مرتبط


چگونه از طریق MP4 از طریق خط فرمان ، GIF متحرک ایجاد کنیم؟

نحوه ایجاد یک USB قابل بوت با چندین تصویر ISO در آن

چگونه می توان از یک دسته از فایلها روی سیستم فایل ، یک تصویر ISO ایجاد کرد؟

نحوه ایجاد تصویر iso از DVD [تکراری]

چگونه می توان وب (ویدئو) را به یک gif (متحرک) در خط فرمان تبدیل کرد؟

چگونه تصویر کارت sd ایجاد شده با dd را نصب کنیم؟

ابزاری برای تبدیل توالی از پرونده های PNG به GIF متحرک؟

چگونه با استفاده از اسکریپت پوسته بتوانیم یک انیمیشن چرخشی ایجاد کنیم؟

برنامه GUI برای ایجاد تصویر پشتیبان پارتیشن بزرگتر از پرونده های آن نیست؟

چگونه یک تصویر iso از فایل vdi ایجاد کنیم؟

[screencast] سوال برچسب


نحوه لیست تمام بسته های نصب شده

چگونه می توان PPA ها را حذف کرد؟

چگونه می توانم یک فایل .deb را از طریق خط فرمان نصب کنم؟

چگونه حالت bash یا ssh را به یک ظرف در حال اجرا در حالت پس زمینه تبدیل کنیم؟

"بسته های زیر ذخیره نشده است:" چرا و چگونه می توانم آن را حل کنم؟

برای جدا کردن / استخراج پرونده .tar.gz به چه دستوراتی نیاز دارم؟

چگونه می توانم با استفاده از خط فرمان ، کاربر جدیدی را به عنوان sudoer اضافه کنم؟

چگونه می توان از یک ترمینال خاموش یا راه اندازی مجدد کرد؟

چگونه می توان اندازه کل یک فهرست (پوشه) را از خط فرمان تعیین کرد؟