summaryrefslogtreecommitdiff
path: root/dot/local/bin/webbie
diff options
context:
space:
mode:
Diffstat (limited to 'dot/local/bin/webbie')
-rwxr-xr-xdot/local/bin/webbie47
1 files changed, 47 insertions, 0 deletions
diff --git a/dot/local/bin/webbie b/dot/local/bin/webbie
new file mode 100755
index 0000000..02fa3dd
--- /dev/null
+++ b/dot/local/bin/webbie
@@ -0,0 +1,47 @@
1#!/bin/bash
2
3AUDIO_DEVICE=pulse
4VIDEO_DEVICE=/dev/video0
5
6# Why does OUTPUT_CODECS have to specify -pix_fmt ? Answered:
7# https://stackoverflow.com/questions/37967120/ffmpeg-convert-from-h-264-high-444-profile-to-h-264-main-profile
8
9# Why aac and libx264? Browser support:
10# https://gist.github.com/Vestride/278e13915894821e1d6f
11
12# Explanation of -profile and -level:
13# https://trac.ffmpeg.org/wiki/Encode/H.264
14
15OUTPUT_CODECS='-c:a aac -c:v libx264 -pix_fmt yuv420p -profile:v high -level 4.1 -movflags +faststart'
16# OUTPUT_CODECS='-c:a aac -c:v libx264'
17OUTPUT_EXTENSION=mp4
18
19MAX_RECORDING_TIME=00:05:00
20
21NOW=$(date -Iseconds)
22
23OUTPUT=recording.${NOW//[:T]/.}.${OUTPUT_EXTENSION}
24OUTPUT_LINK=recording.latest.${OUTPUT_EXTENSION}
25
26VIDEO_OPTS='-framerate 30 -video_size 640x480'
27VIDEO_OPTS='-input_format mjpeg -framerate 30 -video_size 800x600'
28# VIDEO_OPTS='-input_format mjpeg -framerate 15 -video_size 1600x1200'
29
30record()
31{
32 local timeout="${MAX_RECORDING_TIME+-t $MAX_RECORDING_TIME}"
33 ffmpeg -hide_banner -loglevel error -stats \
34 $timeout -f video4linux2 ${VIDEO_OPTS} -i "$VIDEO_DEVICE" \
35 $timeout -f "$AUDIO_DEVICE" -i default \
36 -c:v rawvideo -pix_fmt yuv420p -f xv win \
37 ${OUTPUT_CODECS} \
38 "$1"
39}
40
41silently() { "$@" >/dev/null 2>&1; }
42
43silently amixer-enable-mic
44banish
45record "$OUTPUT"
46
47[ -h "$OUTPUT_LINK" -o ! -e "$OUTPUT_LINK" ] && ln -sf "$OUTPUT" "$OUTPUT_LINK"