How to record a specific window using ffmpeg?

前端 未结 6 820
说谎
说谎 2021-02-18 18:41

I use ffmpeg to record a window using this code:

ffmpeg.exe
-f dshow 
-y 
-i video=\"screen-capture-recorder\":audio=\"virtual-audio-capturer\":audio=\"Microphon         


        
相关标签:
6条回答
  • 2021-02-18 19:02

    This example works for me:

    ffmpeg -f gdigrab -framerate 30 -i title="german.avi - VLC media player" -b:v 3M  germ.flv
    

    where "title" means actual title of a target window.

    Hope this will help.

    0 讨论(0)
  • 2021-02-18 19:02

    I used this to record the prompt

    ffmpeg -rtbufsize 1500M -f dshow -i audio="Microfono (8- Logitech USB Headset)" -f gdigrab -framerate 30 -draw_mouse 1 -i title="Prompt dei comandi" -pix_fmt yuv420p -profile:v baseline -y output\output3_xp.mp4
    pause
    

    But it works only with 100x20 (colxrow) fo the prompt or other divisible screen size, otherwise it gives me an error, this:

    [libx264 @ 0000027c7ed66200] width not divisible by 2 (269x432)
    Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
    Conversion failed!
    

    P.S.: I have this problem also with other windows that has not even width or height. I created a window with tkinter in Python and I get the error, then I gave the window some geometry (300x500) and it worked...

    Strangely, the mouse is a little offset...

    0 讨论(0)
  • 2021-02-18 19:03

    I was also looking for a solution online, but was not satisfied with the answers I found. I have now fiddled together this very simplistic solution for linux:

    ffmpeg -f x11grab -framerate 25 \
        $(xwininfo | gawk 'match($0, /-geometry ([0-9]+x[0-9]+).([0-9]+).([0-9]+)/, a)\
          { print "-video_size " a[1] " -i +" a[2] "," a[3] }') \
        $(date +%Y-%m-%d_%H-%M_%S).mp4
    
    • After executing this command the window can be selected with the mouse pointer

    • The target filename will take the form YYYY-mm-dd_hh_mm_ss.mp4 in the current directory.

    • The awk magic there just parses the window info. It is ugly and only works with gnu awk, but I have not found a better way yet to parse the window geometry into a custom format.

    The syntax to record a specific rectangle on screen is:

    -video_size [width]x[height] -i [x],[y]
    

    and should also work under windows and with dshow, I believe.

    0 讨论(0)
  • 2021-02-18 19:03

    It has mentioned in here:

    By default, it captures the "full screen" of the main desktop monitor (all windows, overlapping, from there, with aero if vista+, without transparent windows if non aero).

    To configure it differently, run the provided "configuration setup utilities/shortcuts" or adjust registry settings before starting a run (advanced users only):

    HKEY_CURRENT_USER\Software\screen-capture-recorder

    with DWORD keys respected of start_XXX etc …​ (see the included file {installdir}\configuration_setup_utility\setup_screen_tracker_params.rb for the full list of registry key values available, or see https://github.com/rdp/screen-capture-recorder-to-video-windows-free/blob/master/configuration_setup_utility/setup_screen_tracker_params.rb#L9 )

    ex: see configuration_setup_utility\incoming.reg file (though NB that those values are in hex, so editing that file is a bit tedious-- I always just use regedit or the accompanying script utilities and don’t edit it by hand).

    To "reset" a value delete its key.

    And you can see in here that there are these registery options:

    • capture_height
    • capture_width
    • start_x
    • start_y
    • default_max_fps
    • stretch_to_width
    • stretch_to_height
    • stretch_mode_high_quality_if_1
    • hwnd_to_track
    • disable_aero_for_vista_plus_if_1
    • track_new_x_y_coords_each_frame_if_1
    • capture_mouse_default_1
    • capture_foreground_window_if_1
    • dedup_if_1
    • millis_to_sleep_between_poll_for_dedupe_changes
    • capture_transparent_windows_including_mouse_in_non_aero_if_1_causes_annoying_mouse_flicker
    • hwnd_to_track_with_window_decoration
    0 讨论(0)
  • 2021-02-18 19:14

    ffmpeg -f x11grab -framerate 25
    $(xwininfo | gawk 'match($0, /-geometry ([0-9]+x[0-9]+).([0-9]+).([0-9]+)/, a)
    { print "-video_size " a[1] " -i +" a[2] "," a[3] }')
    $(date +%Y-%m-%d_%H-%M_%S).mp4

    This doesn't work on windows where xwininfo returns the "size" portion of the geometry in character cells instead of pixels (e.g. terminal windows). To fix this, the size needs to be extracted from the Width: and Height: fields of the xwininfo response.

    0 讨论(0)
  • 2021-02-18 19:15

    ffmpeg -rtbufsize 1500M -f dshow -i audio="virtual-audio-capturer" -f gdigrab -framerate 30 -draw_mouse 1 -i title=RecordWindow -pix_fmt yuv420p -profile:v baseline -y Huangbaohua.mp4

    the RecordWindow is the title of a specified window.

    0 讨论(0)
提交回复
热议问题