WF-RECORDER(1) General Commands Manual WF-RECORDER(1)

wf-recorder — برنامه‌ای ساده برای ضبط صفحه‌نمایش در کامپوزیتورهای مبتنی بر wlroots

wf-recorder [-abcCdDefFghlmopPrRvxX] [-a, --audio [=DEVICE]] [-b, --bframes max_b_frames] [-B, --buffrate buffrate] [-c, --codec output_codec] [-r, --framerate framerate] [-d, --device encoding_device] [--no-dmabuf] [-D, --no-damage] [-f, --file filename.ext] [-F filter_string] [-g, --geometry geometry] [-h, --help] [-l, --log] [-m, --muxer muxer] [-L, --list-output] [-o, --output output] [-p, --codec-param [option_param=option_value]] [-v, --version] [-x, --pixel-format] [--audio-backend audio_backend] [-C, --audio-codec output_audio_codec] [-P, --audio-codec-param [option_param=option_value]] [-R, --sample-rate sample_rate] [-X, --sample-format sample_format] [-y, --overwrite]

wf-recorder ابزاری است که برای ضبط صفحه‌نمایش در کامپوزیتورهای Wayland ساخته شده است. این ابزار از برای ضبط ویدیو و از ffmpeg(1) برای رمزگذاری آن استفاده می‌کند.

در ساده‌ترین حالت، wf-recorder را برای آغاز ضبط اجرا کرده و از ‘Ctrl+C’ برای توقف آن استفاده کنید. این کار فایلی با نام ‘recording.mp4’ را در دایرکتوری کاری فعلی با استفاده از codec پیش‌فرض ایجاد می‌کند.

گزینه‌ها به شرح زیر هستند:

, --audio [=DEVICE]
ضبط صفحه‌نمایش همراه با صدا را آغاز می‌کند.

آرگومان DEVICE اختیاری است. در صورتی که می‌خواهید دستگاه PulseAudio ضبط‌کننده صدا را مشخص کنید، می‌توانید این دستور را همراه با نام آن دستگاه اجرا نمایید. می‌توانید دستگاه خود را با اجرای دستور زیر پیدا کنید:

$ pactl list sources | grep Name
, --bframes max_b_frames
حداکثر تعداد B-Frameهای مورد استفاده را تنظیم می‌کند.
, --buffrate buffrate
یک پیش‌بینی از نرخ فریم مورد انتظار را به انکودر اعلام می‌کند. این کار VFR را حفظ کرده و مشکل محدودیت FPS برخی از انکودرها (مانند svt-av1) را حل می‌کند. باید روی همان نرخ فریم نمایشگر تنظیم شود.
, --codec output_codec
کدک ویدیوی خروجی را مشخص می‌کند. از خروجی GIF نیز پشتیبانی می‌کند.

برای تغییر پارامترهای کدک، از -p option_name=option_value استفاده کنید.

, --framerate framerate
یک نرخ فریم ثابت (CFR) سخت‌گیرانه تنظیم می‌کند. برای رسیدن به آن، فریم‌ها تکرار خواهند شد. این کار ویدیوی حاصل را CFR می‌کند و مشکل محدودیت FPS برخی از انکودرها را رفع می‌کند.
, --device encoding_device
دستگاه مورد استفاده هنگام رمزگذاری ویدیو را انتخاب می‌کند.

برخی از درایورها پشتیبانی از داده‌های ‘rgb0’ را برای ورودی vaapi گزارش می‌دهند، اما در واقع تنها از yuv پشتیبانی می‌کنند. علاوه بر گزینه‌های vaapi، از گزینه -x yuv420 استفاده کنید تا داده‌ها پیش از ارسال به GPU، به‌صورت نرم‌افزاری تبدیل شوند.

به‌طور پیش‌فرض، wf-recorder در صورت استفاده از انکودر GPU تلاش می‌کند تنها از بافرها و کپی‌های GPU استفاده کند. با این حال، این امر می‌تواند در برخی سیستم‌ها باعث بروز مشکلاتی شود. در چنین مواردی، این گزینه کپی GPU را غیرفعال کرده و استفاده از پردازنده (CPU) را اجباری می‌کند.
, --no-damage
به‌طور پیش‌فرض، wf-recorder تنها زمانی فریم جدیدی را از کامپوزیتور درخواست می‌کند که صفحه‌نمایش به‌روزرسانی شود. این امر منجر به ایجاد فایل خروجی بسیار کوچک‌تری می‌شود، هرچند که دارای نرخ نوسازی متغیر خواهد بود. زمانی که این گزینه فعال باشد، wf-recorder از این بهینه‌سازی استفاده نکرده و حتی اگر هیچ به‌روزرسانی در صفحه رخ ندهد، به‌طور پیوسته فریم‌های جدید را ضبط می‌کند.
, --file filename.ext
با استفاده از گزینه -f ، فایل خروجی نام filename.ext را خواهد داشت و قالب فایل بر اساس پسوند ارائه‌شده تعیین می‌شود. اگر پسوند توسط ماکسرهای ffmpeg(1) شما شناخته نشود، دستور با شکست مواجه خواهد شد.

می‌توانید ماکسرهایی را که نصب ffmpeg(1) شما پشتیبانی می‌کند با اجرای دستور زیر بررسی کنید:

$ ffmpeg -muxers
, --filter filter_string
فیلتر ffmpeg مورد استفاده را تنظیم می‌کند. VAAPI برای عملکرد صحیح نیازمند `scale_vaapi=format=nv12:out_range=full` است.
, --geometry screen_geometry
بخش خاصی از صفحه‌نمایش را انتخاب می‌کند. ساختار آن به صورت "x,y WxH" است.
, --help
صفحه راهنما را چاپ می‌کند.
, --log
یک گزارش (لاگ) روی ترمینال جاری تولید می‌کند. برای مقاصد اشکال‌زدایی.
, --muxer muxer
قالب خروجی را به‌جای تشخیص از روی نام فایل، روی یک ماکسر مشخص تنظیم می‌کند.
, --list-output
خروجی‌های (نمایشگرهای) موجود را فهرست می‌کند.
, --output
خروجی‌ای که ویدیو باید از آن ضبط شود را مشخص می‌کند.
, --codec-param [option_name=option_value]
یک پارامتر کدک را تغییر می‌دهد. می‌تواند چندین بار استفاده شود: -p option_name_1=option_value_1 -p option_name_2=option_value_2
, --version
نسخه wf-recorder را چاپ می‌کند.
, --pixel-format pixel_format
قالب پیکسل خروجی را تعیین می‌کند.

فهرست قالب‌های موجود را با دستور زیر مشاهده کنید:

$ ffmpeg -pix_fmts
audio_backend
بک‌اند صوتی مورد استفاده در زمان تنظیم بودن a- را مشخص می‌کند.
, --audio-codec output_audio_codec
کدک صدا را مشخص می‌کند.
, --audio-codec-param [option_name=option_value]
پارامترهای کدک صدا را تغییر می‌دهد.
, --sample-rate sample_rate
نرخ نمونه‌برداری صدا را بر حسب هرتز (HZ) تغییر می‌دهد. مقدار پیش‌فرض 48000 است.
, --sample-format sample_format
قالب نمونه صدای خروجی را تعیین می‌کند.

فهرست قالب‌های موجود را با دستور زیر مشاهده کنید:

$ ffmpeg -sample_fmts
, --overwrite
رونویسی فایل خروجی را بدون تایید خواستن اجبار می‌کند.

برای انتخاب بخش خاصی از صفحه می‌توانید از --g geometry استفاده کنید یا از https://github.com/emersion/slurp برای انتخاب تعاملی ناحیه‌ای از صفحه که ضبط خواهد شد بهره ببرید:

$ wf-recorder -g "$(slurp)"

می‌توانید صفحه‌نمایش و صدا را به‌طور همزمان ضبط کنید با:

$ wf-recorder --audio --file=recording_with_audio.mp4

برای تعیین دستگاه صوتی، از گزینه‌های --a<DEVICE> یا ---audio=<DEVICE> استفاده کنید.

برای مشخص کردن یک codec از گزینه -c codec استفاده کنید. برای تغییر پارامترهای کدک، از گزینه -p استفاده کنید:

$ wf-recorder -c libx264 -p preset=slow -p crf=18

برای تنظیم یک قالب خروجی خاص، از گزینه -m, --muxer استفاده کنید. به‌عنوان مثال، برای خروجی دادن به یک لوپ‌بک می‌توانید از دستور زیر استفاده کنید:

$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2

برای استفاده از انکودینگ GPU، از یک کدک VAAPI (به‌عنوان مثال ‘h264_vaapi’ ) استفاده کرده و یک دستگاه GPU را با گزینه -d مشخص نمایید:

$ wf-recorder -f test-vaapi.mkv -c h264_vaapi -d /dev/dri/renderD128

برخی درایورها پشتیبانی از داده‌های ‘rgb0’ را برای ورودی ‘vaapi’ اعلام می‌کنند اما در واقعیت تنها از فرمت‌های سطحی (planar) yuv پشتیبانی می‌کنند. در این حالت، علاوه بر گزینه‌های ‘vaapi’ از گزینه -x yuv420p استفاده کنید تا داده‌ها پیش از ارسال به GPU به داده‌های سطحی yuv تبدیل شوند.

ffmpeg(1), pactl(1)

July 30, 2022 Linux 6.12.107+deb13-amd64