Mac下使用FFmpeg进行画中画录屏

gowork 2024年4月7日 0

FFmpeg是一款免费开源的视频处理软件,可以对视频进行格式转换,截图,修改分辨率,提取音频等,也可以是进行视频录制。使用FFmpeg可以实现录屏的同时,使用摄像头拍摄视频,并进行画中画展示。FFmpeg提供命令行,提供免费的画中画录屏功能实现。

MacOS画中画录制命令:

$ ffmpeg -thread_queue_size 50 -f avfoundation -framerate 30 -i "2" \
         -thread_queue_size 50 -f avfoundation -framerate 30 -video_size 640x480 -i "0" \
         -filter_complex 'overlay=main_w-overlay_w-20:main_h-overlay_h-20' \
         -r 30 video.mp4
  • -thread_queue_size 50 -f avfoundation -framerate 30 -i "2" 输入30fps的屏幕视频流, 默认全屏幕。屏幕设备编号为"2", 参考设备编号获取命令。
  • -thread_queue_size 50 -f avfoundation -framerate 30 -video_size 640x480 -i "0" 输入30fps的摄像头视频流,视频大小为640×480。摄像头编号为"0", 参考设备编号获取命令。
  • -filter_complex 'overlay=main_w-overlay_w-20:main_h-overlay_h-20' 合并屏幕视频流和摄像头视频流,右下角展示。
  • -r 30 video.mp4 以30fps的码率保存视频到video.mp4文件中。
  • -thread_queue_size 50 参数可以减少视频卡顿

详细步骤:

1. FFmpeg安装

首先,确保你的系统已经安装了 Homebrew,然后运行brew命令安装FFmpeg。 其他系统可以参照官网安装文档

$ brew install ffmpeg

2. 查看Mac中的视频/音频设备avfoundation 为MacOS下面的参数,其他操作系统参考官方文档

$ ffmpeg -f avfoundation -list_devices true -i ""
[AVFoundation indev @ 0x130604b60] AVFoundation video devices:
[AVFoundation indev @ 0x130604b60] [0] FaceTime高清摄像头
[AVFoundation indev @ 0x130604b60] [1] "******"的相机
[AVFoundation indev @ 0x130604b60] [2] Capture screen 0
[AVFoundation indev @ 0x130604b60] AVFoundation audio devices:
[AVFoundation indev @ 0x130604b60] [0] MacBook Pro麦克风
[AVFoundation indev @ 0x130604b60] [1] "*****"的麦克风

3. MacOS使用FFmpeg屏幕录制-i "2:0"视频使用Capture screen 0,音频使用MacBook Pro麦克风

$ ffmpeg -f avfoundation -r 30 -i "2:0" output.mp4
...
Press [q] to stop, [?] for help
...
frame=  108 fps= 27 q=-1.0 Lsize=     927kB time=00:00:03.58 bitrate=2119.8kbits/s speed=0.91x
...

4. MacOS使用FFmpeg摄像头录制-i "0:0"视频使用FaceTime高清摄像头,音频使用MacBook Pro麦克风

$ ffmpeg -f avfoundation -r 30 -i "0:0" output.mp4
...
Press [q] to stop, [?] for help
...
frame=   71 fps= 23 q=-1.0 Lsize=    1061kB time=00:00:02.52 bitrate=3436.4kbits/s speed=0.818x
...

5. MacOS使用FFmpeg合并屏幕视频流和摄像头视频流,进行画中画展示摄像头视频流

$ ffmpeg -thread_queue_size 50 -f avfoundation -framerate 30 -i "2" \
         -thread_queue_size 50 -f avfoundation -framerate 30 -video_size 640x480 -i "0" \
         -filter_complex 'overlay=main_w-overlay_w-20:main_h-overlay_h-20' \
         -r 30 video.mp4