Напишите заголовок flac STREAMINFO из ffmpeg в поток

#.net-core #ffmpeg

Вопрос:

tl;dr

Как я могу записать заголовок flac STREAMINFO , сгенерированный ffmpeg, в выходной поток? Я запускаю ffmpeg из программы .NET core внутри Process потокового ввода-вывода .NET с stdin stdout перенаправлением/. Это приводит к ошибке

[flac @ 000002500a3a3060] не удалось переписать заголовок FLAC.

и закодированный файл flac не содержит информации о заголовке

Более подробная информация

Я использую ffmpeg для перекодирования аудиофайлов flac в программу .NET core. Исходные и целевые данные хранятся в хранилище больших двоичных объектов Azure, поэтому я хочу использовать потоки вместо локальных файлов для перекодирования. У меня это работает, запустив ffmpeg в .NET Process и перенаправив stdout / stdin в потоки больших двоичных объектов Azure. Вот пример команды ffmpeg

ошибка уровня журнала ffmpeg -nostdin -y-i — ac 2 -ar 44100 -sample_fmt s16 -f flac —

Проблема в том, что заголовок flac не записывается. В соответствии с исходным кодом ffmpeg кодирует весь файл flac и стремится вернуться к началу файла, чтобы перезаписать информацию заголовка после кодирования. stdout не доступен для поиска, поэтому заголовок не записывается.

Отсутствующий заголовок сбивает с толку некоторые программы, и они не могут должным образом обрабатывать flac то, что создает моя программа. Мне нужно решение, чтобы написать этот заголовок. Возможно ли это без использования локального временного файла? Я думаю, что мне нужно написать заголовок вручную после завершения кодирования, чтобы это сработало. Спецификация flac показывает, что это заголовок фиксированного размера. Вопрос в том, как получить данные для записи в этот заголовок.