Тут была тема - "Кто использует gtk-recordMyDesktop ?"
Предлагаю альтернативный вариант создания скринкастов:
screen-cast.sh
#!/bin/bash
# .Color messages
black='\E[30;40m\033[1m'
red='\E[31;40m\033[1m'
green='\E[32;40m\033[1m'
yellow='\E[33;40m\033[1m'
blue='\E[34;40m\033[1m'
magenta='\E[35;40m\033[1m'
cyan='\E[36;40m\033[1m'
white='\E[37;40m\033[1m'
cecho () # Color-echo.
# $1 = message
# $2 = color
{
local default_msg=""
message=${1:-$default_msg} # default message
color=${2:-$yellow} # default color.
echo -e "$color" "$message" "\033[0m"
tput sgr0 # Восстановление первоначальных настроек терминала.
return
}
#-----------------------------------------------------------------------------------------------------
# If you are capturing audio using ffmpeg – often the “ALSA buffer xrun”.
# After this desync audio and video.
# To avoid this, you need to capture sound with sox, and video using ffmpeg. Then perform merge files.
#-----------------------------------------------------------------------------------------------------
# USEcodec = mpeg4 xvid ffv1 mkv mov
USEcodec=$1
baseName=$2
screenIN=$3
screenOUT=$4
# Audio - oss , alsa
Audio="alsa"
# ADevice - pulse , default , hw:0 , hw:0.0 (for Alsa)
# ADevice - /dev/dsp (for OSS)
ADevice="default"
# Tests if the base name was specified. If not, take default value
if [ "$baseName" = "" ]; then
baseName="screencast"
fi
# Tests if the screenIN and screenOUT was specified. If not, take default value
if [ "$screenIN" = "" ]; then
screenIN="1024x768"
screenOUT="1024x768"
else
if [ "$screenOUT" = "" ]; then
screenOUT="$screenIN"
fi
fi
# Tests if the codec was specified. If not, echo message and stop
if [ "$USEcodec" = "mkv" ]; then
Setting="libx264 -vpre lossless_ultrafast -g 150 -threads 0"
ext=".mkv"
else
if [ "$USEcodec" = "mov" ]; then
Setting="qtrle -g 150"
ext=".mov"
else
if [ "$USEcodec" = "mpeg4" ]; then
Setting="mpeg4 -b 4000k -g 150"
ext=".avi"
else
if [ "$USEcodec" = "xvid" ]; then
Setting="mpeg4 -vtag xvid -b 4000k -g 150"
ext=".avi"
else
if [ "$USEcodec" = "ffv1" ]; then
Setting="ffv1 -b 4000k -g 150 -sameq"
ext=".avi"
else
cecho ""
cecho "========================================================="
cecho " Usage:"
cecho " sh scc.sh codec [FileName] [screenIN] [screenOUT]"
cecho " codec = ffv1,mpeg4,mkv,mov,xvid"
cecho "========================================================="
cecho " Example: sh scc.sh mpeg4"
cecho " Example: sh scc.sh ffv1 namescreencast"
cecho " Example: sh scc.sh xvid namescreencast 1024x768"
cecho " Example: sh scc.sh mov namescreencast 1024x768 1440x1080"
cecho "========================================================="
exit
fi
fi
fi
fi
fi
rm "$baseName-nosound$ext" &>/dev/null
rm "$baseName-final$ext" &>/dev/null
rm "$baseName.wav" &>/dev/null
rm "$baseName.mp4" &>/dev/null
cecho ""
cecho ""
cecho "**************************************"
cecho "* Using Enter to finish recording *"
cecho "* *"
cecho "* Using Enter to finish recording *"
cecho "* *"
cecho "* Using Enter to finish recording. *"
cecho "* *"
cecho "**************************************"
# Waits for the user to press Enter.
cecho ""
cecho ".....Press ENTER to start recording." $green
read nothing
sox --ignore-length --buffer 1024000 -t $Audio $ADevice -t wav "$baseName.wav" | ffmpeg -isync -f x11grab -s "$screenIN" -r 25 -i :0.0 -vcodec $Setting "$baseName-nosound$ext" &
pidV=$(ps -ef | grep "[f]fmpeg" | awk '{print $2}') pidA=$(ps -ef | grep "[s]ox" | awk '{print $2}')
cecho ""
cecho "Audio recording started with process ID $pidA" $cyan
cecho "Video recording started with process ID $pidV" $cyan
read nothing
# Waits for the user to press Enter.
kill -15 $pidA $pidV
cecho ""
cecho "Kill Audio process with ID $pidA" $blue
cecho "Kill Video process with ID $pidV" $blue
cecho ""
ffmpeg -isync -i "$baseName.wav" -i "$baseName-nosound$ext" -acodec copy -vcodec copy "$baseName-final$ext"
rm "$baseName.wav" &>/dev/null
rm "$baseName-nosound$ext" &>/dev/null
cecho ""
cecho "====================================================================="
cecho ""
cecho ".....Press ENTER to start encoding, or <CTRL-C> - to encoding manualy"
cecho "====================================================================="
read nothing
cecho "**********************************" $cyan
cecho "* *" $cyan
cecho "* Wait - encoding output file *" $cyan
cecho "* *" $cyan
cecho "* Wait - encoding output file *" $cyan
cecho "* *" $cyan
cecho "* Wait - encoding output file. *" $cyan
cecho "* *" $cyan
cecho "**********************************" $cyan
ffmpeg -i "$baseName-final$ext" -acodec libfaac -ab 192k -ac 2 -vcodec libx264 -s "$screenOUT" -vpre slow -crf 20 -threads 0 $baseName.mp4
rm "$baseName-final$ext" &>/dev/null
cecho ""
cecho "====================================================================="
cecho ".....DONE! video file $baseName.mp4 were written to the folder....."
cecho "====================================================================="
# end
В отличие от gtk-recordMyDesktop, ffmpeg и sox - гораздо меньше нагружают систему
при записи скринкастов. А также появляется возможность использования различных кодеков,
и запись в HD формате, который позволяет сохранить качество - при выкладывании ролика на youtube.
При запуске скрипта без параметров - выдаётся пример использования (параметров)
Конец записи осуществляется нажатием клавиши <ENTER>
ffmpeg - захватывает видео
sox - захватывает
Потом происходит совмещение записанных файлов