Używam FFmpeg do robienia zrzutów ekranu z ekranu Xvfb.
Obecnie przywołuję to z:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Gdy nagrywam wideo z około 5 sesji Xvfb, moje użycie procesora jest bardzo wysokie i z tego powodu występują opóźnienia. Również użycie pamięci wynosi około 300 MB na każdy proces ffmpeg.
Jakich parametrów ffmpeg należy użyć, aby zminimalizować zużycie zasobów komputera (szczególnie procesora i pamięci) podczas przechwytywania ekranu wideo?
źródło
ffmpeg
z-preset superfast
parametrem (nie próbowałem-crf
). W takim przypadku zajmuje mniej zasobów i tworzy filmy o wystarczająco dobrym rozmiarze.-crf 23
jest używany domyślnie, jeśli nie zadeklarujesz wartości, ale jeśli i taksuperfast
jest dla Ciebie wystarczający, być może problem został rozwiązany.Lepiej skoncentrować się na użyciu różnych opcji ffmpeg, które osiągną ten sam wynik w sposób, który zużywa mniej zasobów. To powiedziawszy, istnieją sposoby na wykorzystanie mniejszej ilości zasobów, jeśli naprawdę potrzebujesz osiągnąć konkretną rzecz za pomocą ffmpeg i używa ona zbyt wielu zasobów.
Możesz zmniejszyć priorytet
ffmpeg
procesu procesora:nice
polecenia, aby zmienić priorytet procesu za:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. W Linuksie numer priorytetu (nice
format polecenianice -n <priority> <command>
) wynosi od -20 do 20. Im większa liczba całkowita, tym niższy priorytet; neutralny to 0. Jeśli użyjesz polecenia, które ci dałem i ustawisz na 8, procesor da procesowi mniej czasu, co wydaje się mniejszą „mocą”. Jeśli ta liczba jest zbyt wysoka lub dwie niskie, oczywiście możesz ją zmienić.ffmpeg
uruchomieniu otwórz Monitor systemu. Przewiń w dół do nazwanego procesuffmpeg
, kliknij go lewym przyciskiem myszy, aby wybrać, kliknij prawym przyciskiem myszy i ustaw priorytet na „Niski” lub „Bardzo niski”.Jeśli martwisz się również wykorzystaniem pamięci, wiedz, że nie można powiedzieć procesowi, aby zajmował tylko tyle pamięci i nadal działał. Jądro automatycznie kontroluje przydział pamięci dla procesów. Istnieje sposób na umieszczanie procesów w klatkach za pomocą
timeout
skryptu , dzięki czemu gdy proces i wszelkie procesy potomne zajmą zbyt dużo pamięci (limit określony przez ciebie), są one bezpiecznie przerywane i wyświetla się powiadomienie. Jednak jeśli proces ma tylko tyle pamięci (powiedzmy przez jądro) i żąda więcej pamięci, której nie może mieć, spowoduje awarię.Kilka przydatnych informacji na temat:
Korzystając z wiedzy o Cgroups, możesz robić wiele zabawnych rzeczy, takich jak kontrolowanie szybkości procesu.
źródło
-re (wejście) Czytaj dane wejściowe przy natywnej częstotliwości klatek. Służy głównie do symulacji urządzenia pobierającego lub strumienia wejściowego na żywo (np. Podczas odczytu z pliku). Nie powinien być używany z rzeczywistymi urządzeniami pobierającymi lub strumieniami wejściowymi na żywo (gdzie może to spowodować utratę pakietów). Domyślnie ffmpeg próbuje jak najszybciej odczytać dane wejściowe. Ta opcja spowolni odczyt danych wejściowych do natywnej częstotliwości klatek danych wejściowych. Jest to przydatne w przypadku danych wyjściowych w czasie rzeczywistym (np. Streaming na żywo).
źródło