Simple and efficient screen recording utility for Windows.

Related tags

Graphics wcap
Overview

wcap

Simple and efficient screen recording utility for Windows.

Get latest binary here: wcap.exe

  • press Ctrl + PrintScreen to start recording monitor (where mouse cursor currently is positioned)
  • press Ctrl + Win + PrintScreen to start recording currently active window
  • press any of previous combinations to stop recording
  • right click on tray icon to change settings

Info

wcap uses Windows.Graphics.Capture API available since Windows 10 version 1903, May 2019 Update (19H1) to capture contents of window or whole monitor. Captured texture is submitted to Media Foundation to encode video to mp4 file with hardware accelerated H264 codec. Using capture from compositor and hardware accelerated encoder allows it to consume very little CPU and memory.

You can choose in settings to capture only client area or full size of window - client area will not include title bar and borders for standard windows style. Recorded video size is determined by initial window size.

Video is encoded with H264 codec using Media Foundation API. By default hardware encoder is preferred, but you can disable it in settings - then video will be encoded using Microsoft Media Foundation H264 software encoder. It will be automatically used in case GPU/driver does not provide hardware accelerated encoder. You might want to explicitly use software encoder on older GPU's as their hardware encoder quality is not so great.

Audio is captured using WASAPI loopback recording and encoded using Microsoft Media Foundation AAC encoder.

Recorded mp4 file can be set to use fragmented mp4 format in settings. Fragmented mp4 file does not require "finalizing" it. Which means that in case application, or GPU drvier crashes or you run out of disk space, the partial mp4 file will be valid for playback. The disadvantage of fragmented mp4 file is that it is a bit larger than normal mp4 format, and seeking is slower.

You can use settings dialog to restrict max resolution of video - captured image from monitor or window will be scaled down to keep aspect ratio if you set any of max width/height settings to non-zero value. Similarly framerate of capture can be reduced to limit maximum amount of frames per second. Setting it to zero will use compositor framerate which is typically monitor refresh rate. Lower video framerate will give higher quality video for same bitrate and reduced GPU usage. If you notice too many dropped frames during recording, try reducing video resolution and framerate.

Capture of mouse cursor in video can be disabled when using Windows 10 version 2004, May 2020 Update (20H1) or newer.

Building

To build the binary from source code, have Visual Studio 2019 installed, and simply run build.cmd.

Future plans

  • Capture video from fixed position rectangle on screen
  • Allow to set max file size or duration of recording
  • Maybe automatically handle default audio device changes when recording audio?
  • Maybe allow to choose HEVC codec? Could be useful for recording in HDR 10-bit format

License

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.

Comments
  • Latest version records a green screen

    Latest version records a green screen

    Latest version records an empty green video, and a second after I press the shortcut to stop recording, the program exits. I don't know if this was introduced in this particular version, cause I've missed a couple of updates.

    This is on a Thinkpad with Windows 11, Intel GPU HD4600, Core i5 4300M

    I tried both the provided binary, and also built it myself.

    opened by immortalx74 10
  • Capturing active window results in empty files

    Capturing active window results in empty files

    Hi there, first let me thank you for this amazing tool :)

    While the modes capturing the monitor and rectangle work, I've noticed the "active window" mode creates 0-byte files on my system.

    If there's anything I can do to help debug this issue, let me know!

    Microsoft Windows [Version 10.0.19043.1415]
    

    Cheers

    opened by jtconsol 5
  • Incorrect detection of Windows version

    Incorrect detection of Windows version

    I was trying to run this, and got this error: image

    My Windows version: image

    I am definitely meeting the requirement stated. I altered Capture_IsSupported to simply return TRUE and that prevents the error but the program still doesn't appear to run; I've just hidden the error.

    I don't know enough about C++ to be able to print out dwMajorVersion and dwBuildNumber to the command line. Apparently, adding #include <stdio.h> at the top of the file isn't enough to make printf work.

    opened by naikrovek 5
  • recording fps drops when recording games

    recording fps drops when recording games

    Hi, thanks for this terrific work.

    I encountered a problem when I use wcap.exe to record games such as HORIZON 5 or Microsoft Flight Simulator, the FPS in result file may drop to 10 or even less especial when the camera moves (the FPS in games didn't fluctuate). I have tried lots of combination settings(including FPS, hardware/software encoding, resolutions, etc...), but none of them helps.

    I tried to modify some codes but am unfamiliar with Windows Media Foundation and d3d program. I saw some error logs but I don't know if they were relative to this issue. It happens when the code runs into IMFSinkWriter_SetInputMediaType

    2022-09-02 19:58:22.875     1B48 [AMFH264AsyncEncoderMF]   Error: ..\..\..\..\..\runtime\src\mft\vceencoder\H264AsyncEncoderMFT.cpp(179):OnCheckInputType(1): Output type must be set first.
    2022-09-02 19:58:22.875     1B48 [AMFAsyncMFTBase]   Error: ..\..\..\..\..\runtime\src\mft\mft-framework\AsyncMFTBase.cpp(709):AsyncMFTBase(1)::OnCheckInputType(StreamID=0) - failed with HRESULT(0xC00D6D60)
    2022-09-02 19:58:22.875     1B48 [AMFH264AsyncEncoderMF]   Error: ..\..\..\..\..\runtime\src\mft\vceencoder\H264AsyncEncoderMFT.cpp(514):OnSetOutputType(1): failed to set MF_MT_FRAME_RATE set to 60/1, HRESULT(0x80070057)
    

    BTW, I am using the RX 6900 with the latest Driver, and the System version is windows 11. Do you have any idea about how to improve the recording performance when recording games?

    I tried to use the native game recording App by Windows system and obs-studio with WCG used, but neither of them has this problem.

    opened by chenjie4255 3
  • Audio via Microphone capture

    Audio via Microphone capture

    Hi,

    Is audio capture via microphone a planned feature? wcap does not appear to record from my attached microphone, but it does capture system audio.

    Thanks

    opened by JesseRMeyer 1
  • Fixed build script when trying to compile after invoking VsDevCmd.bat…

    Fixed build script when trying to compile after invoking VsDevCmd.bat…

    … instead of vcvarsall.bat.

    Calling “VsDevCmd.bat -arch=x64 -host_arch=x64” does not set the environment variable %Platform% unlike “vcvarsall.bat x64”. %VSCMD_ARG_TGT_ARCH% is defined when invoking both batch files.

    opened by vhebert-gh 0
  • Feature request: command line trigger

    Feature request: command line trigger

    Would it be feasible to add the ability to launch (if not already loaded) and trigger active window (or full screen) recording with a flag from the command line (or a script)?

    opened by cowsaysfoo 1
  • WCap does not record what my monitor renders.

    WCap does not record what my monitor renders.

    In particular, when recording both window & monitor via Neverwinter Nights Enhanced Edition, I cannot see my cursor while recording. While the recorded video shows it, it does not actually capture what is on my screen.

    Link to issue here.

    opened by MarleVVLL 3
Owner
Mārtiņš Možeiko
Mārtiņš Možeiko
Single header C library for rendering truetype text to the screen

kc_truetypeassembler.h Single header C library for assembling textured quads for text rendering using a graphics API. It generates a vertices and text

Kevin Chin 24 Nov 12, 2022
Tiny and efficient graph abstractions.

Tiny and efficient graph abstractions. Usage See tinygraph-example.c Interface See documentation in tinygraph.h Building The tinygraph library require

tinygraph 18 Dec 14, 2022
SMAA is a very efficient GPU-based MLAA implementation (DX9, DX10, DX11 and OpenGL)

SMAA is a very efficient GPU-based MLAA implementation (DX9, DX10, DX11 and OpenGL), capable of handling subpixel features seamlessly, and featuring an improved and advanced pattern detection & handling mechanism.

Jorge Jimenez 848 Dec 30, 2022
Canny edge detection, one of the efficient edge detection algorithms is implemented on a Zedboard FPGA using verilog

In this project, Canny edge detection, one of the efficient edge detection algorithms is implemented on a Zedboard FPGA using verilog. The input image is stored on a PC and fed to the FPGA. The output processed image is displayed on a VGA monitor.

Jeffrey Samuel 4 Jan 4, 2023
Utility on top of the Flutter Driver API that facilitates measuring the performance of your app in an automated way created by Very Good Ventures 🦄

Very Good Performance Developed with ?? by Very Good Ventures ?? Utility on top of the Flutter Driver API that facilitates measuring the performance o

Very Good Open Source 80 Dec 22, 2022
Alpha Plot is a free application for Scientific Data Analysis and Visualization for Windows, Linux and Mac OS X

Alpha Plot is a free application for Scientific Data Analysis and Visualization for Windows, Linux and Mac OS X (probably BSD also). Web Link Website

Arun Narayanankutty 171 Dec 26, 2022
Pencil2D is an animation/drawing software for Windows, macOS, Linux, and FreeBSD.

Pencil2D is an animation/drawing software for Windows, macOS, Linux, and FreeBSD. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics. Pencil2D is free and open source.

Pencil2D 1.2k Jan 7, 2023
This repo will sort of document my story of learning vulkan with VulkanSDK and cl (msvc) on windows.

Learning Vulkan This repo is a means of documenting my journey with learning Vulkan's basics on windows. Because of the binaries in the LunarG VulkanS

null 2 Dec 8, 2021
[WIP] A media playback library for Dart & Flutter apps on Windows & Linux. Based on libVLC & libVLC++.

dart_vlc Bringing power of VLC to Flutter & Dart apps on Windows & Linux Installation dependencies: ... dart_vlc: ^0.0.1 Documentation Create a ne

Hitesh Kumar Saini 417 Dec 29, 2022
Paint program for Unix. Inspired by MS Paint (Windows 95-98).

Classic Colors Classic Colors is a simple and efficient paint program for Unix systems, inspired by MS Paint (Windows 95-98 version). It is built on t

Justin Meiners 25 Dec 9, 2022
Decompilation of 3D Pinball for Windows – Space Cadet

Decompilation of 3D Pinball for Windows – Space Cadet

Muzychenko Andrey 2.4k Jan 9, 2023
Android port of 3D Pinball for Windows – Space Cadet

SpaceCadetPinball Android port of 3D Pinball for Windows – Space Cadet Based on: https://github.com/k4zmu2a/SpaceCadetPinball TODO Add proper controls

Iscle 108 Dec 31, 2022
This repo contains the DirectX Graphics samples that demonstrate how to build graphics intensive applications on Windows.

DirectX-Graphics-Samples This repo contains the DirectX 12 Graphics samples that demonstrate how to build graphics intensive applications for Windows

Microsoft 4.9k Dec 26, 2022
A very simple and light-weight drawing app made with qt and C++.

Blackboard A very simple and light-weight drawing app made with qt and C++. It supports tablet and pen pressure with the help of QTabletEvents. So you

null 1 Nov 15, 2021
A C++ commandline for use in servers and chat software. Provides very simple asynchronous input/output.

commandline A C++ commandline for use in servers and terminal chat software. Provides very simple asynchronous input/output. Supports reading and writ

Lion 70 Dec 20, 2022
A simple single point light shadow mapping with OpenGL 3.3 and C++

omni-directional-light-example Using OpenGL 3.3 with C++ Basically a single light map, no lighting model was used Usage Build the executable outside A

Mohammad Issawi 4 Feb 10, 2022
A simple mirror simulator made with OpenGL 3.3 and C++

Mirror-Example A simple mirror example using OpenGL 3.3 with C++. Theory It basically constructs a camera at the mirror location, by determining its v

Mohammad Issawi 4 Feb 10, 2022
Simple console tool to get all the information from DXGI and Direct3D 12 on current system

D3d12info Simple console tool to get all the information from DXGI and Direct3D 12 (D3D12) on current system. Built and tested on Windows 10 64-bit us

Adam Sawicki 40 Dec 8, 2022
This module is a simple, lightweight and flexible way to generate QR codes in Godot

QRCodeTexture Godot Module Summary This module is a simple, lightweight and flexible way to generate QR codes in Godot. It provides a new type of text

Ben Armstrong 18 Oct 20, 2022