This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

superconfig / tools / video-webcam / video-webcam.sh
1.6 kB 82 lines
1#!/usr/bin/env bash 2DEVICE="/dev/video0" 3LOOP=true 4 5usage() { 6 echo "Usage: video-webcam [OPTIONS] <video-file>" 7 echo "" 8 echo "Stream a video file to a virtual webcam device." 9 echo "" 10 echo "Options:" 11 echo " -d, --device DEVICE v4l2 device to use (default: /dev/video0)" 12 echo " --no-loop Don't loop the video" 13 echo " -h, --help Show this help" 14 echo "" 15 echo "Examples:" 16 echo " video-webcam funny.gif" 17 echo " video-webcam -d /dev/video1 background.mp4" 18 echo " video-webcam --no-loop intro.webm" 19} 20 21while [[ $# -gt 0 ]]; do 22 case $1 in 23 -d|--device) 24 DEVICE="$2" 25 shift 2 26 ;; 27 --no-loop) 28 LOOP=false 29 shift 30 ;; 31 -h|--help) 32 usage 33 exit 0 34 ;; 35 -*) 36 echo "Unknown option: $1" >&2 37 usage >&2 38 exit 1 39 ;; 40 *) 41 VIDEO_FILE="$1" 42 shift 43 ;; 44 esac 45done 46 47if [[ -z "${VIDEO_FILE:-}" ]]; then 48 echo "Error: No video file specified" >&2 49 usage >&2 50 exit 1 51fi 52 53if [[ ! -f "$VIDEO_FILE" ]]; then 54 echo "Error: File not found: $VIDEO_FILE" >&2 55 exit 1 56fi 57 58if [[ ! -e "$DEVICE" ]]; then 59 echo "Error: Device $DEVICE does not exist" >&2 60 echo "Make sure v4l2loopback kernel module is loaded" >&2 61 exit 1 62fi 63 64echo "Streaming '$VIDEO_FILE' to $DEVICE" 65if $LOOP; then 66 echo "Looping enabled (Ctrl+C to stop)" 67fi 68echo "" 69 70LOOP_ARG="" 71if $LOOP; then 72 LOOP_ARG="-stream_loop -1" 73fi 74 75# shellcheck disable=SC2086 76exec ffmpeg \ 77 $LOOP_ARG \ 78 -re \ 79 -i "$VIDEO_FILE" \ 80 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,format=yuv420p" \ 81 -f v4l2 \ 82 "$DEVICE"