Narrow audio fallback to data/encode errors and preserve mux failures

This commit is contained in:
vp 2026-03-27 16:47:22 +03:00
parent 462592a359
commit 628af864af

View File

@ -464,6 +464,8 @@ class VideoFromComponents(VideoInput):
output.mux(packet) output.mux(packet)
if audio_stream and self.__components.audio: if audio_stream and self.__components.audio:
encoded_audio_packets = None
flush_audio_packets = None
try: try:
audio_np = waveform.float().cpu().contiguous().numpy() audio_np = waveform.float().cpu().contiguous().numpy()
if not np.isfinite(audio_np).all(): if not np.isfinite(audio_np).all():
@ -472,14 +474,16 @@ class VideoFromComponents(VideoInput):
frame = av.AudioFrame.from_ndarray(audio_np, format='fltp', layout=layout) frame = av.AudioFrame.from_ndarray(audio_np, format='fltp', layout=layout)
frame.sample_rate = audio_sample_rate frame.sample_rate = audio_sample_rate
frame.pts = 0 frame.pts = 0
mux_packets(output, audio_stream.encode(frame)) encoded_audio_packets = audio_stream.encode(frame)
flush_audio_packets = audio_stream.encode(None)
# Flush encoder except (av.error.ArgumentError, ValueError, TypeError) as exc:
mux_packets(output, audio_stream.encode(None)) logger.error(
except Exception as exc: "Audio encode failed due to invalid audio data; skipping audio track and saving video-only output: %s",
logger.warning( exc,
"Failed to encode audio track, saving video-only output: %s", exc
) )
else:
mux_packets(output, encoded_audio_packets)
mux_packets(output, flush_audio_packets)
def as_trimmed( def as_trimmed(
self, self,