jorgemfm
6/8/2013 - 11:21 PM

script to record a screen window with avconv or ffmpeg

script to record a screen window with avconv or ffmpeg

#!/bin/sh
#
#script to record a screen window with avconv or ffmpeg. 
#uses xwininfo to get info about the window to record
#based on https://gist.github.com/anonymous/3927068 (http://www.youtube.com/watch?v=_XDa1ahl7fw)

INFO=$(xwininfo -frame)

WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' |\
    grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' |\
    grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/+/,/' )


#checks if width and height are odd numbers and adds +1 if true
#because libx264 complaints if width/height are not divisible by 2

WIDTH=`echo $WIN_GEO| cut -d'x' -f 1`
HEIGHT=`echo $WIN_GEO| cut -d'x' -f 2`

REM=$(( $HEIGHT % 2 ))
if [ $REM -ne 0 ]
then
  HEIGHT=$(( HEIGHT + 1 ))
fi


REM=$(( $WIDTH % 2 ))
if [ $REM -ne 0 ]
then
  WIDTH=$(( WIDTH + 1 ))
fi

WIN_GEO="${WIDTH}x${HEIGHT}"

avconv -f x11grab -y -r 30 -s $WIN_GEO -i :0.0+$WIN_XY -vcodec libx264 $1.avi

#original command
#ffmpeg -f x11grab -y -r 15 -s $WIN_GEO -i :0.0+$WIN_XY -vcodec ffv1 -sameq -f alsa -ac 2 -i pulse -acodec ac3 -threads 2 $1.avi