ffmpeg 摄像头 声卡 录屏

使用gdigrab录制屏幕

  //            gdigrab 录屏
            //-s 1920x1080 录制的屏幕宽度、高度
            //- offset_x 100  偏移
            // - offset_y 200  偏移
            //  需要注意宽度、高度分别加上偏移以后不能超出屏幕
            //例如 - s 1920x1080 - offset_x 100 - offset_y 200
            //会有以下报错
            //Capture area(10, 20),(1930, 1100) extends outside window area(0,-1440),(2560, 1080)desktop: I / O error
            //   - i desktop 录制屏幕
            //-thread_queue_size 此选项设置从文件或设备读取时排队数据包的最大数量。低延迟 / 高速率的直播流,如果不及时读取数据包可能会被丢弃;设置此值可以强制 ffmpeg 使用单独的输入线程并在数据包到达时立即读取数据包。默认情况下,ffmpeg 仅在指定了多个输入时才执行此操作。
            //-r 帧率
            //libx264 使用 libx264 编码所有视频流并复制所有音频流。
            //-acodec 设置音频编解码器,copy: 所选流的数据包应从输入文件传送并在输出文件中混合
            //- f 强制输入或输出文件格式。通常会自动检测输入文件的格式,并根据输出文件的文件扩展名猜测格式,因此在大多数情况下不需要此选项。

常用操作

  1. 抓取整个屏幕保存图片
ffmpeg -f gdigrab -i desktop test.png
  1. 截屏指定区域
//调整截图区域需要在输入-i之前
ffmpeg -f gdigrab -s 500x500 -offset_x 100 -offset_y 100 -i desktop   -frames:v 1 test.png
  1. 截屏指定窗口
//通过title指定窗口标题
//输出为jpg,若为png将存在透明窗口的问题
ffmpeg -f gdigrab -i title="Windows 7sp1 x64_677408 - VMware Workstation"   -frames:v 1 test.jpg
  1. 截屏指定窗口指定区域
ffmpeg -f gdigrab  -s 500x500 -offset_x 100 -offset_y 100  -i title="Windows 7sp1 x64_677408 - VMware Workstation"   -frames:v 1 test.jpg
  1. 录制屏幕为视频文件
ffmpeg.exe -r 1 -f gdigrab  -i desktop -vcodec libx264  a.mp4
  1. 录制屏幕指定区域
ffmpeg.exe -r 1 -f gdigrab -s 500x500 -offset_x 100 -offset_y 100  -i desktop -vcodec libx264  a.mp4
  1. 录制屏幕为直播流
ffmpeg -thread_queue_size 1000 -r 30 -f gdigrab -s 1820x880 -offset_x 100 -offset_y 200 -i desktop -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -max_delay 10 -g 50 -sc_threshold 0 -f flv rtmp://xxxxxx
  1. 将摄像头的图像和麦克风的音频录制保存成一个文件
  ffmpeg -f dshow -i video="USB 2861 Device" -f dshow -i audio="线路 (3- USB Audio Device)" -vcodec libx264 -acodec aac -strict -2 mycamera.mkv
  1. 录制桌面和电脑播放的声音
    需要注意打开立体声混音
    右键任务栏声音图标 → ​声音设置​ → ​声音控制面板。
    在 ​录制​ 选项卡中,右键空白处 → ​显示已禁用的设备。
    启用 ​立体声混音​(或类似选项)。
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="立体声混音 (Realtek(R) Audio)" output.mp4
  1. 列出所有的音视频设备
ffmpeg -list_devices true -f dshow -i dummy
  1. 录制屏幕、声卡、扬声器
    [1:a][2:a]:选择第 2 个输入(麦克风)和第 3 个输入(扬声器)的音频流。
    amix=inputs=2:合并 2 个音频输入为一个混合流。
    [a]:将混合后的音频流命名为 a,供后续 -map 引用。
    -map 0:v:选择第一个输入(桌面)的视频流。
    -map "[a]":选择合并后的音频流。
ffmpeg -f gdigrab -framerate 30 -i desktop  
       -f dshow -i audio="麦克风阵列 (适用于数字麦克风的英特尔® 智音技术)"  
       -f dshow -i audio="立体声混音 (Realtek(R) Audio)"  
       -filter_complex "[1:a][2:a]amix=inputs=2[a]"  
       -map 0:v -map "[a]"  
       -vcodec libx264 -preset ultrafast -crf 23  
       -acodec aac -b:a 192k 
       output.mp4
  1. 内存、cpu占用优化
//​​ -f gdigrab:网页1提到这是Windows下的屏幕捕获模块,使用GDI抓取屏幕。所以这个参数指定了输入设备为Windows的屏幕录制。
// ​​-framerate 60:设置输入帧率为60FPS。网页2提到-r参数可以设置帧率,但这里用户用的是-framerate,需要确认是否正确。根据FFmpeg文档,输入帧率可以用-framerate,而输出帧率用-r,所以这里是对的。
​​// -i desktop:指定输入源为整个桌面。网页1中提到了使用desktop作为输入源,适用于全屏录制。
​​// -vcodec libx264:视频编码器选择H.264。网页1和网页2都提到了-c:v或-vcodec用于指定编码器,这里正确使用了libx264。
​​// -preset faster:编码速度预设。网页1指出-preset影响编码速度和压缩率,faster是较快但压缩率较低的选择。
​​// -crf 23:恒定速率因子,控制质量。网页1提到CRF范围18-28,23是常用值,平衡质量和文件大小。
// ​​-bufsize 4M:缓冲区大小。网页2中说明-bufsize用于码率控制缓冲区,配合-maxrate使用,但用户这里没有-maxrate,可能需要指出潜在问题。
// ​​-vf "scale=1920:-1":缩放滤镜,调整分辨率。网页3提到-s或-vf scale用于调整分辨率,这里保持宽高比,高度自动计算。
ffmpeg -f gdigrab -framerate 60  -i desktop  -vcodec libx264 -preset faster -crf 23 -bufsize 4M -vf "scale=1920:-1"  recording.mp4
posted @ 2021-10-22 17:29  Hey,Coder!  阅读(2535)  评论(0)    收藏  举报