[FFmpeg-user] Audio captured via AVFoundation is unusable

FFmpeg ffmpeg at ninbura.com
Sun Jun 1 03:28:10 EEST 2025


I'm currently attempting to move from a Windows audio/video capture rig to a Mac. On Windows, I relied heavily on FFmpeg & DirectShow to capture clean audio/video feeds from PCIe capture cards, as well as audio from my RME audio interfaces. I was hoping that I could do the same on macOS with FFmpeg & AVFoundation, but I'm surprised to find that audio captured via FFmpeg + AVFoundation is completely unusable. The resulting output is pitch shifted, riddled with pops and clicks, etc.

It doesn't seem to matter what codecs (aac, mp3, pcm_f32le, etc.) or options I use. Whether I'm capturing audio & video, or just audio. Whether I'm capturing a virtual audio device, or a standard audio device. Whether I'm using FFmpeg installed via Homebrew, or FFmpeg built from source/master. The result is always the same.

Here's an example command and its output:
./ffmpeg -y \
-thread_queue_size 9999 \
-indexmem 9999 \
-f avfoundation \
-i ":Live Gamer 4K 2.1-Audio" \
-c:a pcm_f32le \
-ar 48000 \
-ac 2 \
-vn \
~/Movies/ffmpeg-avfoundation-audio-test.wav

ffmpeg version N-119779-g6c291232cf Copyright (c) 2000-2025 the FFmpeg developers
built with Apple clang version 17.0.0 (clang-1700.0.13.5)
configuration: --prefix=/Users/ninbura/ffmpeg/builds/ffmpeg-master-comprehensive-20250531 --cc=clang --enable-static --disable-shared --enable-pthreads --enable-version3 --enable-gpl --enable-nonfree --enable-ffplay --enable-gnutls --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --enable-libfdk-aac --disable-libjack --disable-indev=jack --enable-audiotoolbox --enable-videotoolbox --enable-neon --extra-cflags=-I/opt/homebrew/include --extra-ldflags='-L/opt/homebrew/lib -Wl,-ld_classic'
libavutil 60. 3.100 / 60. 3.100
libavcodec 62. 3.101 / 62. 3.101
libavformat 62. 0.102 / 62. 0.102
libavdevice 62. 0.100 / 62. 0.100
libavfilter 11. 0.100 / 11. 0.100
libswscale 9. 0.100 / 9. 0.100
libswresample 6. 0.100 / 6. 0.100
2025-05-31 17:54:12.654 ffmpeg[85023:6411645] WARNING: Add NSCameraUseContinuityCameraDeviceType to your Info.plist to use AVCaptureDeviceTypeContinuityCamera.
+++ 0x6000037900e0 0 1 424403882381791
2025-05-31 17:54:12.868 ffmpeg[85023:6411645] WARNING: AVCaptureDeviceTypeExternal is deprecated for Continuity Cameras. Please use AVCaptureDeviceTypeContinuityCamera and add NSCameraUseContinuityCameraDeviceType to your Info.plist.
Input #0, avfoundation, from ':Live Gamer 4K 2.1-Audio':
Duration: N/A, start: 424404.154125, bitrate: 6144 kb/s
Stream #0:0: Audio: pcm_f32le, 48000 Hz, 4.0, flt, 6144 kb/s, Start 424404.154125
Stream mapping:
Stream #0:0 -> #0:0 (pcm_f32le (native) -> pcm_f32le (native))
Press [q] to stop, [?] for help
Output #0, wav, to '/Users/ninbura/Movies/ffmpeg-avfoundation-audio-test.wav':
Metadata:
ISFT : Lavf62.0.102
Stream #0:0: Audio: pcm_f32le ([3][0][0][0] / 0x0003), 48000 Hz, stereo, flt, 3072 kb/s
Metadata:
encoder : Lavc62.3.101 pcm_f32le
[out#0/wav @ 0x600003b9c180] video:0KiB audio:26116KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.000344%
size= 26116KiB time=00:01:17.35 bitrate=2765.7kbits/s speed= 1x elapsed=0:01:17.36 Exiting normally, received signal 2.

Here is the resulting file:
https://drive.proton.me/urls/78BA8YCE8G#MTzDMH2cWWEA

For comparison as to how it should sound, here's a recording created using Ableton Live to capture audio from the same device:
https://drive.proton.me/urls/58Q12XF0XC#HZaHBD7AXVTU

Mac that I'm testing on:
Mac Studio w/ M3 Ultra & 96GB of Unified Memory | macOS v15.5

Additional Mac that I've tested on:
MacBook Pro w/ M3 Pro & 36GB of Unified Memory | macOS v15.5

I'd be grateful if anyone could point out that I'm doing something wrong, as that would obviously be the easiest fix. But it seems to be a bug? A fairly critical bug I would think... doesn't appear that there's any other method of capturing audio via FFmpeg on macOS.

A bit unsure as to how I should proceed, I found a ticket on trac.ffmpeg.org from 10 years ago (https://trac.ffmpeg.org/ticket/4513). But it was closed as duplicate with no link to the duplicate issue. Should I open a new issue there?

I would appreciate any advice regarding how to resolve this.


More information about the ffmpeg-user mailing list