Fix bug
[einar-bin] / ffmpeg-grab-window-with-sound.bash
index 37fee2f210ba807604e47eba443954f7f0bef472..2dfa61dcd1becc76cd53bca7761c150af86202b1 100755 (executable)
@@ -1,11 +1,29 @@
 #!/bin/bash
-# Fugly script to use ffmpeg to capture a given window
+# A simple script to grab a screencast of a window using ffmpeg
+# Once started, select the window you want to record, and start 
+# talking/using the indicated program
 
+# Select window to grab info from
 INFO=$(xwininfo -frame)
 
-WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
+# Get the window size
+WIN_SIZE=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
+# Get the window position
 WIN_XY=$(echo $INFO | grep -oEe 'Corners: \+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/')
-WIN_X=$(echo $WIN_GEO | cut -d "x" -f 1 | awk '{print $1+$1%2}')
-WIN_Y=$(echo $WIN_GEO | cut -d "x" -f 2 | awk '{print $1+$1%2}')
+# Determine window width and window height, and adjust to be divisible by two
+WIN_WIDTH=$(echo $WIN_SIZE | cut -d "x" -f 1 | awk '{print $1+$1%2}')
+WIN_HEIGHT=$(echo $WIN_SIZE | cut -d "x" -f 2 | awk '{print $1+$1%2}')
 
-ffmpeg -f alsa -ac 1 -i pulse -f x11grab -r 30 -s ${WIN_X}x${WIN_Y} -i :0.0+${WIN_XY} -vcodec libx264 -vpre lossless_ultrafast -acodec libmp3lame ${HOME}/screencast-$(date +%F-%H-%M-%S).mkv
+# Run ffmpeg
+# Audio from alsa, using one channel, using the default pulse input device
+# Video from X11, framerate 30
+# Use the libx264 video encoder with the lossless_ultrafast preset
+# Use the libmp3lame audio encoder
+# Output to a file in the user's homedir, using current date and time
+
+ffmpeg \
+-f alsa -ac 1 -i pulse \
+-f x11grab -r 30 -s ${WIN_WIDTH}x${WIN_HEIGHT} -i :0.0+${WIN_XY} \
+-vcodec libx264 -vpre lossless_ultrafast \
+-acodec libmp3lame \
+${HOME}/screencast-$(date +%F-%H-%M-%S).mkv