ffmpeg指定屏幕区域录屏

发布时间 2023-07-07 19:27:25作者: 1156740846
ffmpeg -hide_banner -loglevel error -f gdigrab  -show_region 1  -framerate 6  -video_size 1914x930 -offset_x 1921 -offset_y 105  -i desktop -pix_fmt yuv420p out6.mp4

 -loglevel error :只显示错误日志

-video_size 1914x930 -offset_x 1921 -offset_y 105: 指定录屏的宽高和起始位置

注意 -video_size 1914x930 屏幕的宽高必须是偶数
否则会报错:
height not divisible by 2 (1914x931)
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

 

-i desktop: 录制屏幕

-pix_fmt yuv420p:指定使用 YUV 4:2:0 输出 颜色编码

当使用典型的 H.264 编码器保存到 MP4 时,ffmpeg 将转换为 YUV 颜色编码,但会选择最高保真度的像素格式,对于 RGB 源,它是 YUV 4:4:4。这种格式与大多数播放器不兼容。解决方法是手动强制 YUV 4:2:0 输出。在输出文件名之前添加 -pix_fmt yuv420p。

 最后,这里的示例是Windows系统,注意系统区别

#if defined(Q_OS_WIN)
        ifmt = av_find_input_format("gdigrab");
#elif defined(Q_OS_LINUX)
        ifmt = av_find_input_format("x11grab");
#elif defined(Q_OS_MAC)
        ifmt = av_find_input_format("avfoundation");
#endif

 

#if defined(Q_OS_WIN)
        url = "desktop";
#elif defined(Q_OS_LINUX)
        url = ":0.0+0,0";
#elif defined(Q_OS_MAC)
        url = "0:0";
#endif