出于某种原因,某些音乐会SoundFlower无法捕捉音频。 即有SoundFlower,但当我将输入\输出切换到SoundFlower时,我无法获得任何声音。我没有任何声音的空文件。
好的,我是怎么试着听到的......
仅供参考:
$ system_profiler SPSoftwareDataType
Software:
System Software Overview:
System Version: OS X 10.10.5 (14F1912)
Kernel Version: Darwin 14.5.0
Boot Volume: Macintosh HD
Boot Mode: Normal
Computer Name: Craig Computer
User Name: Craig (craigm)
Secure Virtual Memory: Enabled
Time since boot: 1 day22:12
要检查AVFoundation的工作原理:
$ ./ffmpeg -h demuxer = avfoundation
Demuxer avfoundation [AVFoundation input device]:
AVFoundation input device AVOptions:
-list_devices <int> .D...... list available devices (from 0 to 1) (default false)
true .D......
false .D......
-video_device_index <int> .D...... select video device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1)
-audio_device_index <int> .D...... select audio device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1)
-pixel_format <pix_fmt> .D...... set pixel format (default yuv420p)
-framerate <video_rate> .D...... set frame rate (default "ntsc")
-video_size <image_size> .D...... set video size
-capture_cursor <int> .D...... capture the screen cursor (from 0 to 1) (default 0)
-capture_mouse_clicks <int> .D...... capture the screen mouse clicks (from 0 to 1) (default 0)
获取AVFoundation音频设备列表:
$ ./ffmpeg -f avfoundation -list_devices true -i&#39;&#39;
ffmpeg version 3.1.1-tessus Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --as=yasm --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
[AVFoundation input device @ 0x7fda40421000] AVFoundation video devices:
[AVFoundation input device @ 0x7fda40421000] [0] Built-in iSight
[AVFoundation input device @ 0x7fda40421000] [1] Capture screen 0
[AVFoundation input device @ 0x7fda40421000] AVFoundation audio devices:
[AVFoundation input device @ 0x7fda40421000] [0] Soundflower (64ch)
[AVFoundation input device @ 0x7fda40421000] [1] Built-in Microphone
[AVFoundation input device @ 0x7fda40421000] [2] Soundflower (2ch)
[AVFoundation input device @ 0x7fda40421000] [3] Built-in Input
: Input/output error
好的,我们在设备中安装了SoundFlower:
[AVFoundation输入设备@ 0x7fda40421000] [2] Soundflower(2ch)
然后我运行AppleScript,它将切换到&#34; SoundFlower(2ch)&#34;:
enableSF(&#34;输入&#34)
enableSF(&#34;输出&#34)
其中enableSF(stdname)为:
on enableSF(stdname)
tell application "System Preferences"
-- activate
tell anchor stdname of pane "com.apple.preference.sound" to reveal
tell application "System Events"
tell application process "System Preferences"
tell tab group 1 of window 1
delay 2
set rowslist to selected of row of table 1 of scroll area 1
set counter to 0
repeat with id in rowslist
set counter to counter + 1
set rowName to (value of text field 1 of row counter of table 1 of scroll area 1)
set output to stdname & " " & rowName
set scrpt to "echo \"" & output & "\" >> ~/Desktop/ds.log"
do shell script scrpt
if (rowName is equal to "Soundflower (2ch)") then
set selected of row counter of table 1 of scroll area 1 to true
set output to "
!!! FOUND SF for " & stdname & " " & rowName
set scrpt to "echo \"" & output & "\" >> ~/Desktop/ds.log"
log output
do shell script scrpt
exit repeat
end if
end repeat
end tell
end tell
end tell
end tell
end enableSF
结果我得到了这个:
input Internal Microphone
input Line In
input Digi CoreAudio Device
input Soundflower (2ch)
!!! FOUND SF for input Soundflower (2ch)
output Headphones
output Digi CoreAudio Device
output Soundflower (2ch)
!!! FOUND SF for output Soundflower (2ch)
这意味着我们切换到SoundFlower。实际上同样可以用手完成,但脚本对我来说更可靠。
好的,接下来我们可以尝试通过SOX保存一些音频:
$ /Applications/sox-14.3.2/sox -d~ / Desktop / out.wav
Input File : 'default' (coreaudio)
Channels : 2
Sample Rate : 44100
Precision : 32-bit
Sample Encoding: 32-bit Signed Integer PCM
In:0.00% 00:00:00.00 [00:00:00.00] Out:0 [ | ] Clip:0
...
...
...
In:0.00% 00:00:02.51 [00:00:00.00] Out:106k [ | ] Clip:0
...
...
...
In:0.00% 00:00:11.80 [00:00:00.00] Out:516k [ | ] Clip:0 /Applications/sox-14.3.2/sox WARN coreaudio: coreaudio: unhandled buffer overrun. Data discarded.
...
...
...
In:0.00% 00:00:12.35 [00:00:00.00] Out:545k [ | ] Clip:0 /Applications/sox-14.3.2/sox WARN coreaudio: coreaudio: unhandled buffer overrun. Data discarded.
...
...
...
In:0.00% 00:00:13.28 [00:00:00.00] Out:582k [ | ] Clip:0
Aborted.
而且,正如您所看到的,SOX为我提供了一个空文件。相反,它提供数据,但没有声音。
这种情况发生在从10.10到10.11.6的所有操作系统上。正常输出应该是这种类型:
In:0.00% 00:00:00.28 [00:00:00.00] Out:8.19k [======|======] Clip:0
...
...
...
In:0.00% 00:00:04.37 [00:00:00.00] Out:188k [ -====|===== ] Hd:1.1 Clip:0
...
...
...
In:0.00% 00:00:08.82 [00:00:00.00] Out:385k [======|=====-] Hd:1.1 Clip:0
In:0.00% 00:00:09.01 [00:00:00.00] Out:393k [-=====|=====-] Hd:1.1 Clip:0
In:0.00% 00:00:09.20 [00:00:00.00] Out:401k [======|======] Hd:1.1 Clip:0