Saya menggunakan FFmpeg untuk membuat tangkapan layar video dari tampilan Xvfb.
Saat ini saya memohonnya dengan:
ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
Saat saya merekam video dari sekitar 5 sesi Xvfb, penggunaan CPU saya sangat tinggi dan ada kelambatan karenanya. Juga penggunaan memori sekitar 300 MB untuk setiap proses ffmpeg.
Parameter mana untuk ffmpeg yang harus saya gunakan untuk meminimalkan penggunaan sumber daya komputer (terutama CPU dan memori) saat membuat tangkapan layar video?
sumber
ffmpeg
dengan-preset superfast
parameter (saya belum mencoba-crf
). Dibutuhkan lebih sedikit sumber daya dalam kasus tersebut dan menghasilkan video dengan ukuran yang cukup baik.-crf 23
digunakan secara default jika Anda tidak mendeklarasikan nilai, tetapi jikasuperfast
cukup untuk Anda, maka mungkin masalahnya sudah terpecahkan.Lebih baik berkonsentrasi menggunakan opsi ffmpeg berbeda yang akan mencapai hasil yang sama dengan cara yang menggunakan sumber daya lebih sedikit. Yang mengatakan, ada cara untuk menggunakan lebih sedikit sumber daya jika Anda benar-benar perlu menyelesaikan hal tertentu dengan ffmpeg dan menggunakan terlalu banyak sumber daya.
Anda dapat mengurangi prioritas
ffmpeg
proses CPU:nice
perintah untuk mengubah prioritas proses ini:nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov
. Di Linux, angka prioritas (nice
format perintahnice -n <priority> <command>
) berkisar dari -20 hingga 20. Semakin besar bilangan bulat, semakin rendah prioritasnya; netral adalah 0. Jika Anda menggunakan perintah yang saya berikan dan mengaturnya ke 8, CPU akan memberikan waktu proses lebih sedikit, yang sepertinya kurang "daya". Jika angka ini terlalu tinggi atau rendah, tentu saja, Anda dapat mengubahnya.ffmpeg
berjalan, buka Monitor Sistem. Gulir ke bawah ke proses bernamaffmpeg
, klik kiri untuk memilih, klik kanan, dan tetapkan prioritas ke "Rendah" atau "Sangat Rendah".Jika Anda khawatir tentang penggunaan memori juga, ketahuilah bahwa tidak mungkin untuk mengatakan suatu proses untuk hanya mengambil begitu banyak memori dan masih berjalan. Kernel secara otomatis mengontrol alokasi memori untuk proses. Ada cara untuk mengurung proses, dengan
timeout
skrip membatasi , sehingga ketika proses dan proses anak memakan terlalu banyak memori (batas yang ditentukan oleh Anda) mereka diakhiri dengan aman dan pemberitahuan ditampilkan. Namun, jika suatu proses hanya diberi begitu banyak memori (katakanlah oleh kernel) dan ia meminta lebih banyak memori yang tidak dapat dimiliki, itu akan macet.Beberapa hal bermanfaat yang perlu diketahui:
Menggunakan pengetahuan Cgroups, Anda dapat melakukan banyak hal menyenangkan seperti mengendalikan swappiness suatu proses.
sumber
-re (input) Baca input pada frame rate asli. Terutama digunakan untuk mensimulasikan perangkat ambil, atau aliran input langsung (misalnya saat membaca dari file). Seharusnya tidak digunakan dengan perangkat ambil aktual atau aliran input langsung (di mana ia dapat menyebabkan hilangnya paket). Secara default, ffmpeg mencoba membaca input secepat mungkin. Opsi ini akan memperlambat pembacaan input ke frame rate asli input. Ini berguna untuk keluaran waktu nyata (misalnya streaming langsung).
sumber