Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Functional Spec for Video GIF Capture #6900

Merged
merged 11 commits into from
Oct 29, 2020
Merged

Functional Spec for Video GIF Capture #6900

merged 11 commits into from
Oct 29, 2020

Conversation

dedavis6797
Copy link
Contributor

@dedavis6797 dedavis6797 commented Sep 29, 2020

Summary of the Pull Request

What is this about?
This pull request is adding the functional spec for the Video GIF Capture.

This is for work post-stabilization of current roadmap work and is only the spec for what we are planning to support.

Once everyone has provided feedback, we'll update the spec and then move it to the Wiki.

Easy viewing link to the MD file in spec

PR Checklist

This PR will be closed for feedback October 12th, 2020.

@crutkas crutkas added the Needs-Community Feedback We need additional help with how something should act / look label Sep 30, 2020
@shayne
Copy link

shayne commented Sep 30, 2020

Surprised ShareX wasn't included for comparison. Also, I think window/region selection is hugely important. Having a full screen can be overkill and could require additional cropping/editing which is non-trivial.

Lastly, GIF is perhaps more an idea than a specification here. Recording an animation of what's on-screen and being able to easily share it is the goal. Sites like Giphy, Twitter, etc... don't actually show GIFs. A GIF file has limited support for color and the file size is poorly optimized. Encoding a video and wrapping it in an mp4 would work great.

Coincidentally, ShareX does all of this. You can invoke the screen recorder, select a region or window or entire screen and it uses ffmpeg to encode the video. Dig into the options and it can automatically place it on the clipboard and you're off to the races.

@eguif
Copy link

eguif commented Sep 30, 2020

@shayne There is a certain explanation on the part of the crutkas
#143 (comment)

| Save to MP4 |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![N](./images/GIFSpec/N.png "No") |![Y](./images/GIFSpec/Y.png "Yes") |
| Save to GIF |![N](./images/GIFSpec/N.png "No") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![N](./images/GIFSpec/N.png "No") |![Y](./images/GIFSpec/Y.png "Yes") |
| Copy Captured Media to Clipboard |![N](./images/GIFSpec/N.png "No") |![Y](./images/GIFSpec/Y.png "Yes") |![N](./images/GIFSpec/N.png "No") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |
| Microphone Audio |![Y](./images/GIFSpec/Y.png "Yes") |![N](./images/GIFSpec/N.png "No") |![Y](./images/GIFSpec/Y.png "Yes") |![Y](./images/GIFSpec/Y.png "Yes") |![N](./images/GIFSpec/N.png "No") |![N](./images/GIFSpec/N.png "No") |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious why you don't want to support microphone audio recording too.

This is incredibly handy for explaining something when you're trying to demonstrate a problem that you're making a capture for.

I think it's a small enough thing that you really should consider putting it in scope.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why we think this is a stretch goal is this can have a lot of configuration.

Do you want microphone on this capture? all captures by default? Which microphone? Who is handling the levels, the OS or this tool?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Audio input is very important in such a tool. It's a Power Toy, right?

I really keep an eye on a tool where the screen is capture and a Webcam / other cam can be captured as well and you can choose that the shape of this second screen can have rounded corners and some shadow effects. That's the perfect tool for tutorials on Windows 😊👍

Copy link

@bb10 bb10 Oct 5, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@crutkas

Do you want microphone on this capture? all captures by default?

Since there is going to be a selection of whether you want to capture a click-and-drag rectangle, a window or full screen, in the same UI a toggle for mic on/off could be included. For keyboard shortcuts, an alternative key could be used to initiate a recording with mic. (ctrl -> alt)

Which microphone?

Whichever Audio input device is set as Default Communication Device can be set by default. Additionally, a drop-down in settings to set a different device.

Who is handling the levels, the OS or this tool?

I would say the OS.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd be happy with 'default communications mic'.

I have a mic that has it's own gain, so I'd be ok with levels set by the OS.

I think the only significant option is 'mic on' or 'mic off' and default to off.

Alternatively, this could be handled by a hotkey just turning on mic passthru (since then it'll go thru the desktop audio).

@jasongaylord
Copy link

jasongaylord commented Sep 30, 2020

It would be nice if these enhancements would also enhance Print Key. There are other print screen applications, but allowing Print Key to be directly mapped to screen capture or to have an option for:

  • Screen capture
  • Active window capture
  • Video recording
  • Video recording of a certain region

That would be nice. I think the Snip tool, as mentioned in the spec, would help to accomplish most of this. But, it would be cool if the power tool allowed us to pop that up without using the Windows Key but rather Print Key.

@radix
Copy link

radix commented Sep 30, 2020

@shayne one place where gif support is still important is in github PRs. My team uses gifs a lot for demonstrating UI changes in PR descriptions. I don't believe that github allows embedding videos yet.

@crutkas
Copy link
Member

crutkas commented Sep 30, 2020

It would be nice if these enhancements would also enhance Print Key. There are other print screen applications, but allowing Print Key to be directly mapped to screen capture or to have an option for:

  • Screen capture
  • Active window capture
  • Video recording
  • Video recording of a certain region

That would be nice. I think the Snip tool, as mentioned in the spec, would help to accomplish most of this. But, it would be cool if the power tool allowed us to pop that up without using the Windows Key but rather Print Key.

You could override the default keystroke that but we have a delicate balance between options for everything versus be a permutation which then becomes a test matrix issue.

I also would really like to focus on what is the MLP, minimal lovable product. Without what you list here, is what is being proposed not good enough?

@crutkas
Copy link
Member

crutkas commented Sep 30, 2020

@shayne ScreenToGif also lets you do it. Also why we are also saying "Video/GIF" instead of only GIF. @radix directly called out why gif support is still needed and is the exact scenario we reference in the golden path scenarios.

Also see Section 3.1.8.3, we directly call out saving it as a video.

ShareX is a great program, we just didn't add it in the compete data since we felt there was a solid amount to see the landscape.

@kalaschnik
Copy link

kalaschnik commented Oct 1, 2020

I tried several gif programs over the years, and one outstanding example of smart processing is GifCam. Why is that? It analyses each frame and compares it with the previous frame regarding a change of information (i.e., change of color). If there is no change, a green pixel will be drawn. Which basically results in a green screen sequence for parts that were not in motion during a sequence.
This looks like this:
greenscreen-gif

And the result looks like this:
greenscreen-gif-motion

This dramatically reduces the file size, compared to a naive approach, which would just save every frame as it is.
Thus, I’m wondering what is used here in this PR?

@enricogior
Copy link
Contributor

enricogior commented Oct 1, 2020

@kalaschnik

I’m wondering what is used here in this PR?

This PR is just a functional specification, it doesn't include technical implementation details, but your suggestion is very good. Thank you for the idea.

@gary-palmer
Copy link

I see you have "Optional Cursor Capture" listed. Not sure if its so obvious it's already included, but would be great to have cursor "click" animation to indicate the user clicked on the screen. In other implementations I have seen this as a circle extending out from the click's point of origin. Perhaps different coloured animation for Left/right cursor clicks?

@jasongaylord
Copy link

Without what you list here, is what is being proposed not good enough?

So the specs at the top list a non goal as GIF to video encoding but in the graph of features, it shows export to video. Are we getting both?

I do like the ease of getting the app to open using the keyboard mapping. But understand if that is not MLP.

@dandrayan
Copy link

Will this hook into and extend the Snip & Sketch utility built into Windows, or be a stand-alone replacement? Either way, I'm excited for this tool to become reality.

I've been using the LICEcap utility recently to do this type of thing because it's free, small, and fast. It has some nice features that would be great to replicate such as a framerate limiting, pause/resume during recording, and a "pre-roll" timer to allow a few seconds to set up your scenario before starting recording.

@crutkas
Copy link
Member

crutkas commented Oct 1, 2020

Thus, I’m wondering what is used here in this PR?

@kalaschnik This PR is just the spec, we are not intentionally talking about implementation

@crutkas
Copy link
Member

crutkas commented Oct 1, 2020

So the specs at the top list a non goal as GIF to video encoding but in the graph of features, it shows export to video. Are we getting both?

@jasongaylord that is referring to transcoding. We will not do GIF->Video and Video->GIF transcoding for existing files

@tobiasmayr1
Copy link

Please add a function to capture a Webcam or other cam for Tutorial stuff. I keep an eye out of the perfect tool, wich offers me the option to get an rounded corners shape from the Webcam with shadow effects out of the box to make tutorials on Windows.

Embedding a microphone / audio is important too.
Please make it happen. #WindowsInsiders

@crutkas
Copy link
Member

crutkas commented Oct 3, 2020

Please add a function to capture a Webcam or other cam for Tutorial stuff. I keep an eye out of the perfect tool, wich offers me the option to get an rounded corners shape from the Webcam with shadow effects out of the box to make tutorials on Windows.

Embedding a microphone / audio is important too.

Please make it happen. #WindowsInsiders

OBS I think would be a better tool for that. Goal here is quick and light weight.

I believe there is nothing wrong having different tools for different proposes.

@garryks
Copy link

garryks commented Oct 4, 2020

Command line/API:

The use case around adding clips to bug capture would benefit from having the ability to setup and launch programmatically and/or through command line. This would allow test automation tools/frameworks/ci-cd pipelines etc. to hook in and setup, start, and stop, and save a recording. Thanks.

@mdtauk
Copy link

mdtauk commented Oct 5, 2020

I see you have "Optional Cursor Capture" listed. Not sure if its so obvious it's already included, but would be great to have cursor "click" animation to indicate the user clicked on the screen. In other implementations I have seen this as a circle extending out from the click's point of origin. Perhaps different coloured animation for Left/right cursor clicks?

Cursor Click, and Touch too

@fearthecowboy
Copy link
Member

Oooh. I like the idea of a simple CLI to go with it.

The number of times that I'd love to be able to say new-screencap -window "XYZ" or new-screencap -x 100 -y 100 -width 1280 -height 720 -outfile cap.mp4 is actually a lot. That'd be putting the power into the powertoy!

@crutkas
Copy link
Member

crutkas commented Oct 13, 2020

We are viewing this PR as closed for feedback. We'll be doing the final updates and will shortly push it to the wiki

@crutkas crutkas removed the Needs-Community Feedback We need additional help with how something should act / look label Oct 14, 2020
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
doc/specs/VideoGIFSpec.md Outdated Show resolved Hide resolved
@enricogior
Copy link
Contributor

enricogior commented Oct 29, 2020

@dedavis6797 @crutkas

3.1.7. Recording:
4. Allow the user to manually modify the recording region prior to the initiation of recording via click-and-drag functionality on the highlighted border like that shown in the UI mock-up depicted in Figure 3.2.4.

Is currently P0, I suggest P1 or even P2 since the users will be able to do the selection as many time as they want to make sure they have the desired selection, so it seems it's not a must have feature for the first release.

3.1.8. Editing

Save Video is P0
Save GIF is P1

Shouldn't be the other way around and have save to GIF in the first release and save to video in the second release?

Copy link
Contributor

@enricogior enricogior left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work!

@crutkas crutkas merged commit e30393e into master Oct 29, 2020
@crutkas crutkas deleted the dev/dedavis/GIFSpec branch October 29, 2020 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet