Я внезапно открыл для себя утилиту slop
, очень удобная и полезная в домашних делах. Ага я слоупок.
Надо было записать кусочек экрана несколько раз и удобно выделять мышкой область на экране для записи видео.
Наваял вот, может кому пригодится.
- Переменная
use_recorder
задаёт то чем вы ходите записыватьffmpeg
recordmydesktop
- Если передать скрипту аргументы то они прокинутся к утилите записи
- например
record --no-sound
если используетсяrecordmydesktop
- но прокидывайе аргументы с умом рм рф и прочую копипасту туда писать не надо.
- например
Ключи под себя
ffmpeg
быстро пишет и сразу кодирует без звука.recordmydesktop
со звуком и отложенным долгим кодированием
Сам использую нубский recordmydesktop
так как вокруг него не надо с бубном бегать по поводу звука (он меня сломан на ПК и чисто программный идёт по сети)
touch $HOME/.local/bin/record
#copy-paste code
chmod +x $HOME/.local/bin/record
- Прерывать запись через
ctrl+C
- Зависимости в теле написаны какие надо.
Если кажется многословным перепишете на bash, всё можно переписать на bash :)
#!/usr/bin/env lua
-----------------------------------------
-- Depends for recordmydesktop: ogv out
-- apt install lua slop recordmydesktop
-----------------------------------------
-- Depends for ffmpeg: mp4 out
-- apt install lua slop ffmpeg
-----------------------------------------
-- Use ffmpeg or recordmydesktop recorder
--local use_recorder = 'ffmpeg'
local use_recorder = 'recordmydesktop'
-------------------------------------------------------------------------------
local separator = ' '
local arguments = table.concat({...},separator)
local visualfmt = '-b 5 -c 0.5,1.0,0.5,0.8 -o'
local slop_pipe = io.popen('slop -f "%x %y %w %h" '..visualfmt)
local x,y , w,h = slop_pipe:read('*l'):match('(%d+) (%d+) (%d+) (%d+)')
-------------------------------------------------------------------------------
local out_filename = os.date('%Y-%m-%H-%M-%S');
-------------------------------------------------------------------------------
local command = {};
-------------------------------------------------------------------------------
if use_recorder == 'ffmpeg' then
command = table.concat(
{
'ffmpeg ','-f x11grab';
'-video_size',w..'x'..h;
'-grab_x',x;
'-grab_y',y;
'-i :0.0';
'-framerate 60';
'-vcodec libx264';
arguments;
out_filename..'.mp4';
},separator)
print('Run command:\n'..command)
os.execute(command)
return 0
end
-------------------------------------------------------------------------------
if use_recorder == 'recordmydesktop' then
command = table.concat(
{
'recordmydesktop','-x='..x;
'-y='..y;
'--width='..w;
'--height='..h;
'--fps=60';
arguments;
'-o',out_filename..'.ogv';
},separator)
print('Run command:\n'..command)
os.execute(command)
return 0
end
-------------------------------------------------------------------------------
print("[ERROR]: Bad 'use_recorder' value.")
return 1
Вроде мелочёвка, а очень и очень удобно.
Всё. Досвиданья.