adamsgaard.dk

my academic webpage
git clone git://src.adamsgaard.dk/adamsgaard.dk
Log | Files | Refs | README | LICENSE Back to index

commit d37bc1b2ef006b946ae2337b44f5c18a4c9954f8
parent dd1fafe054a5b921d85668cb7a09a05eafe4bbe3
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Mon, 23 Mar 2020 07:50:39 +0100

Indent code with spaces

Diffstat:
Mpages/004-screencasts.txt | 130++++++++++++++++++++++++++++++++++++++++----------------------------------------
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.