{"id":17360709,"url":"https://github.com/certik/record","last_synced_at":"2025-06-26T16:09:40.585Z","repository":{"id":587385,"uuid":"221323","full_name":"certik/record","owner":"certik","description":null,"archived":false,"fork":false,"pushed_at":"2011-07-11T03:38:45.000Z","size":158,"stargazers_count":12,"open_issues_count":1,"forks_count":19,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-26T16:08:55.255Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://certik.github.com/record","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/certik.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-06-08T05:09:15.000Z","updated_at":"2023-07-31T06:48:06.000Z","dependencies_parsed_at":"2022-07-15T01:30:52.270Z","dependency_job_id":null,"html_url":"https://github.com/certik/record","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/certik/record","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certik%2Frecord","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certik%2Frecord/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certik%2Frecord/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certik%2Frecord/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/certik","download_url":"https://codeload.github.com/certik/record/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certik%2Frecord/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262099731,"owners_count":23258670,"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-10-15T19:27:40.351Z","updated_at":"2025-06-26T16:09:40.557Z","avatar_url":"https://github.com/certik.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Record\n------\n\nThe record.py script uses gtk's \"get_from_drawable()\" function to take\nscreenshots and modified alsa's arecord to record the sound.\n\nMore details how it works:\n\nThe arecord and aplay alsa utilities are actually one and the same program, so\nit was stripped down, all signals removed, all playback removed, all header\nfiles merged into it, then a \"capture_stop\" global variable was added, which if\nset to 1, the main audio capture loop will end. Then it is called from cython\nusing nogil in it's own thread and when the user wants to end it, the\n\"capture_stop\" is set to 1. The main python thread takes screenshots in\nperiodic intervals (15 fps by default) and if it's late, it skips the frame, so\nthat the next one is on time. All screenshots are saved to the \"data\" file in\nthe temporary directory, which is later read and converted to a set of png\nimages. The audio is saved to a wav file.\n\nIt is then your job to create a video from it (and to convert sound to any\nformat you like, like ogg vorbis), it tells you some suggestions (see below).\nAlso the amplifier.py script is provided to amplify volume of the wav file in\ncase it is too quiet.\n\nUsage\n-----\n\nInstall the following packages in Debian/Ubuntu:\n\nsudo apt-get install python-gtk2 libasound2-dev\n\nand run it:\n\n./record.py\n\nIt produces a wav file in the tmp directory (it tells you which) and a set of\npng images. It also suggests you exact commands how to create videos from it,\nusing either mencoder or ffmpeg2theora (it's up to you).\n\nIn my experience mencoder can't sync the sound and video correctly, while\nffmpeg2theora just works. If the sound is too quiet, use the amplifier.py\nutility to amplify the wav file before converting it to ogg or the\n\"normalize-audio\" program (better results) from the Debian package of the same\nname (it operates *inplace* on the wav file).\n\nConvert to FLV\n--------------\n\nIn order to convert to FLV, so that you can play it with flowplayer (flash\nplayer in the browser), use the script theora2flv.\n\nLicense\n-------\n\nThe arecord.c file is GPL (see alsa-utils for more info), all the other code is\nBSD. The package as a whole is GPL due to arecord.c.\n\nFlowplayer\n----------\n\nExample of usage:\n\n\u003ca href=\"level-set.flv\"\n    style=\"display:block;width:500px;height:399px\" id=\"player1\"\u003e \u003c/a\u003e\n\u003cscript src=\"http://femhub.googlecode.com/svn/trunk/swf/flowplayer-3.1.1.min.js\"\n    type=\"text/javascript\"\u003e \u003c/script\u003e\n\u003cscript type=\"text/javascript\"\u003e\n    flowplayer(\"player1\",\n            \"http://femhub.googlecode.com/svn/trunk/swf/flowplayer-3.1.1.swf\",\n            {\nplaylist: [\n{ url: \"lset4.png\", autoPlay: true},\n{ url: \"level-set.flv\", autoPlay: false}\n]\n            });\n\u003c/script\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcertik%2Frecord","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcertik%2Frecord","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcertik%2Frecord/lists"}