diff --git a/src/filter/plugins/FfmpegFilterPlugin.cxx b/src/filter/plugins/FfmpegFilterPlugin.cxx
index db377ca5e..94e83f50a 100644
--- a/src/filter/plugins/FfmpegFilterPlugin.cxx
+++ b/src/filter/plugins/FfmpegFilterPlugin.cxx
@@ -54,6 +54,9 @@ PreparedFfmpegFilter::Open(AudioFormat &in_audio_format)
 		Ffmpeg::DetectFilterOutputFormat(in_audio_format, buffer_src,
 						 buffer_sink);
 
+	if (!out_audio_format.IsDefined())
+		throw std::runtime_error("Unable to determine FFmpeg filter output format");
+
 	return std::make_unique<FfmpegFilter>(in_audio_format,
 					      out_audio_format,
 					      std::move(graph),
diff --git a/src/lib/ffmpeg/DetectFilterFormat.cxx b/src/lib/ffmpeg/DetectFilterFormat.cxx
index 4367307d5..7b44eabb4 100644
--- a/src/lib/ffmpeg/DetectFilterFormat.cxx
+++ b/src/lib/ffmpeg/DetectFilterFormat.cxx
@@ -62,8 +62,14 @@ DetectFilterOutputFormat(const AudioFormat &in_audio_format,
 	frame.Unref();
 
 	err = av_buffersink_get_frame(&buffer_sink, frame.get());
-	if (err < 0)
+	if (err < 0) {
+		if (err == AVERROR(EAGAIN))
+			/* one sample was not enough input data for
+			   the given filter graph */
+			return AudioFormat::Undefined();
+
 		throw MakeFfmpegError(err, "av_buffersink_get_frame() failed");
+	}
 
 	const SampleFormat sample_format = FromFfmpegSampleFormat(AVSampleFormat(frame->format));
 	if (sample_format == SampleFormat::UNDEFINED)
diff --git a/src/lib/ffmpeg/DetectFilterFormat.hxx b/src/lib/ffmpeg/DetectFilterFormat.hxx
index 662f0e733..18bf61994 100644
--- a/src/lib/ffmpeg/DetectFilterFormat.hxx
+++ b/src/lib/ffmpeg/DetectFilterFormat.hxx
@@ -35,6 +35,9 @@ namespace Ffmpeg {
  * between.
  *
  * This function can throw if the FFmpeg filter fails.
+ *
+ * @return the output format or AudioFormat::Undefined() if it was not
+ * possible to determine the format
  */
 AudioFormat
 DetectFilterOutputFormat(const AudioFormat &in_audio_format,