- Фото
- Видео
- Стрим рабочего стола, как отдельного устройства
- Испльзование конфига
bash -c "$(wget -qO- https://raw.githubusercontent.com/spl3g/webcop/master/install.sh)"
- ffmpeg
- v4l-utils
Если хотите использовать режим стрима:
- v4l2loopback-dkms
- linux-headers
Опциональные для wayland:
- wf-recorder
sudo apt-get install ffmpeg v4l-utils v4l2loopback-dkms
sudo pacman -Sy ffmpeg v4l-utils v4l2loopback-dkms
git clone https://github.com/spl3g/webcop.git cd webcop chmod +x webcop # Profit ;)
Если вы хотите использовать возможности стриминга экрана, то после каждой перезагрузки нужно выполнять
sudo modprobe v4l2loopback
Ключи | Опции конфига | Значение |
---|---|---|
-h | вывод помощи по ключам | |
-c | принять на вход конфиг | |
-d | device=<путь до устройства> | устройство ввода |
-p | photo=<true/false> | режим фотографирования |
-s | stream=<true/false> | режим стрима |
-v | video=<true/false> | режим видеосъемки |
-o | output=<имя файла> | файл |
./webcop <ключи>
#!/bin/bash
source config.shlib
helptxt() {
echo -e ' -h | вывод помощи по ключам \n -c | принять на вход конфиг \n -p | режим фотографирования \n -v | режим видеосъемки \n -s | режим стрима \n -o | файл \n'
echo 'Возможные устройства:'
v4l2-ctl --list-devices
}
getsdevice() {
sdevice=$(v4l2-ctl --list-devices 2> /dev/null | awk '/v4l2/ { getline; print $1}')
if [[ -z $sdevice ]]; then
echo "У вас не включен v4l2loopback:"
echo -e "\t sudo modprobe v4l2loopback"
exit 1
fi
}
for i in $(seq 1 9); do
if [[ "${!i}" = "-c" ]]; then
i=$(( i + 1 ))
photo="$(config_get ${!i} photo)"
video="$(config_get ${!i} video)"
stream="$(config_get ${!i} stream)"
device="$(config_get ${!i} device)"
output="$(config_get ${!i} output)"
fi
done
if [[ -z $1 ]]; then
helptxt
exit 1
fi
while [[ -n "$1" ]]; do
case "$1" in
-p) photo=true ;;
-v) video=true ;;
-o) output=$2
shift ;;
-d) device=$2
shift ;;
-c) config=$2
shift ;;
-s) stream=true ;;
--) shift
break ;;
*) helptxt ;;
esac
shift
done
if [[ -z "${device}" ]] && [[ -z "${stream}" ]]; then
device=$(v4l2-ctl --list-devices | awk '/usb/ { getline; print $1}')
echo "Используется устройство по умолчанию - $device"
echo "Другие варианты:"
v4l2-ctl --list-devices
fi
if [[ $photo ]] && [[ $output ]]; then
ffmpeg -hide_banner -loglevel error -f v4l2 \
-i $device -vframes 1 $output
echo "Фото снято"
elif [[ $photo ]]; then
ffmpeg -hide_banner -loglevel error -f v4l2 \
-i $device -vframes 1 photo.png
echo "Фото снято"
elif [[ $video ]] && [[ $output ]]; then
echo 'Нажмите q, чтобы завершить'
ffmpeg -hide_banner -loglevel error \
-f v4l2 -r 30 -s 1920x1080 \
-i $device $output
echo "Видео снято"
elif [[ $video ]]; then
echo 'Нажмите q, чтобы завершить'
ffmpeg -hide_banner -loglevel error \
-f v4l2 -framerate 30 -video_size 1920x1080 \
-i $device video.mp4
echo "Видео снято"
elif [[ $stream ]]; then
getsdevice
if [[ $XDG_BACKEND = "wayland" ]]; then
echo "Нажмите Ctrl+C, чтобы завершить"
wf-recorder --muxer=v4l2 --codec=rawvideo \
-t --file=$sdevice yuv420pq
else
echo "Нажмите q, чтобы завершить"
ffmpeg -hide_banner -loglevel error \
-f x11grab -show_region 1 -framerate 25 \
-i $DISPLAY -vf format=yuv420p -f v4l2 $sdevice
fi
fi