aboutsummaryrefslogtreecommitdiff
path: root/.local/share/bin/ccpreview
blob: a835ab4b8387e1acbf6bcabf4ad37e7690b01ea0 (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
49
50
51
52
53
54
55
56
#!/bin/sh

# capture card sysfs device path
SYSFS_PATH="/devices/pci0000:00/0000:00:14.0/usb1/1-12"

# script args
WIDTH="$1"
HEIGHT="$2"
FRAMERATE="$3"

# find audio device (pulseaudio)
PULSE_DEVICE="$(pactl -f json list sources | jq \
	--arg sysfs_path "$SYSFS_PATH" --raw-output \
	'.[] | select(.properties["sysfs.path"] | . != null and startswith($sysfs_path)) | .name')"
AUDIO_URL="av://pulse:$PULSE_DEVICE"

# find video device (video4linux)
V4L_PATH="$(find "/sys$SYSFS_PATH" -name 'video4linux' | head -n1)"
V4L_PATH="$(find "$V4L_PATH" -name 'index' | xargs grep -l '^0$')"
V4L_PATH="$(echo "$V4L_PATH" | sed 's#/index$#/uevent#')"
VIDEO_DEVICE="$(. "$V4L_PATH" ; echo "/dev/$DEVNAME")"
VIDEO_DEVICE="$(readlink -f "$VIDEO_DEVICE")"
VIDEO_URL="av://v4l2:$VIDEO_DEVICE"

RESOLUTION="${WIDTH}x${HEIGHT}"

# set capture card v4l parameters
v4l2-ctl --silent --device "$VIDEO_DEVICE" \
	--set-parm "$FRAMERATE" \
	--set-fmt-video "width=$WIDTH,height=$HEIGHT,pixelformat=MJPG" \
	--set-ctrl "brightness=0,contrast=128,saturation=128,hue=0"

# preview window
mpv \
 	--msg-level=input=no --no-config --input-conf=/dev/null \
	--no-osc --no-input-default-bindings --pause=no --force-seekable=no \
	\
 	--no-cache --untimed --no-correct-pts \
	--no-demuxer-thread \
	--video-sync=audio \
	--audio-buffer=0 \
	--vd-lavc-threads=1 \
	--cache-pause=no \
	--interpolation=no \
	--video-latency-hacks=yes \
	--stream-buffer-size=4k \
	\
	--demuxer-lavf-o-add=fflags=+nobuffer \
	--demuxer-lavf-analyzeduration=0 \
	--demuxer-lavf-o-add=input_format=mjpeg \
	--demuxer-lavf-o-add=framerate="$FRAMERATE" \
	--demuxer-lavf-o-add=resolution="$RESOLUTION" \
	--demuxer-lavf-o-add=rw_timeout=30000000 \
	\
	"$VIDEO_URL" --audio-file="$AUDIO_URL"