Скриншот и захват видеокамеры и показ обоих на экране с помощью ffmpeg

Я использую следующую команду для одновременного захвата экрана и видеокамеры ноутбука. Видео с камеры появляется в маленьком окошке в правом нижнем углу экрана. Это работает, однако есть загвоздка; Я не вижу свое видео на экране во время записи, и я хочу иметь возможность видеть себя в нижнем правом окне, чтобы быть уверенным, что я выровнен с камерой. Как я могу это сделать?

ffmpeg -f alsa -i default \
-f x11grab -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -r 25 \
-i :0.0 -f video4linux2 \
-i /dev/video0 -filter_complex '[2:v]scale=380:-1[cam];[1:v][cam]overlay=W-w-8:H-h-8' \
-c:a flac \
-qscale 0 screen_and_video_grab.mkv
Откройте поток с веб-камеры с помощью проигрывателя, например ffplay -noborder /dev/video0, , затем запишите рабочий стол.
@LordNeckbeard Спасибо. Это помогло мне найти решение, которое я опубликовал.

Ответы (1)

Это решение работает в Linux. Чтобы скринкаст со вставленным видео себя на экране, где у вас есть видеокамера, расположенная в /dev/video0, вставьте следующее в текстовый файл и назовите его start_recording.shили что-то подобное и сделайте его исполняемым

#!/bin/bash




#####  set variables below ####

location_dir=$HOME/Desktop

T="$(date +%d-%m-%Y-%H-%M-%S)".mkv

#echo $T

video_window_title="$T"

#echo $video_window_title




####  Place video camera on own screen & detach the process  ####
ffplay -window_title "$video_window_title" /dev/video0 &




####  Record everything on the screen  ####
ffmpeg -y -f x11grab -s \
`xdpyinfo | grep 'dimensions:'|awk '{print $2}'` \
-i :0.0 -f alsa \
-i default $HOME/$T

Чтобы остановить запись, вставьте следующее в текстовый файл, назовите его stop_recording.shили что-то подобное и сделайте его исполняемым.

#!/bin/bash

# kills the ffmpeg and ffplay processes     
pkill ffmpeg && pkill ffplay

Приведенный ниже двухстрочный скрипт сделает ваше встроенное видео всегда в верхнем окне или нет. Просто поместите приведенные ниже две строки в текстовый файл, назовите его как-то так toggle_video_inset_to_always_above_layer_or_normal_layer.shили как-то так, как вы можете запомнить, и сделайте его исполняемым.

#!/bin/bash

wmctrl -r $(wmctrl -lx | grep ffplay | grep -oE "[0-9a-z\._-]{20,25}$") -b toggle,above