FFMPEG记录Mac的输出音频

时间:2016-02-23 23:40:30

标签: 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

2 个答案:

答案 0 :(得分:4)

“扬声器”音频是您的系统音频 - 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's audio documentation

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 

......我在那里看不到24。可能,你的录音听起来很糟糕,因为比特被截断了。

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

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

enter image description here

值得注意的是,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

答案 1 :(得分:0)

AVFoundation库在各种Mac计算机上的24位音频深度也能很好地工作,但我建议在没有捕获音频的情况下检查OSX中的音频设置。 对于Apple Mac设置,需要在Audio-MIDI-Setup实用程序中禁用“硬件速率转换器”。