#ffmpeg #video-processing
#ffmpeg #обработка видео
Вопрос:
Есть ли какой-нибудь способ, которым я мог бы взять, скажем, 4 видеопотока в реальном времени и заставить их циклически вращаться на экране? Я хочу взять видеопоток и воспроизвести, подождать 5 секунд, перейти к следующему видеопотоку, подождать 5 секунд и т.д…Ниже приведена фактическая ffmpeg
команда, которую я хочу использовать, и единственная идея, которая у меня пока есть:
for rotation in $source4 $source5 $source6 $source7; do
ffmpeg -rtsp_transport tcp -stimeout 100 -i $source1
-rtsp_transport tcp -stimeout 100 -i $source2
-rtsp_transport tcp -stimeout 100 -i $source3
-rtsp_transport tcp -stimeout 100 -i $rotation
-filter_complex "nullsrc=size=3840x2160 [base];
[0:v] setpts=PTS-STARTPTS [upperleft];
[1:v] setpts=PTS-STARTPTS [upperright];
[2:v] setpts=PTS-STARTPTS [lowerleft];
[3:v] setpts=PTS-STARTPTS [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=1920 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=1080 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=1920:y=1080"
-c:v h264_nvenc -preset llhq -f matroska - | ffplay -
sleep 5
done
Как вы можете видеть, это было бы не очень эффективно или даже полезно, учитывая, сколько времени требуется, чтобы все заработало. Если у кого-нибудь есть какие-либо идеи, я был бы признателен. Я свободно владею только сценариями оболочки Linux (Bash), поэтому в настоящее время любой другой язык будет вне моей досягаемости. Я демонстративно открыт для предложений попробовать другие инструменты или фреймворки. Основная цель — создать сценарий для группы камер безопасности с одной в мозаике, которая вращается по всем дополнительным каналам с камер, которые не включают 3 уже на экране. Он должен быть как можно более простым в обслуживании, т.Е. При сбое сетевого соединения он должен автоматически продолжать проверять наличие подключения и перезапускаться при установлении. Я могу сделать это в скрипте Bash очень легко, но вывести все видео на экран было непросто. Я рассматривал возможность создания полностью отдельных вызовов ffplay
для каждого канала, а затем использования wmctrl
или аналогичного для их размещения на экране, но у меня все еще остается проблема постоянного перезапуска вращающегося канала.
Ответ №1:
Бесконечный цикл:
#!/bin/bash
INP=("input 1.mp4" test01.mkv test02.mkv test03.mkv)
while true; do
for i in "${INP[@]}"; do
ffmpeg -i "$i" -c:v h264_nvenc -t 5 -f matroska - | ffplay -autoexit -
done
done
Может быть, лучший способ — запускать каждый ввод отдельно и играть с wmctrl