在 macOS 上捕获摄像头 + 麦克风并编码为 h264/aac

Capture camera + mic and encode to h264/aac on macOS

我在 macOS 上实时捕获和编码音频+视频时遇到问题。

我尝试了两种选择:

  1. ffmpeg

    ffmpeg -threads 0 -f avfoundation -s 1920x1080 -framerate 25 -I 0:0 -async 441 -c:v libx264 -preset medium -pix_fmt yuv420p -crf 22 -c:a libfdk_aac -aq 95 -y
    
  2. gstreamer

    gst-launch-1.0 -ve avfvideosrc device-index=0 ! video/x-raw,width=1920,height=1080,framerate=25/1 ! vtenc_h264 ! queue ! mp4mux name=mux ! filesink location=out.mp4  osxaudiosrc device=0 ! audio/x-raw ! faac midside=false ! queue ! mux.
    

ffmpeg 选项有效,但仅适用于较低的分辨率。对于更高的分辨率,Mac mini(2018 代)无法完成繁重的工作。我想因为我用 brew 安装了 ffmpeg,所以它没有在我的机器上编译,这意味着它没有在 Mac?

中使用 h264 硬件编码器

gstreamer 选项也能正常工作,但存在轻微的 audio/video 同步问题(音频比视频提前 100 毫秒)。我似乎无法向 GStreamer 队列添加延迟(它会忽略它):

queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 min-threshold-time=100000000

谁有这方面的经验?谢谢!

队列中的更改仅影响内部流。它对通过管道传输的缓冲区的时间戳没有影响。时间戳定义了音频和视频之间的同步方式。

尝试在视频或音频路径上使用 identity 元素,并通过 ts-offset 属性.

设置一些时间戳偏移