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 audio="Stereo Mix" output.wav这个命令我经常用来录制在线会议。有次客户需要会议录音,但会议软件自带的录音功能出问题了,我就用这个命令成功录下了整个会议。注意"Stereo Mix"这个名称可能因声卡不同而变化,如果报错可以先用下面这个命令查看设备列表:
ffmpeg -list_devices true -f dshow -i dummy2. 高级录制技巧:区域选择与画中画
很多教程只教全屏录制,但实际工作中我们经常只需要录制屏幕的某个区域。比如演示软件操作时,可能只想录制软件窗口而不是整个桌面。FFmpeg 在这方面特别灵活,我来分享几个实用技巧。
录制特定窗口的秘诀是使用窗口标题。比如要录制 Chrome 浏览器:
ffmpeg -f gdigrab -framerate 30 -i title="Chrome" output.mp4但这里有个坑:窗口标题必须完全匹配,包括大小写。我建议先用alt+tab确认窗口的完整标题。如果窗口标题会变化(比如浏览器标签页),这个方法就不太稳定。
更可靠的方法是直接指定坐标和尺寸。比如要录制屏幕左上角 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 video="USB Camera" -filter_complex "overlay=W-w-10:H-h-10" output.mp4参数解析:
-video_size 320x240设置摄像头画面大小overlay=W-w-10:H-h-10是画中画的关键,表示距离右边和底部各 10 像素W和H表示主视频的宽高,w和h是叠加视频的宽高
我在录制编程教程时就用这个方案,主画面显示代码编辑器,右下角显示我的头像,观众既能看清代码又能看到我的表情,互动感很强。
3. 音频混合与质量优化
单独录制屏幕或声音很简单,但要把它们高质量地混合在一起就需要些技巧了。先说最基本的同步录制命令:
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="Stereo 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 audio="Stereo Mix" -filter_complex "[1:a][2:a]amix=inputs=2" -c:v libx264 -preset fast -c:a aac output.mp4这个命令做了三件事:
- 录制屏幕视频
- 同时录制麦克风和系统声音
- 用
amix把两个音频流混合成一个
我在录制在线课程时就用这个方案,既能捕捉到我的讲解声音,也能录下演示软件的系统声音。不过要注意调整两个音源的音量平衡,否则可能会出现一个声音太大另一个太小的情况。
视频质量优化方面,最重要的参数是-crf(Constant 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 audio="Stereo Mix" -f dshow -video_size 320x180 -i video="Logitech Camera" -filter_complex "[1:a][2:a]amix=inputs=2[audio];[0:v][3:v]overlay=W-w-20:H-h-20[vid];[vid]drawtext=fontfile=arial.ttf:text='Course Demo':fontsize=24:fontcolor=white:x=20:y=20" -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键停止。生成的视频可以直接上传到教学平台,不需要再做后期处理。
有个实用小技巧:如果录制过程中需要暂停,可以按Ctrl+C停止,然后再次运行命令时加上-append参数继续录制。不过要注意两次录制的参数必须完全一致,否则会出现兼容性问题。