FFMPEG为Mac录制输出音频

har*_*ier 4 ffmpeg

我正在尝试使用ffmpeg录制屏幕以及Mac上的传入音频,但是在输入设备列表中,没有“扬声器”。有没有办法获得输出音频?

$ ffmpeg -f avfoundation -list_devices true -i ""

configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid
libavutil      55. 18.100 / 55. 18.100
libavcodec     57. 24.105 / 57. 24.105
libavformat    57. 26.100 / 57. 26.100
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 34.100 /  6. 34.100
libswscale      4.  0.100 /  4.  0.100
libswresample   2.  0.101 /  2.  0.101
libpostproc    54.  0.100 / 54.  0.100
[AVFoundation input device @ 0x7fd5f9600360] AVFoundation video devices:
[AVFoundation input device @ 0x7fd5f9600360] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7fd5f9600360] [1] Capture screen 0
[AVFoundation input device @ 0x7fd5f9600360] [2] Capture screen 1
[AVFoundation input device @ 0x7fd5f9600360] AVFoundation audio     devices:
[AVFoundation input device @ 0x7fd5f9600360] [0] Soundflower (2ch)
[AVFoundation input device @ 0x7fd5f9600360] [1] Built-in Microphone
[AVFoundation input device @ 0x7fd5f9600360] [2] Soundflower (64ch)
: Input/output error
Run Code Online (Sandbox Code Playgroud)

Mr.*_*edy 5

“扬声器”音频是您的系统音频-Soundflower为您提供的访问权限。

假设Soundflower选项被识别为AV Foundation音频设备并显示在ffmpeg avfoundation -list_devices命令生成的输出中,则您的桌面([1] Capture screen 0)和立体声系统声音([0] Soundflower (2ch))的基本捕获将是:

ffmpeg -f avfoundation -i "1:0" Screen.mov

请注意,"1:0""[1] Capture screen 0:[0] Soundflower (2ch)"

我怀疑您的音频听起来不佳的原因是由于深度差异引起的。我的Mac默认音频设置为24位。根据FFmpeg的音频文档

ffmpeg -sample_fmts
表示ffmpeg具有以下格式和位深度:

u8        8 
s16      16 
s32      32 
flt      32 
dbl      64 
u8p       8 
s16p     16 
s32p     32 
fltp     32 
dblp     64 
s64      64 
s64p     64 
Run Code Online (Sandbox Code Playgroud)

...而且我看不到里面有24个。您的录音可能听起来很糟糕,因为比特被截断了。

正如Sarge Borsch所述,您的Audio Midi设置将向您显示您的位深度和采样频率,并为您提供一些选择。您可以在“音频Midi Setup.app” >>“音频设备::内置输出::格式”中更改“扬声器”,直到找到有效的东西,或者可以在FFmpeg line命令中指定位深度以匹配您的设置。据我所知FFmpeg将默认为源的位深度。请注意,在Audio Midi Setup.app中,您的“系统音频”设备将由Finder图标和扬声器图标指示-我通过雷电端口使用外接显示器,并且“系统”音频被路由到该设备,而不是内置在演讲者中。因此,根据您的配置,只需将音频位深更改为16即可使用基本捕获语法:

ffmpeg -f avfoundation -i "1:0" Screen.mov

在此处输入图片说明

值得注意的是,ffmpeg确实处理24位PCM音频:

$  ffmpeg -formats | grep PCM | grep 24
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
Run Code Online (Sandbox Code Playgroud)