commit d37bc1b2ef006b946ae2337b44f5c18a4c9954f8
parent dd1fafe054a5b921d85668cb7a09a05eafe4bbe3
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Mon, 23 Mar 2020 07:50:39 +0100
Indent code with spaces
Diffstat:
1 file changed, 65 insertions(+), 65 deletions(-)
diff --git a/pages/004-screencasts.txt b/pages/004-screencasts.txt
@@ -15,42 +15,42 @@ laptop audio. I want to keep the fan noise low during recording
by applying minimal compression and encoding. The following shell
script serves the purpose of starting and stopping recording:
-#!/bin/sh
-lockfile=/tmp/screenrecord.pid
-
-startrecording() {
- out="$HOME/screenrecord-$(date '+%Y-%m-%d_%H:%M:%S').mkv"
- ffmpeg -y \
- -f x11grab \
- -framerate 60 \
- -s "$(xdpyinfo | grep dimensions | awk '{print $2}')" \
- -i $DISPLAY \
- -f sndio -i default \
- -r 30 \
- -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
- "$out" >/dev/null 2>&1 &
- printf '%s' "$!" > "$lockfile"
-
- sleep 1
- if [ ! -f "$out" ]; then
- echo 'error: ffmpeg recording did not start' >&2
- notify-send -u CRITICAL "${0##*/}" 'ffmpeg recording did not start'
- rm -f "$lockfile"
- exit 1
- fi
-}
-
-stoprecording() {
- kill "$(cat "$lockfile")"
- rm -f "$lockfile"
- notify-send "${0##*/}" 'recording ended'
-}
-
-if [ -f "$lockfile" ]; then
- stoprecording
-else
- startrecording
-fi
+ #!/bin/sh
+ lockfile=/tmp/screenrecord.pid
+
+ startrecording() {
+ out="$HOME/screenrecord-$(date '+%Y-%m-%d_%H:%M:%S').mkv"
+ ffmpeg -y \
+ -f x11grab \
+ -framerate 60 \
+ -s "$(xdpyinfo | grep dimensions | awk '{print $2}')" \
+ -i $DISPLAY \
+ -f sndio -i default \
+ -r 30 \
+ -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
+ "$out" >/dev/null 2>&1 &
+ printf '%s' "$!" > "$lockfile"
+
+ sleep 1
+ if [ ! -f "$out" ]; then
+ echo 'error: ffmpeg recording did not start' >&2
+ notify-send -u CRITICAL "${0##*/}" 'ffmpeg recording did not start'
+ rm -f "$lockfile"
+ exit 1
+ fi
+ }
+
+ stoprecording() {
+ kill "$(cat "$lockfile")"
+ rm -f "$lockfile"
+ notify-send "${0##*/}" 'recording ended'
+ }
+
+ if [ -f "$lockfile" ]; then
+ stoprecording
+ else
+ startrecording
+ fi
On Linux systems, the sound driver sndio should be replaced by alsa
in the above ffmpeg(1) command. I have bound the above script to
@@ -60,13 +60,13 @@ in my X session.
On OpenBSD I can show the webcam video feed with the [2]video(1)
command. The following script toggles the video feed:
-#!/bin/sh
-# remember to `chown $USER /dev/video0`
-if pgrep video >/dev/null 2>&1; then
- pkill video
-else
- nohup video -s 320 >/dev/null 2>&1 &
-fi
+ #!/bin/sh
+ # remember to `chown $USER /dev/video0`
+ if pgrep video >/dev/null 2>&1; then
+ pkill video
+ else
+ nohup video -s 320 >/dev/null 2>&1 &
+ fi
On Linux, the command mpv /dev/video0 can take place of the video(1)
command above. I have the above script bound to the keybinding Alt+v
@@ -77,37 +77,37 @@ file to save bandwidth during upload. The following script encodes
all input files and reduces file size to roughly 15% without
concievable loss in quality:
-#!/bin/sh
+ #!/bin/sh
-encode() {
- ffmpeg -y -i "$1" \
- -c:v libx264 -threads 0 -preset faster -pix_fmt yuv420p \
- -c:a aac -crf 10 \
- "${1%.*}_out.mp4"
-}
+ encode() {
+ ffmpeg -y -i "$1" \
+ -c:v libx264 -threads 0 -preset faster -pix_fmt yuv420p \
+ -c:a aac -crf 10 \
+ "${1%.*}_out.mp4"
+ }
-for f in "$@"; do
- encode "$f"
-done
+ for f in "$@"; do
+ encode "$f"
+ done
If there is a delay between video and audio, this can also be
adjusted using ffmpeg(1). I correct for a 0.3 s delay that I
encounter when recording on my laptop:
-#!/bin/sh
+ #!/bin/sh
-synchronize() {
- ffmpeg -y -i "$1" \
- -itsoffset 0.300 \
- -i "$1" \
- -map 0:v -map 1:a \
- -c copy \
- "${1%.*}_out.${1##*.}"
-}
+ synchronize() {
+ ffmpeg -y -i "$1" \
+ -itsoffset 0.300 \
+ -i "$1" \
+ -map 0:v -map 1:a \
+ -c copy \
+ "${1%.*}_out.${1##*.}"
+ }
-for f in "$@"; do
- synchronize "$f"
-done
+ for f in "$@"; do
+ synchronize "$f"
+ done
[3]Example screen recording using ffmpeg(1) and video(1) with the
above scripts.