forked from
lass.pds.lassul.us/superconfig
This repository has no description
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"