После тестирования многих возможностей у меня есть идеальная командная строка для создания миниатюр из прямой трансляции:
ffmpeg -i rtmp://srvIp/h264.stream -r 1 -an -updatefirst 1 -y thumbnail.jpg
Он обновляет JPG каждую секунду, и веб-сервер HTTP без проблем использует JPG, показывая его веб-клиентам.
Единственная проблема: каждая команда использует от 5 до 10% процессорного времени. Если мне нужны миниатюры из 20 каналов, у процессора нет на это мощности. FFmpeg, вероятно, активно декодирует все кадры.
Есть ли способ оптимизировать эту команду и как-то сказать FFmpeg пропустить все кадры между необходимыми. Я пробовал это фильтры:
-vf fps=fps=1
-vf "'select=eq(pict_type,I)'"
- используя
1/5
или1/10
качестве FPS
Но это никак не повлияло на загрузку процессора, только качество изображения хуже с (2) по сравнению с исходной командой (-r 1
).
Я в порядке с одним уменьшенным изображением в секунду (или извлекающим только ключевые кадры), и одно уменьшенное изображение в 10 секунд также хорошо, но я думаю, что реальная проблема, вероятно, заключается в декодировании H.264.