You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:FFmpeg单命令录屏录音压缩及gdigrab报错解决

解决你的FFmpeg录屏+压缩问题

嘿,兄弟!咱们一步步解决你的FFmpeg问题——既然你是新手,我会把每个点讲得明明白白的。

1. 先搞定「Unknown input format: 'gdigrab'」报错

这个报错原因很明确:

  • gdigrab是Windows平台专属的屏幕抓取输入格式,如果你是在Linux/macOS上跑这个命令,肯定会炸!不同平台对应不同的抓取格式:
    • Linux用x11grab
    • macOS用avfoundation
  • 如果你确实是在Windows上运行,那大概率是你的FFmpeg版本没编译gdigrab支持。解决办法很简单:去FFmpeg官方下载完整编译版的安装包(别用那种精简阉割版),确保包里面包含gdigrab模块。

2. 单命令实现录屏+录音+实时压缩

我给你分平台整理好可用的命令,直接抄就能用,参数也给你解释清楚:

Windows平台(解决gdigrab问题后)

要同时抓屏幕和声音,得指定音频输入(麦克风或系统音频),再加上压缩参数(用H.264编码比你之前用的mpeg高效多了):

ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="你的音频设备名称" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output_compressed.mp4

关键参数说明:

  • -framerate 30:录屏帧率,你之前用10也可以,30是更流畅的日常帧率
  • -f dshow -i audio="你的音频设备名称":指定Windows音频输入,不知道设备名的话,先跑这个命令查:ffmpeg -list_devices true -f dshow -i dummy
  • -c:v libx264 -crf 23 -preset medium:H.264视频压缩核心参数,crf控制质量(18-28之间,越小质量越高),preset平衡压缩速度和压缩率(medium是默认,要更快就用fast,要更小文件就用slow)
  • -c:a aac -b:a 128k:音频用AAC压缩,128k比特率足够日常语音/系统声音需求

Linux平台

用x11grab抓屏幕,搭配ALSA或PulseAudio录音频:

ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0 -f alsa -i default -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output_compressed.mp4
  • -video_size 1920x1080:指定录屏分辨率,:0.0是默认显示屏幕
  • -f alsa -i default:用默认ALSA音频设备,换成PulseAudio的话改成-f pulse -i default就行

macOS平台

用avfoundation框架抓屏幕和音频:

ffmpeg -f avfoundation -framerate 30 -i "1:0" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output_compressed.mp4
  • -i "1:0":第一个数字是屏幕设备ID,第二个是音频设备ID,先跑ffmpeg -f avfoundation -list_devices true -i ""就能看到所有设备的ID列表

3. 实时录制压缩后存储到文件夹/数据库

  • 存到文件夹:直接把命令里的output_compressed.mp4换成你想要的路径就行,比如Windows写C:\MyRecordings\screen_rec.mp4,Linux/macOS写/home/you/Recordings/screen_rec.mp4
  • 存到数据库:FFmpeg本身不能直接写数据库,但可以先把压缩后的视频输出到管道,再用脚本把管道内容插入数据库。举个Shell的简单例子(以MySQL为例,需要先装mysql客户端):
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="你的音频设备" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -f mp4 - | mysql -u 你的用户名 -p你的密码 -e "INSERT INTO videos (video_data) VALUES (LOAD_FILE('/dev/stdin'));" 你的数据库名

不过我更推荐你先把视频存到文件夹,再把文件路径存入数据库——这样数据库不会被大视频文件撑得臃肿,后续读取也更高效。

内容的提问来源于stack exchange,提问作者sachinkumar adahalli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:22:28