فیلم‌برداری از دسکتاپ با ffmpeg

امین 15 سپتامبر 2023 زمان خواندن: 2 دقیقه

توجه: این مطلب قدیمی است و صرفا جهت آرشیو حفظ شده است. ممکن است امروزه برخی موارد یکسان نباشند.

برای فیلم‌برداری از دسکتاپ نرم‌افزارهای زیادی هست ولی ffmpeg ساده‌ترین راه در xorg برای اینکار هست مخصوصاً اگر با alias ها راحت‌ترش هم بکنید.

من خودم از این روش استفاده می‌کنم چون دسکتاپ من 1680x1050 هست اینجا هم به همین صورت هست پس تغییرش بدید به اندازه تصویرتون.

برای بدست آوردن نسبت تصویر اگر xrandr در توزیع شما استفاده شده باشه با این دستور به راحتی نمایش میده:

xrandr | grep \* | awk '{print $1}'

و مقدار اندازه تصویر خودتون رو در دستور زیر قرار بدید:

echo "alias capture='ffmpeg -loglevel panic -video_size 3200x1800 -framerate 25 -f x11grab -i :0 output.mp4'" >> ~/.bashrc

از این پس Terminal رو باز کنید و capture رو بنویسید و اینتر بزنید خودکار شروع به ضبط کردن میشه تا وقتی که q رو بزنید و متوقفش کنید.

اگر میخواید صدا هم همراه فیلم ضبط بشه، ادامه مطلب رو ببینید...

برای pulse audio این دستور:

ffmpeg -loglevel panic -video_size 1366x768 -framerate 25 -f x11grab -i :0 -f pulse -ac 2 -i default output.mkv

و برای ALSA این دستور:

ffmpeg -loglevel panic -video_size 1024x768 -framerate 25 -f x11grab -i :0 -f alsa -ac 2 -i hw:0 output.mkv

میتونید یک alias جدا برای ویدیو با صدا مثلا acap و یکی برای بدون صدا مثلا vcap تعیین کنید.

اگر از ffmpeg -loglevel panic استفاده کنید یک ترمینال کاملا پاک خواهید داشت و فقط خطاها نمایش داده میشن.

میتونیم از این اسکریپت ها استفاده کنیم. برای ضبط بدون صدا:

#!/bin/bash
scr="$(xrandr | grep \* | awk '{print $1}')"
filename="$(date +%F_%H:%M:%S.mp4)"
echo "Capturing screen... Press q to stop."
ffmpeg -loglevel panic -video_size $scr -framerate 25 -f x11grab -i :0 $filename
echo "Video file saved to ~/$filename"

و برای ضبط با صدا:

#!/bin/bash
scr="$(xrandr | grep \* | awk '{print $1}')"
filename="$(date +%F_%H:%M:%S.mp4)"
echo "Capturing screen with audio... Press q to stop."
ffmpeg -loglevel panic -video_size $scr -framerate 25 -f x11grab -i :0 -f pulse -ac 2 -i default $filename
echo "Video file saved to ~/$filename"

توضیح:

یه متغیر به اسم scr تعریف کردیم و بجای رزلوشن قرار دادیم که دیگه لازم نباشه اول با xrandr مقدارش رو پیدا کنید و توی دستور بنویسید. خود اسکریپت این کار رو برای ما میکنه.

و یک متغیر دیگه به نام filename درست کردیم که اسامی ویدیو هایی که ذخیره میشن بر اساس تاریخ و زمان باشن. این خیلی راحت تره تا اینکه همه ویدیو ها هم نام باشن و اگه بخوایم نگهشون داریم تک تک اسمهاشون رو عوض کنیم! با این کار ویدیوها در فایلهای جدا و با اسمهای مختلف ذخیره میشن.

اولین نفری باشید که دیدگاهی ارسال می کند!




حاصل سر و کله زدن های من با لینوکس