FFMPEG录制Mac的输出音频

7

我正在尝试使用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

1
Soundflower 是输出音频的工具,我相信。 - rogerdpack
这是一个第三方驱动程序,用于记录应用程序音频。我尝试将系统输出设置为 Soundflower,并在 ffmpeg 设置中将音频输入设备设置为 0(Soundflower),但音频质量很差。 - hardier
1
尝试打开/Applications/Utilities/Audio MIDI Setup.app并将采样率设置为录制时使用的相同值,这可能会改善质量。 - Display Name
@rogerdpack看起来Ingalls先生又开始使用它了:https://github.com/mattingalls/Soundflower - MmmHmm
@SargeBorsch 我认为“浮动”标准可能适用于ffmpeg的PCM? - MmmHmm
@Mr.Kennedy 是的 - Display Name
2个回答

9
"Speaker"音频是您系统的音频 - 就是Soundflower给您提供访问权限的内容。
鉴于Soundflower选项被识别为AV Foundation音频设备,并显示在由ffmpeg -f avfoundation -list_devices true -i ""命令生成的输出中,对您的桌面进行基本捕捉([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 

...而且我没有看到24。很可能,你的音频录制听起来很差是因为有些位被截断了。
正如Sarge Borsch所指出的,你的音频MIDI设置将显示你的位深度和采样频率,并提供一些选项。你可以在音频MIDI设置应用程序中更改你的“扬声器”>>音频设备::内置输出::格式,直到找到适合的设置,或者你可以在FFmpeg命令行中指定与你的设置相匹配的位深度。据我所知,FFmpeg将默认使用源的位深度。请注意,在音频MIDI设置应用程序中,“系统音频”设备将由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

AVFoundation 库在各种 Mac 计算机上也可以很好地处理 24 位音频深度,但如果音频未被捕获,我建议检查 OSX 中的音频设置。 对于 Apple Mac 设置,在 Audio-MIDI-Setup 实用程序中需要禁用 "Hardware-Rate-Converter"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接