使用ffmpeg命令实现录制摄像头和麦克风

最近有个需求,需要将USB摄像头和麦克风录制为MP4视频文件,之前用过ffmpeg推视频流所以还准备用ffmpeg命令实现,开始以为很简单在网上找点现成得命令用。但是和上次一样,不知道其他博主有没有亲自尝试过还是直接复制过来的,复制到我的设备基本上没有能用得,接下来我就把我得经验给大家分享一下,大家共同努力共同进步!
1.使用ffmpeg准备工作
之前我的文章已经详细讲解过如何下载、安装、使用ffmpeg,这里就不重新叙述了,需要的同学移步到我上一篇文章查看。
ffmpeg下载安装使用
2.录制摄像头
首先仅录制摄像头画面(前提你的电脑得有USB摄像头并且需要知道摄像头名称)
 

ffmpeg -f dshow -i video="aoni webcam A25" -vcodec libx264 test.mp4

问题一:录制期间满屏爆红错误,[dshow @ 02a632a0] real-time buffer [aoni webcam A25] [video input] too full or near too full (99% of size: 3041280 [rtbufsize parameter])! frame dropped!”。 

原因:是这个错误实时缓冲区已满或接近满载,导致帧被丢弃。这可能是由于处理速度跟不上输入视频的速度。

解决方法:加快编码速度加快编码速度有硬件加速、有调整线程数等多种方法,我选择得是调整线程数 -preset veryfast

ffmpeg -f dshow -i video="aoni webcam A25" -vcodec libx264 -preset veryfast test.mp4

问题二:录制期间很正常完美录制完成,但是当我用系统自带视频播放器打开的时候,播放器无法播放,报错: 无法打开test。它使用不受支持的编码设置。0x80004005

原因:使用了系统默认播放器不支持的编码设置

解决方法:更改编码器,依然有很多种方法,例如更改视频编码器为msmpeg4v2、使用-pix_fmt参数设置像素格式为yuv420p,我依然选择第二种,因为第二种方法确保生成的视频文件使用兼容的像素格式,可以在大多数播放器中播放。

ffmpeg -f dshow -i video="aoni webcam A25" -vcodec libx264 -pix_fmt yuv420p -preset veryfast test.mp4

 至此,摄像头的视频完美的录制了。

3.录制摄像头+麦克风

只需在上面命令基础上加上麦克风名称,同样确保你的设备存在麦克风并且知道他的名字。

ffmpeg -f dshow -i video="aoni webcam A25" -f dshow -i audio="麦克风 (aoni A25 Microphone)" -vcodec libx264 -pix_fmt yuv420p -preset veryfast test.mp4

摄像头和麦克风录制都已经完成了。 

4.设置录制分辨率 

这个功能只是我这需求可能涉及到,有需要的小伙伴可以看看

因为我的业务中面对用户比较复杂,摄像头也是五花八门,有4k的、有1080p的、还有更低的或者更高分辨率的,我拿了一个4K的摄像头录制了一下,发现录制的文件大小差不多将近1秒1M,如果时间长很占硬盘存储,于是我决定优化一下,我的想法就是我默认设定最大就是1920*1080分辨率,可以比1920*1080小但是不能超过,添加了 -vf "scale=1920:1080:force_original_aspect_ratio=decrease" 参数。scale=1920:1080 指定了最大宽度和高度,而 force_original_aspect_ratio=decrease 会根据输入视频的原始宽高比自动调整分辨率,以保持宽高比且不超过指定的最大值。

ffmpeg -f dshow -i video="aoni webcam A25" -f dshow -i audio="麦克风 (aoni A25 Microphone)" -vf "scale=1920:1080:force_original_aspect_ratio=decrease" -vcodec libx264 -pix_fmt yuv420p -preset veryfast test.mp4

以上就是我录制摄像头和麦克风的经验,有什么问题欢迎指出。

你可能感兴趣的:(ffmpeg)