ffmpeg is the perfect tool to transcode video, but you may don’t know that it can also be use to capture your PC’s screen and as I didn’t found a clear page explaining how to do that, I will try to do my own (and hope it will help someone ….)
Performing a screen capture is an usual task to report bug, recording a presentation you make (adding your voice and your webcam recoding over-the-top of your slide), etc…
There is several tools you can found under the web (GOOGLE IT), But you have to setup a new application, you don’t even control the Audio/Video filter used to capture and encode the video. If you want to keep control, you would like my command line based solution.
Note that the solution I describe here is for Windows, but it could also work under Linux with some adaptation, look at –x11grab)
First, check if you have Audio & Video Capture filter:
ffmpeg -list_devices true -f dshow -i dummy
it should return something like:
dshow @ 00000000002fb2e0] DirectShow video devices
dshow @ 00000000002fb2e0] "…."
dshow @ 00000000002fb2e0] DirectShow audio devices
dshow @ 00000000002fb2e0] "…."
If you don’t find a filter name between the quotes, you have to setup filters and /or enable the audio output recoding capabilities.
- Setup Video Capture filter for x86 and x64 (it depend of your ffmpeg version).
I recommend the Unreal Screen Capture DirectShow source filter , download the version you need and perform the installation.
- Setup the Audio Capture. That part depends of your device, but for example on my PC, I have a “Realtek High Definition Audio” Device. I clicked on the speakers icon in the system bar and select “recording device”, I had to enable the “stereoMix” device and boost its capture level.
After check again if ffmpeg detect your device/filter, it should be something like:
dshow @ 00000000002fb2e0] DirectShow video devices
dshow @ 00000000002fb2e0] "UScreenCapture"
dshow @ 00000000002fb2e0] DirectShow audio devices
dshow @ 00000000002fb2e0] "Stereo Mix (Realtek High Defini"
Run your 1st capture
ffmpeg -f dshow -i video="UScreenCapture":audio=
Stereo Mix (Realtek High Defini" cap.mp4
Just hit [q] to stop the recoding and play cap.mp4 (ffplay cap.mp4).
By default, it capture the whole screen, and the whole means ALL your screen i.e. for my dual-screen system I recorded a 3840x1200 video.
Select your ROI(Region Of Interest)
We will use the -vf crop=width:height:xtopleft:ytopleft syntax of ffmpeg to select the part of the big picture we really want to record.
For the example, we will capture the output of a video player, but how to get the windows or video area coordinates ? In fact it’s really simple, I use the small application called “Point Position”.
Using that tool you can get the top-left and bottom-right coordinate of any window you want to capture, and by the way compute the width and height of the area!
Now capture:
fmpeg -f dshow -r 14.985 -i video="UScreenCapture"
:audio="Stereo Mix (Realtek High Defini"
-vf crop=1278:541:98:198,scale=480:270 -c:v libx264 -profile:v baseline -level:v 3.0 -b:v 350k -r 14.985 -pix_fmt yuv420p cap.mp4
here I added several option to set a capture frame-rate, rescale the cropped area and encode the video using explicit parameters (encoder, bit-rate, etc….)
Conclusion:
No need of additional tool to perform a task that our video’s Swiss knife can do !
Aucun commentaire :
Enregistrer un commentaire