Мозаїка FFMPEG заїкається


0

РЕДАКЦІЯ: Раптово, з тими ж скриптами на одному апаратному забезпеченні, проблема зникла. Я все ще цікавлюся причиною, але поки я не зможу повторно відтворити його, є кілька варіантів діагностики. Мої вибачення.

Я використовую 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 -

(Зараз я використовую лише три відео, оскільки у мене є чотири ядра процесора.)


Що говорять статистичні дані вашого процесора?
Eugen Rieck

Яку команду ви використовуєте?
Gyan

... і отриманий результат консолі.
llogan

@Mulvya Розміщені скрипти. Вихідні дані консолі та статистика процесора.
Draconis

У команді mosaic використовуйте фільтри FIFO після setpts. Це не той фільтр, який буде працювати повільно.
Gyan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.