summaryrefslogtreecommitdiff
path: root/ar/.local/bin/webcam
blob: 0a4a297afec4db4a035cbe8004f30c4d174573f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/sh

case "$1" in
-h | h | hflip) flip="--vf=lavfi=hflip" ;;
-v | v | vflip) flip="--vf=lavfi=vflip" ;;
-hv | hv | hvflip) flip="--vf=lavfi=hflip,vflip" ;;
*) flip="" ;;
esac

# Extract full camera names and their first /dev/video* device
cameras=$(
  v4l2-ctl --list-devices | awk '
  BEGIN { RS=""; FS="\n" }
  {
    name = $1;
    sub(/ \(.*$/, "", name);
    gsub(/^[ \t]+|[ \t]+$/, "", name);
    for (i=2; i<=NF; i++) {
      if ($i ~ /\/dev\/video/) {
        gsub(/^[ \t]+/, "", $i);
        print name "|" $i;
        break;
      }
    }
  }'
)

# Extract only camera names for dmenu
names=$(echo "$cameras" | cut -d '|' -f1)

# Select camera with dmenu
choice=$(echo "$names" | dmenu -i -p 'Choose a camera:')

# Find corresponding /dev/video* device
camera=$(echo "$cameras" | awk -F '|' -v sel="$choice" '$1 == sel {print $2}')

# If no selection, exit
[ -z "$camera" ] && exit 1

mpv --untimed \
  --no-cache \
  --no-osc \
  --no-input-default-bindings \
  --profile=low-latency \
  --input-conf=/dev/null \
  --title=webcam \
  --x11-name=webcam \
  $flip "$camera"