فیلم برداری از دسکتاپ با ffmpeg (کامل تر شد)
برای فیلمبرداری از دسکتاپ نرمافزارهای زیادی هست ولی ffmpeg سادهترین راه برای اینکار هست مخصوصاً اگر با alias ها راهترش هم بکنید.
من خودم از این روش استفاده میکنم چون دسکتاپ من 1680x1050 هست اینجا هم به همین صورت هست پس تغییرش بدید به اندازه تصویرتون.
برای بدست آوردن نسبت تصویر اگر xrandr در توزیع شما استفاده شده باشه با این دستور به راحتی نمایش میده:
xrandr | grep \* | awk '{print $1}' 3200x1800 |
و مقدار اندازه تصویر خودتون رو در دستور زیر قرار بدید:
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 درست کردیم که اسامی ویدیو هایی که ذخیره میشن بر اساس تاریخ و زمان باشن. این خیلی راحت تره تا اینکه همه ویدیو ها هم نام باشن و اگه بخوایم نگهشون داریم تک تک اسمهاشون رو عوض کنیم! با این کار ویدیوها در فایلهای جدا و با اسمهای مختلف ذخیره میشن.