{"id":13418508,"url":"https://github.com/ammen99/wf-recorder","last_synced_at":"2025-05-16T05:04:11.341Z","repository":{"id":37580325,"uuid":"152992105","full_name":"ammen99/wf-recorder","owner":"ammen99","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-20T17:37:19.000Z","size":299,"stargazers_count":985,"open_issues_count":44,"forks_count":69,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-16T05:03:30.590Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ammen99.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-10-14T16:00:42.000Z","updated_at":"2025-05-16T02:08:09.000Z","dependencies_parsed_at":"2023-11-18T15:25:03.636Z","dependency_job_id":"ecde0cdc-1bbb-4d99-aadb-5205e5436e31","html_url":"https://github.com/ammen99/wf-recorder","commit_stats":{"total_commits":169,"total_committers":43,"mean_commits":"3.9302325581395348","dds":0.6568047337278107,"last_synced_commit":"060ddc50268a775419f19d2403fdcfd8b985564b"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ammen99%2Fwf-recorder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ammen99%2Fwf-recorder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ammen99%2Fwf-recorder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ammen99%2Fwf-recorder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ammen99","download_url":"https://codeload.github.com/ammen99/wf-recorder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254471061,"owners_count":22076585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T22:01:03.117Z","updated_at":"2025-05-16T05:04:11.322Z","avatar_url":"https://github.com/ammen99.png","language":"C++","funding_links":[],"categories":["C++","Tools","Terminal","Screencasting"],"sub_categories":["Screenshotting","Apps and Tools"],"readme":"# wf-recorder\n\nwf-recorder is a utility program for screen recording of `wlroots`-based compositors (more specifically, those that support `wlr-screencopy-v1` and `xdg-output`). Its dependencies are `ffmpeg`, `wayland-client` and `wayland-protocols`.\n\n# installation\n\n[comment]: \u003c\u003e (List ordered alphabetically)\n\n## Alpine Linux\n\nwf-recorder is available in the community repositories:\n```\napk add wf-recorder\n```\n\n## Arch Linux\n\nArch users can install wf-recorder from the Community repo.\n```\npacman -S wf-recorder\n```\n\n## Artix Linux\n\nArtix users can install wf-recorder from the official repos\n```\npacman -S wf-recorder\n```\n\n## Debian GNU/Linux\n\nDebian users can install wf-recorder from official repos\n```\napt install wf-recorder\n```\n\n## Fedora Linux\n\nFedora users can install wf-recorder from the official repos\n```\nsudo dnf install wf-recorder\n```\n\n## Gentoo Linux\n\nGentoo users can install wf-recorder from the official (`::gentoo`) repository.\n\n## NixOS / Nix\n\nUsers of the Nix package manager can add the `wf-recorder` package to their system configurations, or use `nix-shell` / `nix shell` / `nix run`:\n\n```\nnix-shell -p wf-recorder\n# OR\nnix shell nixpkgs#wf-recorder\n# OR\nnix run nixpkgs#wf-recorder\n```\n\n## Void Linux\n\nVoid users can install wf-recorder from the official repos\n```\nxbps-install -S wf-recorder\n```\n\n\n## From Source\n### Install Dependencies\n\n#### Ubuntu\n```\nsudo apt install g++ meson libavutil-dev libavcodec-dev libavformat-dev libswscale-dev libpulse-dev\n```\n\n#### Fedora\n```\n$ sudo dnf install gcc-c++ meson wayland-devel wayland-protocols-devel ffmpeg-free-devel pulseaudio-libs-devel\n```\n\n### Download \u0026 Build\n```\ngit clone https://github.com/ammen99/wf-recorder.git \u0026\u0026 cd wf-recorder\nmeson build --prefix=/usr --buildtype=release\nninja -C build\n```\nOptionally configure with `-Ddefault_codec='codec'`. The default is libx264. Now you can just run `./build/wf-recorder` or install it with `sudo ninja -C build install`.\n\nThe man page can be read with `man ./manpage/wf-recorder.1`.\n\n# Usage\nIn its simplest form, run `wf-recorder` to start recording and use Ctrl+C to stop. This will create a file called `recording.mp4` in the current working directory using the default codec.\n\nUse `-f \u003cfilename\u003e` to specify the output file. In case of multiple outputs, you'll first be prompted to select the output you want to record. If you know the output name beforehand, you can use the `-o \u003coutput name\u003e` option.\n\nTo select a specific part of the screen you can either use `-g \u003cgeometry\u003e`, or use [slurp](https://github.com/emersion/slurp) for interactive selection of the screen area that will be recorded:\n\n```\nwf-recorder -g \"$(slurp)\"\n```\n\nYou can record screen and sound simultaneously with\n\n```\nwf-recorder --audio --file=recording_with_audio.mp4\n```\n\nTo specify an audio device, use the `-a\u003cdevice\u003e` or `--audio=\u003cdevice\u003e` options.\n\nTo specify a video codec, use the `-c \u003ccodec\u003e` option. To modify codec parameters, use `-p \u003coption_name\u003e=\u003coption_value\u003e`.\n\nYou can also specify an audio codec, using `-C \u003ccodec\u003e`. Alternatively, the long form `--audio-codec` can be used. \n\nYou can use the following command to check all available video codecs\n```\nffmpeg -hide_banner -encoders | grep -E '^ V' | grep -F '(codec' | cut -c 8- | sort\n```\n\nand the following for audio codecs\n\n```\nffmpeg -hide_banner -encoders | grep -E '^ A' | grep -F '(codec' | cut -c 8- | sort\n```\n\nUse ffmpeg to get details about specific encoder, filter or muxer.\n\nTo set a specific output format, use the `--muxer` option. For example, to output to a video4linux2 loopback you might use:\n```\nwf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2\n```\n\nTo use GPU encoding, use a VAAPI codec (for ex. `h264_vaapi`) and specify a GPU device to use with the `-d` option:\n```\nwf-recorder -f test-vaapi.mkv -c h264_vaapi -d /dev/dri/renderD128\n```\nSome drivers report support for rgb0 data for vaapi input but really only support yuv planar formats. In this case, use the `-x yuv420p` or `--pixel-format yuv420p` option in addition to the vaapi options to convert the data to yuv planar data before sending it to the GPU.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fammen99%2Fwf-recorder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fammen99%2Fwf-recorder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fammen99%2Fwf-recorder/lists"}