FFmpeg 录屏与录音:从基础命令到自定义场景实战

📅 2026/7/14 13:12:58
FFmpeg 录屏与录音:从基础命令到自定义场景实战
1. FFmpeg 录屏与录音基础入门第一次接触 FFmpeg 录屏时我也被那一长串命令行参数吓到了。但实际用下来发现只要掌握几个核心参数就能解决 80% 的日常录制需求。FFmpeg 最厉害的地方在于它不仅能录制屏幕还能同时捕捉系统声音和麦克风而且完全免费开源。先说说 Windows 下的基础录制命令。要录制整个桌面只需要打开命令提示符输入ffmpeg -f gdigrab -framerate 30 -i desktop output.mp4这个命令里每个参数都很关键-f gdigrab告诉 FFmpeg 使用 Windows 的 GDI 截屏功能-framerate 30设置每秒 30 帧的流畅度-i desktop表示录制整个桌面最后的output.mp4是输出文件名我在实际使用中发现如果只是录制教程视频把帧率降到 15-20 帧反而更合适。因为教学视频不需要太高的流畅度降低帧率能显著减小文件体积。有一次我录制 2 小时的编程教程30 帧的视频要 3GB改成 15 帧后只有 1.2GB画质几乎看不出区别。Linux 用户需要用稍微不同的命令ffmpeg -f x11grab -s 1920x1080 -r 30 -i :0.0 output.mp4这里x11grab是 Linux 的屏幕捕获模块:0.0表示主显示屏的第一个屏幕。如果外接了多个显示器可以通过调整这个参数来选择录制哪个屏幕。录音就更简单了。在 Windows 上录制系统声音ffmpeg -f dshow -i audioStereo Mix output.wav这个命令我经常用来录制在线会议。有次客户需要会议录音但会议软件自带的录音功能出问题了我就用这个命令成功录下了整个会议。注意Stereo Mix这个名称可能因声卡不同而变化如果报错可以先用下面这个命令查看设备列表ffmpeg -list_devices true -f dshow -i dummy2. 高级录制技巧区域选择与画中画很多教程只教全屏录制但实际工作中我们经常只需要录制屏幕的某个区域。比如演示软件操作时可能只想录制软件窗口而不是整个桌面。FFmpeg 在这方面特别灵活我来分享几个实用技巧。录制特定窗口的秘诀是使用窗口标题。比如要录制 Chrome 浏览器ffmpeg -f gdigrab -framerate 30 -i titleChrome output.mp4但这里有个坑窗口标题必须完全匹配包括大小写。我建议先用alttab确认窗口的完整标题。如果窗口标题会变化比如浏览器标签页这个方法就不太稳定。更可靠的方法是直接指定坐标和尺寸。比如要录制屏幕左上角 400x400 像素的区域ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 400x400 -i desktop output.mp4这个功能在做产品演示时特别有用。有一次我需要录制电商后台的数据看板但看板只占屏幕的一小部分用全屏录制会让观众看不清细节。通过精确设置-offset_x、-offset_y和-video_size参数我成功只录制了看板区域生成的视频非常清晰。画中画效果是教学视频的利器。下面这个命令同时录制屏幕和摄像头并把摄像头画面叠加在右下角ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -video_size 320x240 -i videoUSB Camera -filter_complex overlayW-w-10:H-h-10 output.mp4参数解析-video_size 320x240设置摄像头画面大小overlayW-w-10:H-h-10是画中画的关键表示距离右边和底部各 10 像素W和H表示主视频的宽高w和h是叠加视频的宽高我在录制编程教程时就用这个方案主画面显示代码编辑器右下角显示我的头像观众既能看清代码又能看到我的表情互动感很强。3. 音频混合与质量优化单独录制屏幕或声音很简单但要把它们高质量地混合在一起就需要些技巧了。先说最基本的同步录制命令ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audioStereo Mix -c:v libx264 -preset fast -c:a aac output.mp4这里新增的参数很关键-c:v libx264使用 H.264 编码视频兼容性好-preset fast在编码速度和质量间取得平衡-c:a aac使用 AAC 编码音频是 MP4 的标准音频格式但这样录制有个问题如果系统声音和麦克风都要录制怎么办FFmpeg 的解决方案是用amix滤镜ffmpeg -f gdigrab -i desktop -f dshow -i audio麦克风 -f dshow -i audioStereo Mix -filter_complex [1:a][2:a]amixinputs2 -c:v libx264 -preset fast -c:a aac output.mp4这个命令做了三件事录制屏幕视频同时录制麦克风和系统声音用amix把两个音频流混合成一个我在录制在线课程时就用这个方案既能捕捉到我的讲解声音也能录下演示软件的系统声音。不过要注意调整两个音源的音量平衡否则可能会出现一个声音太大另一个太小的情况。视频质量优化方面最重要的参数是-crfConstant Rate Factor。这个值范围是 0-51数值越小质量越高但文件越大。一般推荐ffmpeg -f gdigrab -i desktop -c:v libx264 -crf 23 -preset fast output.mp4-crf 23是公认的甜点值能在质量和文件大小间取得很好平衡。如果追求更高质量可以用 18网络分享可以用 28。我做过测试1080p 视频在-crf 23时每分钟大约 10-20MB画质已经非常好了。4. 实战远程教学录制方案结合我制作在线课程的经验分享一个完整的远程教学录制方案。这个方案需要实现录制讲师屏幕叠加讲师摄像头画面混合系统声音和麦克风添加文字水印输出高质量但文件较小的视频完整命令如下ffmpeg -f gdigrab -framerate 30 -offset_x 100 -offset_y 100 -video_size 1280x720 -i desktop -f dshow -i audio麦克风 -f dshow -i audioStereo Mix -f dshow -video_size 320x180 -i videoLogitech Camera -filter_complex [1:a][2:a]amixinputs2[audio];[0:v][3:v]overlayW-w-20:H-h-20[vid];[vid]drawtextfontfilearial.ttf:textCourse Demo:fontsize24:fontcolorwhite:x20:y20 -c:v libx264 -crf 22 -preset fast -c:a aac -b:a 128k output.mp4这个命令看起来复杂其实可以分解为几个部分-f gdigrab部分录制屏幕的指定区域两个-f dshow分别录制麦克风和系统声音另一个-f dshow录制摄像头-filter_complex做了三件事amix混合两个音频源overlay实现画中画drawtext添加文字水印最后设置视频和音频的编码参数我在实际使用中会给这个命令创建成批处理文件每次录制只需双击运行结束时按q键停止。生成的视频可以直接上传到教学平台不需要再做后期处理。有个实用小技巧如果录制过程中需要暂停可以按CtrlC停止然后再次运行命令时加上-append参数继续录制。不过要注意两次录制的参数必须完全一致否则会出现兼容性问题。