{"id":13617564,"url":"https://github.com/Mar2ck/DAIN-Vulkan-GUI","last_synced_at":"2025-04-14T06:34:22.800Z","repository":{"id":54877712,"uuid":"293094787","full_name":"Mar2ck/DAIN-Vulkan-GUI","owner":"Mar2ck","description":"AI-Powered video interpolater (eg. 30fps -\u003e 60fps) for Vulkan devices. Based on dain-ncnn-vulkan and ffmpeg","archived":false,"fork":false,"pushed_at":"2021-01-22T23:00:08.000Z","size":141959,"stargazers_count":78,"open_issues_count":4,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-01T20:47:57.290Z","etag":null,"topics":["cain","dain","ffmpeg","gpu","ncnn","rife","video-interpolation","vulkan"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mar2ck.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}},"created_at":"2020-09-05T14:43:58.000Z","updated_at":"2024-07-29T22:39:45.000Z","dependencies_parsed_at":"2022-08-14T05:30:49.313Z","dependency_job_id":null,"html_url":"https://github.com/Mar2ck/DAIN-Vulkan-GUI","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mar2ck%2FDAIN-Vulkan-GUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mar2ck%2FDAIN-Vulkan-GUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mar2ck%2FDAIN-Vulkan-GUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mar2ck%2FDAIN-Vulkan-GUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mar2ck","download_url":"https://codeload.github.com/Mar2ck/DAIN-Vulkan-GUI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223621855,"owners_count":17174772,"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":["cain","dain","ffmpeg","gpu","ncnn","rife","video-interpolation","vulkan"],"created_at":"2024-08-01T20:01:43.804Z","updated_at":"2024-11-08T02:30:40.097Z","avatar_url":"https://github.com/Mar2ck.png","language":"Python","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# DAIN-Vulkan-GUI\nAI-Powered video interpolater (eg. 30fps -\u003e 60fps) for Vulkan devices. Based on dain-ncnn-vulkan and ffmpeg\n\nWIP Software so expect bugs, GUI soon™\n\n## Download\nWindows | Linux | Google Colab\n:-: | :-: | :-:\n[![windows](./res/windows-64x.png \"Windows\")](https://github.com/Mar2ck/DAIN-Vulkan-GUI/releases) | [![linux](./res/linux-64x.png \"Linux\")](https://github.com/Mar2ck/DAIN-Vulkan-GUI/releases) | [![colab](./res/colab-64x.png \"Google Colab\")](https://colab.research.google.com/github/Mar2ck/DAIN-Vulkan-GUI/blob/master/DAINVulkanCLI-Colab.ipynb)\n\n\n## Usage\nWindows: `.\\DAINVulkanCLI.exe -i \"C:\\Users\\example\\Videos\\test.mp4\" --output-folder \"C:\\Users\\example\\Videos\\DainFolder\"`\n\nLinux: `./DAINVulkanCLI -i \"/home/example/Videos/test.mp4\" --output-folder \"/home/example/Videos/DainFolder\"`\n\n## Features\n* Static frame interpolation\n* Dain-ncnn: 2x, 3x, 4x, 5x, etc. Multiplier-target\n* Cain-ncnn, Rife-ncnn: 2x, 4x, 8x, etc. Multiplier-target\n* Multi-threading (-j)\n* Multi-gpu (-g)\n* Dynamic interpolation (dain-ncnn) (duplicate frames are interpolated)\n* Dynamic 1x mode (framerate stays the same, duplicate frames are replaced with interpolations)\n\n### Todo\n* Dynamic interpolation (cain-ncnn, RIFE)\n* Perfect loop (Last frame leads into the first)\n* Framerate-target\n* Slow-mo mode (framerate stays the same, video is slowed down via interpolation)\n\n### Needs to be fixed by Dain-ncnn author\n* Tiles don't overlap (artifacting when using tiles)\n* Transparency (glitchy output currently)\n* \"vkWaitForFences failed\" error when using large tilesizes on Windows\n\n## Tips\nThe program can be set to process two frames at once (`-j 1:2:2`). This allows for the GPU to be used almost 100% of the time instead of pausing everytime a frame needs to be saved/loaded which gives a very slight speed increase. The downside however is that two frames will be in memory at once so a lower tile size will be needed if there isn't enough VRAM.  \n\nTiles are used by default which can slow down processing. Using a tilesize that's equal to or bigger then the video's resolution will disable tiles and process the frame all at once. Eg. 720p = 1280x720 so use `-t 1280`\n\n## Errors\n\"vkQueueSubmit failed\" and \"vkAllocateMemory failed\" happens when there isn't enough VRAM for the current frame. Use a lower tile size or downscale the video. \n\n## Help message\n```\nusage: DAINVulkanCLI.py [-h] -i INPUT_FILE -O OUTPUT_FOLDER [-o OUTPUT_FILE]\n                        [--delete-output-folder] [-m INTERPOLATION_MODE]\n                        [-x FRAME_MULTIPLIER] [--target-fps TARGET_FPS]\n                        [-e INTERPOLATOR_ENGINE] [--loop-video]\n                        [--duplicate-auto-delete DUPLICATE_AUTO_DELETE]\n                        [-g GPU_ID] [-t TILE_SIZE] [-j THREADS]\n                        [--steps STEPS] [--video-type VIDEO_TYPE]\n                        [--copy-mtime] [--input-fps INPUT_FPS] [--verbose]\n                        [--debug]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -i INPUT_FILE, --input-file INPUT_FILE\n                        Path to input video\n  -O OUTPUT_FOLDER, --output-folder OUTPUT_FOLDER\n                        Folder to output work to\n  -o OUTPUT_FILE, --output-file OUTPUT_FILE\n                        Path to copy final video to (can be directory or file\n                        path)\n  --delete-output-folder\n                        Delete output folder at the end, intended to be used\n                        with --output-file\n  -m INTERPOLATION_MODE, --interpolation-mode INTERPOLATION_MODE\n                        Interpolation type (static/dynamic, default=static)\n  -x FRAME_MULTIPLIER, --frame-multiplier FRAME_MULTIPLIER\n                        Frame multiplier 2x,3x,etc (default=2)\n  --target-fps TARGET_FPS\n                        Calculates frame multiplier based on a target\n                        framerate\n  -e INTERPOLATOR_ENGINE, --interpolator-engine INTERPOLATOR_ENGINE\n                        Pick interpolator: dain-ncnn, cain-ncnn, rife-ncnn\n                        (default=dain-ncnn)\n  --loop-video          [Unimplemented] Interpolates video as a loop (last\n                        frame leads into the first)\n  --duplicate-auto-delete DUPLICATE_AUTO_DELETE\n                        Based on a percentage (Eg. 0.95) will delete any\n                        frames found to be more similar\n  -g GPU_ID, --gpu-id GPU_ID\n                        GPU to use (default=auto) can be 0,1,2 for multi-gpu\n  -t TILE_SIZE, --tile-size TILE_SIZE\n                        Tile size (\u003e=128, default=256) must be multiple of 32,\n                        can be 256,256,128 for multi-gpu\n  -j THREADS, --threads THREADS\n                        Thread count for load/process/save (default=1:2:2) can\n                        be 1:2,2,2:2 for multi-gpu\n  --steps STEPS         If specified only run certain steps 1,2,3 (eg. 1,2 for\n                        1 \u0026 2 only)\n  --video-type VIDEO_TYPE\n                        Video type for output video eg. mp4, webm, mkv\n                        (default=mp4)\n  --copy-mtime          Copy the modified timestamp to output\n  --input-fps INPUT_FPS\n                        Manually specify framerate of input video\n  --verbose             Print additional info to the commandline\n  --debug               Print debug messages to the commandline\n```\n\n## Credits\nInterpolation programs that this project is a wrapper for:\n* https://github.com/nihui/dain-ncnn-vulkan \n* https://github.com/nihui/cain-ncnn-vulkan\n* https://github.com/nihui/rife-ncnn-vulkan\n* https://github.com/hzwer/arXiv2020-RIFE\n\nAll in one program for video decoding/encoding:\n* https://ffmpeg.org/ \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMar2ck%2FDAIN-Vulkan-GUI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMar2ck%2FDAIN-Vulkan-GUI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMar2ck%2FDAIN-Vulkan-GUI/lists"}