diff options
Diffstat (limited to 'home/dot_local/share/bin/executable_ccpreview')
| -rw-r--r-- | home/dot_local/share/bin/executable_ccpreview | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/home/dot_local/share/bin/executable_ccpreview b/home/dot_local/share/bin/executable_ccpreview new file mode 100644 index 0000000..9f13acc --- /dev/null +++ b/home/dot_local/share/bin/executable_ccpreview @@ -0,0 +1,74 @@ +#!/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}" + +fork() { + JOBS="$JOBS $( + "$@" > /dev/null 2> /dev/null & + echo $! + )" +} + +# 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" + +_mpv() { + fork mpv \ + --quiet --msg-level=input=no \ + --no-config --input-conf=/dev/null \ + --no-osc --no-border \ + --no-input-default-bindings --pause=no --force-seekable=no \ + --cache=no \ + "$@" +} + +# audio preview +_mpv \ + --no-demuxer-thread \ + --audio-buffer=0 \ + --cache-pause=no \ + --interpolation=no \ + --stream-buffer-size=4k \ + --profile=low-latency \ + --speed=1.001 \ + "$AUDIO_URL" + +# video preview +_mpv \ + --untimed --no-correct-pts --no-demuxer-thread \ + --profile=low-latency \ + --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 \ + --speed=1.05 \ + "$VIDEO_URL" + +sleep infinity +kill -9 -- $JOBS + |