Я использую FFmpeg для захвата видео с экрана Xvfb.
В настоящее время я вызываю это с:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Когда я записываю видео примерно с 5 сеансов Xvfb, загрузка моего процессора очень высока, и из-за этого возникают задержки. Также использование памяти составляет около 300 МБ для каждого из процессов ffmpeg.
Какие параметры для ffmpeg я должен использовать, чтобы минимизировать использование ресурсов компьютера (в частности, процессора и памяти) при выполнении захвата видео экрана?
источник
ffmpeg
с-preset superfast
параметром (я не пробовал-crf
). В этом случае он потребляет меньше ресурсов и производит видео достаточно хорошего размера.-crf 23
используется по умолчанию, если вы не объявляете значение, но в любом случае, еслиsuperfast
вам этого достаточно, возможно, проблема решена.Лучше сконцентрироваться на использовании различных опций ffmpeg, которые позволят получить тот же результат, при этом используя меньше ресурсов. Тем не менее, есть способы использовать меньше ресурсов, если вам действительно нужно выполнить конкретную задачу с помощью ffmpeg, и он использует слишком много ресурсов.
Вы можете уменьшить приоритет
ffmpeg
процесса процессора в России:nice
команду , чтобы изменить приоритет процесса в:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. В Linux номер приоритета (nice
формат командыnice -n <priority> <command>
) варьируется от -20 до 20. Чем больше целое число, тем ниже приоритет; нейтральное значение равно 0. Если вы используете команду, которую я дал вам, и установите ее на 8, ЦП даст процессу меньше времени, что выглядит как «меньше энергии». Если это число слишком велико или два низко, конечно, вы можете изменить его.ffmpeg
работает, откройте системный монитор. Прокрутите вниз до названного процессаffmpeg
, щелкните левой кнопкой мыши по нему, чтобы выбрать, щелкните правой кнопкой мыши по нему и установите приоритет «Низкий» или «Очень низкий».Если вы также беспокоитесь об использовании памяти, знайте, что нельзя сказать, что процесс занимает столько памяти и продолжает работать. Ядро автоматически контролирует выделение памяти для процессов. С помощью
timeout
сценария существует способ связывания процессов с помощью сценария , так что когда процесс и любые дочерние процессы занимают слишком много памяти (установленный вами предел), они благополучно завершаются и отображается уведомление. Однако, если процессу дается только столько памяти (скажем, ядром), и он запрашивает больше памяти, чем не может иметь, он завершится сбоем.Некоторые полезные вещи, о которых нужно знать:
Используя знания Cgroups, вы можете делать много забавных вещей, таких как управление перестановкой процесса.
источник
-re (вход) Чтение ввода с собственной частотой кадров. В основном используется для имитации устройства захвата или живого потока ввода (например, при чтении из файла). Не следует использовать с реальными устройствами захвата или живыми входными потоками (где это может привести к потере пакетов). По умолчанию ffmpeg пытается прочитать ввод (ы) как можно быстрее. Эта опция будет замедлять чтение входных данных до исходной частоты кадров входных данных. Это полезно для вывода в реальном времени (например, прямой эфир).
источник