我无法在macOS上实时捕获和编码音频+视频。
我尝试了两种选择:
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
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 gen)无法完成繁重的工作。我想是因为我在ffmpeg上安装了brew,所以它不是在我的机器上编译的,这意味着它不使用Mac中的h264硬件编码器吗?
gstreamer选项也可以使用,但是存在轻微的音频/视频同步问题(音频比视频提前100ms)。我似乎无法向GStreamer队列添加延迟(它忽略了它):
queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 min-threshold-time=100000000
任何对此有经验的人吗?谢谢!
答案 0 :(得分:0)
队列中的更改仅影响内部流程。它不会影响通过管道的缓冲区的时间戳。时间戳定义了音频和视频之间的同步方式。
尝试在视频或音频路径上使用identity
元素,并通过ts-offset
属性设置一些时间戳偏移。