{"id":13395230,"url":"https://github.com/cytopia/ffscreencast","last_synced_at":"2025-05-14T20:07:24.409Z","repository":{"id":49034730,"uuid":"43354735","full_name":"cytopia/ffscreencast","owner":"cytopia","description":"ffscreencast - ffmpeg screencast/desktop-recording with video overlay and multi monitor support","archived":false,"fork":false,"pushed_at":"2024-07-16T12:33:10.000Z","size":337,"stargazers_count":1795,"open_issues_count":20,"forks_count":77,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-04-03T03:00:00.257Z","etag":null,"topics":["camera-overlay","ffmpeg","ffmpeg-command","ffmpeg-wrapper","screen-recorder","screencast"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/cytopia.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2015-09-29T08:29:00.000Z","updated_at":"2025-04-03T01:48:54.000Z","dependencies_parsed_at":"2024-09-24T15:41:54.202Z","dependency_job_id":null,"html_url":"https://github.com/cytopia/ffscreencast","commit_stats":{"total_commits":97,"total_committers":4,"mean_commits":24.25,"dds":0.4020618556701031,"last_synced_commit":"d77a668ff50cd8ac06cb1c94622ba86988f6dce9"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fffscreencast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fffscreencast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fffscreencast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fffscreencast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cytopia","download_url":"https://codeload.github.com/cytopia/ffscreencast/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248161253,"owners_count":21057553,"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":["camera-overlay","ffmpeg","ffmpeg-command","ffmpeg-wrapper","screen-recorder","screencast"],"created_at":"2024-07-30T17:01:46.927Z","updated_at":"2025-04-10T04:54:24.899Z","avatar_url":"https://github.com/cytopia.png","language":"Shell","readme":"# ffscreencast\n\n[Features](https://github.com/cytopia/ffscreencast#1-features) |\n[Installation](https://github.com/cytopia/ffscreencast#2-installation) |\n[Usage](https://github.com/cytopia/ffscreencast#3-usage) |\n[Screenshots](https://github.com/cytopia/ffscreencast#4-screenshots) |\n[FAQ](https://github.com/cytopia/ffscreencast#5-faq) |\n[Todo](https://github.com/cytopia/ffscreencast#6-todo) |\n[Contribution](https://github.com/cytopia/ffscreencast#7-contribution) |\n[License](https://github.com/cytopia/ffscreencast#8-license) |\n[Version](https://github.com/cytopia/ffscreencast#9-version) |\n[Awesome](https://github.com/cytopia/ffscreencast#10-awesome)\n\n[![Build Status](https://travis-ci.org/cytopia/ffscreencast.svg?branch=master)](https://travis-ci.org/cytopia/ffscreencast)\n[![Latest Stable Version](https://poser.pugx.org/cytopia/ffscreencast/v/stable)](https://packagist.org/packages/cytopia/ffscreencast) [![Total Downloads](https://poser.pugx.org/cytopia/ffscreencast/downloads)](https://packagist.org/packages/cytopia/ffscreencast) [![Latest Unstable Version](https://poser.pugx.org/cytopia/ffscreencast/v/unstable)](https://packagist.org/packages/cytopia/ffscreencast) [![License](https://poser.pugx.org/cytopia/ffscreencast/license)](http://opensource.org/licenses/MIT)\n[![Type](https://img.shields.io/badge/type-bash-red.svg)](https://www.gnu.org/software/bash/)\n\n**About**\n\n`ffscreencast` is a shell wrapper for `ffmpeg` that allows fool-proof screen recording via the command line. It will auto-detect all available monitors, cameras and microphones and is able to interactively or manually choose the desired recording device(s). Additionally `ffscreencast` will let you overlay the camera stream on top of the desktop session.\n\nBesides that `ffscreencast` can act as an ffmpeg command generator. Every available option can also just show the corresponding ffmpeg command instead of executing it. Non-ffmpeg commands, such as how the camera resolution is pulled and others can also be shown instead of being executed.\n\n![Screencast](https://raw.githubusercontent.com/cytopia/ffscreencast/master/doc/img/ffscreencast.png)\n\n**Supported platforms**\n\n| OSX    | Linux | FreeBSD | Windows |\n| :----: | :----: | :----: | :----: |\n| [![OSX](https://raw.githubusercontent.com/cytopia/icons/master/64x64/osx.png)](https://www.apple.com/osx) | ![Linux](https://raw.githubusercontent.com/cytopia/icons/master/64x64/linux.png) | [![FreeBSD](https://raw.githubusercontent.com/cytopia/icons/master/64x64/freebsd.png)](https://www.freebsd.org) | [![Windows](https://raw.githubusercontent.com/cytopia/icons/master/64x64/windows.png)](https://www.microsoft.com/en-us/windows) |\n| via [AVFoundation](https://ffmpeg.org/ffmpeg-devices.html#avfoundation) | via [x11grab](https://ffmpeg.org/ffmpeg-devices.html#x11grab) | coming soon | coming soon |\n\n**Requirements**\n\n| Program  | Required | Description |\n| ------------- | ------------- | -------- |\n| [bash](https://www.gnu.org/software/bash/)  | yes  | The whole script is written in bash and might not be 100% Posix compliant |\n| [ffmpeg](https://www.ffmpeg.org/)  | yes  | The ffmpeg binary must be present |\n| [v4l2-ctl](http://linuxtv.org/wiki/index.php/V4l-utils) | Linux | Required for linux to list camera devices |\n| [arecord](http://linux.die.net/man/1/arecord) | Linux | Required for linux to list sound devices |\n| [xdpyinfo](http://www.x.org/archive/X11R7.6/doc/man/man1/xdpyinfo.1.xhtml) | Linux | Required for linux to list screends |\n\n## 1. Features\n\n* Config file for default configuration\n* Screen recording\n* Camera overlay\n* Audio support\n* Allows to manually (parameter) or interactively choose monitor\n* Allows to manually (parameter) or interactively choose camera\n* Allows to manually (parameter) or interactively choose sound device\n* ffmpeg command generation\n\n## 2. Installation\n\n### 2.1 OSX\n\n```shell\nbrew install cytopia/tap/ffscreencast\n```\n\n### 2.2 Linux/BSD\n```shell\ngit clone https://github.com/cytopia/ffscreencast\ncd ffscreencast\nsudo cp bin/ffscreencast /usr/local/bin\n```\n\n## 3. Usage\n\n### 3.1 Overview\n\nTo simply start desktop recording your screen call the program without any arguments `ffscreencast` and it will use the default screen without camera overlay and without sound.\n\n```shell\n$ ffscreencast\n\nUsage: ffscreencast [-s[num]] [--sargs=] [-a[num]] [--aargs=] [-c[num] [--cargs=] [--oargs=] [-e\u003cext\u003e] [--dry]\n       ffscreencast --slist [--dry]\n       ffscreencast --alist [--dry]\n       ffscreencast --clist [--dry]\n       ffscreencast --help\n       ffscreencast --version\n       ffscreencast --test\n\nWhen invoked without any arguments, it will start screen recording\non the default screen without sound and without camera overlay.\n\nInput options:\n-s[num]           (Default) Enable screen capturing [with device number X].\n                  If no device number is specified it will use the default, if only\n                  one device is present, otherwise it will ask you to choose one\n                  Use: -s or -s1\n\n--sargs=          Additional screen arguments.\n                  Specify additional ffmpeg arguments for the screen input device.\n                  Use: --sargs=\"-framerate 30\"\n                  Default: ''\n\n-a[num]           Enable audio capturing [with device number X]\n                  If no device number is specified it will use the default, if only\n                  one device is present, otherwise it will ask you to choose one\n                  Use: -a or -a1\n\n--aargs=          Additional audio arguments.\n                  Specify additional ffmpeg arguments for the audio input device.\n                  Use: --aargs=\"-ac 1\"\n                  Default: '-ac 2'\n\n-c[num]           Add camera overlay [with device number X]\n                  If no device number is specified it will use the default, if only\n                  one device is present, otherwise it will ask you to choose one\n                  Use: -c or -c1\n\n--cargs=          Additional camera arguments\n                  Specify additional ffmpeg arguments for the camera input device.\n                  Use: --cargs=\"-video_size 1280x720\"\n                  Default: ''\n\n\nOutput options:\n-e\u003cext\u003e           Output video format extension (Default: mkv)\n                  E.g.: -emkv, or -eavi, or -emp4\n\n-oargs=           Additional output arguments\n                  Specify additional ffmpeg arguments for the output encoding.\n                  Use: --oargs=\"-crf 0\"\n                  Default: '-crf 0 -preset ultrafast'\n\n\nBehavior options:\n--dry             Show the command (without executing)\n\n\nList options:\n--list            List all devices\n--slist           Only list screen capturing devices (monitors)\n--alist           Only list audio capturing devices (microphones)\n--clist           Only list camera capturing devices (cams)\n\n\nSystem information:\n--help            Show this help screen\n--version         Show version information\n--test            Test requirements\n\n```\n\nThe `num` (device numbers) can be omitted. If there is only one device of its type available, `ffscreencast` will automatically default to this device, otherwise it will ask interactively which device to use for recording.\n\n### 3.2 Examples\n\nDo a screencast on the default screen (without explicitly choosing the monitor)\n\n```shell\n$ ffscreencast\n```\n\nList monitors and record on monitor 2 (`Capture screen 0`)\n\n```shell\n$ ffscreencast --slist\nAvailable screen recording devices (monitors):\n\n[2] Capture screen 0    Color LCD: Resolution: 2880 x 1800 Retina\n[3] Capture screen 1    S2431W: Resolution: 1920 x 1200\n[4] Capture screen 2    Thunderbolt Display: Resolution: 2560 x 1440\n\n\n$ ffscreencast -s2\n```\n\nList cameras\n\n```shell\n$ ffscreencast --clist\nAvailable camera recording devices:\n\n[0] FaceTime HD Camera (Display) (160x120@29.97 160x120@25 160x120@23.999981 160x120@14.999993 176x144@29.97 176x144@25 176x144@23.999981 176x144@14.999993 320x240@29.97 320x240@25 320x240@23.999981 320x240@14.999993 352x288@29.97 352x288@25 352x288@23.999981 352x288@14.999993 640x480@29.97 640x480@25 640x480@23.999981 640x480@14.999993 960x540@29.97 960x540@25 960x540@23.999981 960x540@14.999993 1024x576@29.97 1024x576@25 1024x576@23.999981 1024x576@14.999993 1280x720@29.97 1280x720@25 1280x720@23.999981 1280x720@14.999993)\n\n[1] FaceTime HD Camera (1280x720@30 640x480@30 320x240@30)\n\n```\n\nStart a screencast with camera overlay (only one camera present)\n\n```shell\n$ ffscreencast -c\n```\n\nor select the camera device\n\n```shell\n$ ffscreencast -c0\n```\n\nShow the ffmpeg command for camera recording\n\n```shell\n$ ffscreencast -c --dry\n\nffmpeg -hide_banner -loglevel info -f avfoundation   -i \"1\" -f avfoundation  -i \"0\" -c:v libx264 -crf 0 -preset ultrafast -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' \"/Users/cytopia/Desktop/Screencast 2015-10-06 at 21.28.01.mkv\"\n\n```\n\n## 4. Screenshots\n\nShowing screen recording with and without camera overlay.\n\n![Screencast](https://raw.githubusercontent.com/cytopia/ffscreencast/master/doc/img/ffscreencast.png)\n![Screencast](https://raw.githubusercontent.com/cytopia/ffscreencast/master/doc/img/ffscreencast2.png)\n\n## 5. FAQ\n\nThis section will be updated whenever questions arise that are worth mentioning here\n\n### 5.1 How to convert to other formats?\n\nThere is currently no built-in gif support, mainly because it will not produce such a good quality. It is recommended to first create your screencast with the best possible quality and least possible resources (you are obviously going to do something and will not want to consume all your cpu for the encoding) and afterwards convert it to a high quality gif or other formats.\n\nSee [contrib](contrib/) for converters and feel free to add more.\n\n\n### 5.2 How to enable cursor capturing on OSX?\n\nBy default `ffmpeg` on OSX (using `AVFoundation`) does not capture the mouse (on Linux it does). You can however pass this as a custom option to `ffscreencast`\n\nIn order to capture the mouse pointer itself add the following `--sargs`:\n\n```shell\nffscreencast --sargs=\"-capture_cursor 1\"\n```\n\nIf you also want to *see* when you actually click the mouse, do it like this:\n```shell\nffscreencast --sargs=\"-capture_cursor 1 -capture_mouse_clicks 1\"\n```\n\n\n\n### 5.3 How to hide the cursor on Linux/BSD?\n\nBy default `ffmpeg` on Linux/BSD (using `x11grab`) does show the mouse pointer by default (OSX does not). You can however pass this as a custom option to `ffscreencast` in order to hide the mouse pointer:\n\n\n```shell\nffscreencast --sargs=\"-draw_mouse 0\"\n```\n\n\n\n### 5.4 How to alter the *default* options (config file)?\n\nWhen you run `ffscreencast` for the first time, it will create a configuration file in `~/.config/ffscreencast/ffscreencastrc`. Everything specified in this file will be applied when you run `ffscreencast` without any arguments. So if you have your own nice defaults you always need to enter, you can simply add them to the config file. \n\n## 6. Todo\n\n### 6.1 Bugs\n\n* [ ] **General:** Sound is still behind one second when using camera overlay\n* [X] **OSX:** ~~USB Monitors (see [#1](https://github.com/cytopia/ffscreencast/issues/1))~~\n\n### 6.2 Enhancements\n\n* [ ] **BSD:** Support for [Free]BSD (needs testing)\n* [ ] **Windows:** Support for Windows (via cygwin and dshow)\n* [ ] **Linux:** set sound options via cmd (alsa vs pulse)\n* [ ] **Linux:** Get default resolution/framerate for camera\n* [X] **OSX:** Get default resolution/framerate for camera\n* [X] **General:** ~~Set camera resolution via cmd~~ use `--cargs`\n* [ ] **General:** Set camera position via cmd\n* [ ] **General:** Be able to record one or multiple screens (monitors)\n\n\n\n## 7. Contribution\n\nContributors are welcome.\n\n## 8. License\n\n[![license](https://poser.pugx.org/cytopia/ffscreencast/license)](http://opensource.org/licenses/mit)\n\n## 9. Version\n\nFor a complete list of verion see [CHANGELOG](CHANGELOG.md)\n\n## 10. Awesome\n\nAdded by the following [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) lists:\n\n* [awesome-cli](https://github.com/aharris88/awesome-cli)\n\n","funding_links":[],"categories":["Shell","Multimedia","ffmpeg","Productivity","\u003ca name=\"video\"\u003e\u003c/a\u003eVideo"],"sub_categories":["Video","Testing"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcytopia%2Fffscreencast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcytopia%2Fffscreencast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcytopia%2Fffscreencast/lists"}