transferring several commands from private repo
This commit is contained in:
155
av/ffmpeg-screencapture
Executable file
155
av/ffmpeg-screencapture
Executable file
@@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
|
||||
_help() {
|
||||
echo 'Commands:
|
||||
-o [filename] -s [size] -p [pos] -r [framerate] -d [delay] -i
|
||||
default filename: '$filename'
|
||||
default size: '$size'
|
||||
default pos: '$pos'
|
||||
default framerate: '$framerate'
|
||||
default delay: '$delay'
|
||||
-i for interactive selection using "slop"
|
||||
--shell to record current terminal
|
||||
|
||||
Hit "q" when finished!
|
||||
'
|
||||
}
|
||||
_helpexit(){
|
||||
_help
|
||||
exit
|
||||
}
|
||||
function animate() {
|
||||
x0=$( tput cols )
|
||||
pre=$( qolop eval "_qPos save; _qPos abs 1 $x0; _qCol R;" )
|
||||
post=$( qolop eval "_qCol Z; _qPos restore;" )
|
||||
while true; do
|
||||
{
|
||||
printf "%s*%s" "$pre" "$post"
|
||||
sleep 1
|
||||
printf "%s %s" "$pre" "$post"
|
||||
sleep 1
|
||||
} >&2
|
||||
done
|
||||
}
|
||||
|
||||
printf -v filename "grab-%(%FT%H-%M)T.mp4"
|
||||
size=$( xdpyinfo | awk "/dimensions/{print \$2}" )
|
||||
pos="0,0"
|
||||
framerate=15
|
||||
delay=0
|
||||
interact=0
|
||||
new_shell=0
|
||||
for (( i=1; i<=$#; i++ )); do
|
||||
[[ ${!i} = "-h"* ]] && _helpexit
|
||||
[[ ${!i} = "--h"* ]] && _helpexit
|
||||
[[ ${!i} = "help" ]] && _helpexit
|
||||
done
|
||||
for (( i=1; i<=$#; i++ )); do
|
||||
j=$(( $i + 1 ))
|
||||
if [[ ${!i} = "-o" ]]; then
|
||||
filename="${!j}"
|
||||
shift
|
||||
fi
|
||||
if [[ ${!i} = "-s" ]]; then
|
||||
size="${!j}"
|
||||
shift
|
||||
fi
|
||||
if [[ ${!i} = "-p" ]]; then
|
||||
pos="${!j}"
|
||||
shift
|
||||
fi
|
||||
if [[ ${!i} = "-r" ]]; then
|
||||
framerate="${!j}"
|
||||
shift
|
||||
fi
|
||||
if [[ ${!i} = "-d" ]]; then
|
||||
delay="${!j}"
|
||||
shift
|
||||
fi
|
||||
if [[ ${!i} = "-i" ]]; then
|
||||
interact=1
|
||||
fi
|
||||
if [[ ${!i} = "--shell" ]]; then
|
||||
new_shell=1
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
if [[ $new_shell -eq 0 ]]; then
|
||||
|
||||
if [[ $interact -eq 1 ]]; then
|
||||
slop=$( slop -b 10 -c 1.0,0.8,0.1,0.8 )
|
||||
size=$( echo $slop | cut -d+ -f1 )
|
||||
pos=$( echo $slop | cut -d+ -f2-3 )
|
||||
pos=${pos/+/,}
|
||||
else
|
||||
convert -size 256x256 xc:red PNG8:- | timeout 5 feh --geometry $size+${pos//,/+} -
|
||||
fi
|
||||
else
|
||||
eval $(xwininfo -id $(xdotool getactivewindow) |
|
||||
sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
|
||||
-e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
|
||||
-e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
|
||||
-e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
|
||||
size="${w}x${h}"
|
||||
pos="${x},${y}"
|
||||
fi
|
||||
|
||||
|
||||
if [[ $delay -gt 0 ]]; then
|
||||
echo Waiting.. for $delay seconds
|
||||
sleep $delay
|
||||
fi
|
||||
|
||||
|
||||
echo Grabbing: $filename ${size}+$pos
|
||||
|
||||
rm -f "$filename"
|
||||
|
||||
if [[ $new_shell -eq 1 ]]; then
|
||||
|
||||
echo Starting to record in 5 seconds, or press enter
|
||||
read -t 5 foo || true
|
||||
x0=$( tput cols )
|
||||
pre=$( qolop eval "_qPos save; _qPos abs 1 $x0; _qCol R;" )
|
||||
post=$( qolop eval "_qCol Z; _qPos restore;" )
|
||||
animate &
|
||||
animpid=$!
|
||||
trap 'trap - SIGTERM && kill -- $animpid' EXIT SIGINT SIGTERM
|
||||
ffmpeg \
|
||||
-video_size $size \
|
||||
-framerate $framerate \
|
||||
-f x11grab \
|
||||
-i $DISPLAY+${pos} \
|
||||
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" \
|
||||
-c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
|
||||
-an \
|
||||
-movflags faststart \
|
||||
-loglevel panic \
|
||||
-hide_banner \
|
||||
"$filename" &
|
||||
ffpid=$!
|
||||
clear
|
||||
bash
|
||||
kill -INT $ffpid
|
||||
trap - EXIT SIGINT SIGTERM
|
||||
kill $animpid > /dev/null 2>&1
|
||||
#animate_clear
|
||||
printf "%s %s" "$pre" "$post" >&2
|
||||
|
||||
else
|
||||
ffmpeg \
|
||||
-video_size $size \
|
||||
-framerate $framerate \
|
||||
-f x11grab \
|
||||
-i $DISPLAY+${pos} \
|
||||
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" \
|
||||
-c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
|
||||
-an \
|
||||
-movflags faststart \
|
||||
-loglevel panic \
|
||||
-hide_banner \
|
||||
"$filename"
|
||||
fi
|
||||
|
||||
echo "Saved to: $filename"
|
||||
Reference in New Issue
Block a user