РЕДАКТИРОВАТЬ: Внезапно, с теми же сценариями на том же оборудовании, проблема исчезла. Мне по-прежнему любопытно узнать причину, но пока я не смогу воспроизвести ее снова, есть несколько вариантов диагностики. Мои извенения.

Я использую FFMPEG, чтобы получать прямые трансляции с нескольких веб-камер. Когда каналы независимы (иными словами, каждый вход v4l2 проходит через свой собственный конвейер внутри filter_complex к своему собственному выходу xv ), все работает очень хорошо: есть примерно полсекундная задержка, с которой я могу жить, и все видео работает гладко.

Я бы предпочел объединить эти видео в мозаику, как для просмотра в прямом эфире, так и для копии, которую он сохраняет на диск. Но когда я пытаюсь это сделать, либо с серией overlay s, либо с помощью hstack+vstack , видео начинает заикаться: один канал будет работать ровно в течение нескольких секунд, в то время как другие останутся неподвижными, а другой - в течение нескольких секунд, пока первый зависает и так далее. Видео все еще идет в квази-реальном времени, поэтому оно не страшно в целях безопасности, но очень затрудняет отслеживание движения.

Что я могу сделать, чтобы это исправить или хотя бы уменьшить заикание? Я был бы в порядке с более низкой частотой кадров, если она была последовательной.

Скрипт, который работает:

ffmpeg \
    -f lavfi -thread_queue_size 1024 -i color=s=${size}:c=000000 \
    -f v4l2 -thread_queue_size 1024 -video_size $size -i $video_ne \
    -f v4l2 -thread_queue_size 1024 -video_size $size -i $video_sw \
    -f v4l2 -thread_queue_size 1024 -video_size $size -i $video_se \
    -f alsa -thread_queue_size 1024 -i $audio1 \
    -f alsa -thread_queue_size 1024 -i $audio2 \
    -filter_complex "
        [0:v] fifo, setpts=PTS-STARTPTS [v0];
        [1:v] fifo, setpts=PTS-STARTPTS [v1];
        [2:v] fifo, setpts=PTS-STARTPTS [v2];
        [3:v] fifo, setpts=PTS-STARTPTS [v3]" \
    -map "[v0]" -f xv - \
    -map "[v1]" -f xv - \
    -map "[v2]" -f xv - \
    -map "[v3]" -f xv - 

Скрипт, который не:

ffmpeg \
    -f lavfi -thread_queue_size 1024 -i color=s=${size}:c=000000 \
    -f v4l2 -thread_queue_size 1024 -video_size $size -i $video_ne \
    -f v4l2 -thread_queue_size 1024 -video_size $size -i $video_sw \
    -f v4l2 -thread_queue_size 1024 -video_size $size -i $video_se \
    -f alsa -thread_queue_size 1024 -i $audio1 \
    -f alsa -thread_queue_size 1024 -i $audio2 \
    -filter_complex "
        [0:v] fifo, setpts=PTS-STARTPTS [v0];
        [1:v] fifo, setpts=PTS-STARTPTS [v1];
        [2:v] fifo, setpts=PTS-STARTPTS [v2];
        [3:v] fifo, setpts=PTS-STARTPTS [v3];

        [v0][v1] hstack [tmp1];
        [v2][v3] hstack [tmp2];
        [tmp1][tmp2] vstack [vout]"
    -map "[vout]" -f sdl2 -

(Я сейчас использую только три видео, так как у меня четыре ядра процессора.)

0