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