{"id":13578443,"url":"https://github.com/bmewj/video-app","last_synced_at":"2025-04-05T19:33:06.011Z","repository":{"id":38335144,"uuid":"220680796","full_name":"bmewj/video-app","owner":"bmewj","description":"A real-time video processing app written in C++ using OpenGL and FFmpeg","archived":false,"fork":false,"pushed_at":"2023-08-27T14:11:10.000Z","size":222,"stargazers_count":244,"open_issues_count":7,"forks_count":60,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-11-05T16:45:28.469Z","etag":null,"topics":["cmake","cpp","ffmpeg","opengl","tutorial","video","video-processing"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bmewj.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}},"created_at":"2019-11-09T17:49:50.000Z","updated_at":"2024-11-01T06:07:52.000Z","dependencies_parsed_at":"2024-11-05T16:39:44.490Z","dependency_job_id":"a83abd3a-28a4-4868-9966-303729df0f8a","html_url":"https://github.com/bmewj/video-app","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmewj%2Fvideo-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmewj%2Fvideo-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmewj%2Fvideo-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmewj%2Fvideo-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bmewj","download_url":"https://codeload.github.com/bmewj/video-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247392959,"owners_count":20931801,"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":["cmake","cpp","ffmpeg","opengl","tutorial","video","video-processing"],"created_at":"2024-08-01T15:01:30.688Z","updated_at":"2025-04-05T19:33:05.626Z","avatar_url":"https://github.com/bmewj.png","language":"C++","funding_links":[],"categories":["\u003ca name=\"cpp\"\u003e\u003c/a\u003eC++"],"sub_categories":[],"readme":"Video App in C++\n================\n\nI'm building a visualisation tool for live music performances. The app generates video\ngrids containing one video for every element in the song. For elements that are pre-recorded\nthe videos will be pre-recorded. For elements that are played live, the videos will be taken\nfrom webcams/capture cards/live streams.\n\n![Example Grid](https://raw.githubusercontent.com/bartjoyce/video-app/master/assets/example-grid.jpg)\n\n[This video explains the function of the app in detail.](https://www.youtube.com/watch?v=xSPXzwI9Czk)\n\n## Programming live streams\n\nThis app is being developed live on weekly Youtube live-streams. They are announced ahead of time on [my Youtube channel](https://www.youtube.com/channel/UClZL_faO7lGe6nM9MH-uu6A). You can also find all the previous streams on the [C++ Real-time video processing playlist](https://www.youtube.com/playlist?list=PLKucWgGjAuTbobNC28EaR9lbGQTVyD9IS)\n\n## Installation\n\n### 1. Prerequisites\n\nThis app has 4 external dependencies:\n\n- **CMake** to build the project,\n- **pkg-config** to locate shared libraries,\n- **FFmpeg** to read and write video files.\n\nOn MacOS using Homebrew, run:\n\n```sh\nbrew install cmake ffmpeg pkg-config\n```\n\n### 2. Clone\n\n```sh\ngit clone https://github.com/bartjoyce/video-app --recursive\n```\n\nThe repository includes a submodule for GLFW, so make sure to *recursively* clone the repo. If CMake complains and says it can't find GLFW, it might be because you did not clone it properly. In that case, try:\n\n```sh\ngit submodule update --init\n```\n\n### 3. Build\n\nInside the repo, create a build directory and run CMake within it:\n\n```sh\nmkdir build\ncd build\ncmake ..\nmake\n```\n\n### 4. Run\n\n```sh\n./video-app\n```\n\n## Bonus: Webcam capture with AVFoundation\n\nFor webcam capture:\n\n```sh\ngit checkout test/webcam\ncd build\ncmake ..\nmake\n./video-app\n```\n\nThis will use AVFoundation to display your webcam on the OpenGL surface.\n\n## Todo\n\n- Fix `av_err2str` build problem in gcc ([see issue](https://github.com/joncampbell123/composite-video-simulator/issues/5)).\n- Fix `YUVJ` deprecation problem\n- Fix `sws_scale()` segmentation fault on gcc due to badly constructed output buffers\n- Consider switch to SDL?\n- Replace `sws_scale()` with hardware-accelerated alternative \n- Audio playback\n- Playback of multiple videos simultaneously\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmewj%2Fvideo-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbmewj%2Fvideo-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmewj%2Fvideo-app/lists"}