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"
|