====== Zenteknix Utilities ======
===== Desktop Recording =====
This is a pair of scripts, a ksh wrapper to launch an ffmpeg capture and a Tcl/Tk GUI for terminating the capture process.
==== deskvid ====
#!/bin/ksh
# Copyright (c) 1994-2016 Matt Samudio (Zenteknix) All Rights Reserved.
# Contact information for Zenteknix is available at http://www.zenteknix.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
VID="$HOME/video/desktop-$$.mkv"
#XDR="1920x1080" # "1920x1200", "800x600"
XDR="2560x1440" # "1920x1200", "800x600"
XDO="0,0" # XDO="734,51"
#APO="-f alsa -ac 2 -i hw:0,0" # "" (suppresses audio capture)
APO=""
ffmpeg ${APO} -f x11grab -s ${XDR} -r 24 -i :0.0+${XDO} -vcodec libx264 -preset ultrafast -threads 4 ${VID} 2>&1 > /dev/null &
dvidkill $! &
==== dvidkill ====
#!/usr/bin/wish
# Copyright (c) 1994-2016 Matt Samudio (Zenteknix) All Rights Reserved.
# Contact information for Zenteknix is available at http://www.zenteknix.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
package require Tk
proc calcMetersFromFeet {} {
if {[catch {
set ::meters [expr {round($::feet*0.3048*10000.0)/10000.0}]
}]!=0} {
set ::meters ""
}
}
proc layoutConversionGUI {} {
grid [ttk::frame .c -padding "3 3 12 12"] -column 0 -row 0 -sticky nwes
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1
grid [ttk::entry .c.feet -width 7 -textvariable feet] -column 2 -row 1 -sticky we
grid [ttk::label .c.meters -textvariable meters] -column 2 -row 2 -sticky we
grid [ttk::button .c.calc -text "Stop" -command killVidRecProc] -column 3 -row 3 -sticky w
grid [ttk::label .c.flbl -text "feet"] -column 3 -row 1 -sticky w
grid [ttk::label .c.islbl -text "is equivalent to"] -column 1 -row 2 -sticky e
grid [ttk::label .c.mlbl -text "meters"] -column 3 -row 2 -sticky w
foreach w [winfo children .c] {grid configure $w -padx 5 -pady 5}
}
proc layoutVideoGUI {} {
grid [ttk::frame .c -padding "3 3 12 12"] -column 0 -row 0 -sticky nwes
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0 -weight 1
grid [ttk::label .c.plbl -text "Video Recording PID:"] -column 1 -row 1 -sticky w
grid [ttk::label .c.procid -text "$::vpid"] -column 2 -row 1 -sticky we
grid [ttk::button .c.calc -text "Stop" -command killVidRecProc] -column 2 -row 3 -sticky w
foreach w [winfo children .c] {grid configure $w -padx 5 -pady 5}
}
proc killVidRecProc {} {
try {
exec kill $::vpid
set status 0
} trap CHILDSTATUS { results options } {
set status [lindex [dict get $options -errorcode] 2]
}
if { $status == 0 } {
exit 0
}
}
wm title . "Desktop Video Capture"
#layoutConversionGUI
#bind . {calculate}
#focus .c.feet
set vpid [lindex $argv 0]
puts $vpid
layoutVideoGUI
focus .c.procid
bind . {killVidRecProc}