FFMPEG мозаичные заикания

434
Draconis

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

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

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

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

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

ffmpeg \ -f lavfi -thread_queue_size 1024 -i color=s=$: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=$: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
Что говорит ваша статистика процессора? Eugen Rieck 7 лет назад 0
Какую команду вы используете? Gyan 7 лет назад 0
... и полученный консольный вывод. LordNeckbeard 7 лет назад 0
@Mulvya Написал скрипты. Выход консоли и статистика процессора в ближайшее время. Draconis 7 лет назад 0
В команде мозаики используйте фильтры fifo после setpts. Это не тот фильтр, который будет работать медленно. Gyan 7 лет назад 0

0 ответов на вопрос