Добавление изображений и аудио в ffMpeg без создания временного файла - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно создать видео, которое в основном представляет собой слайд-шоу, созданное из изображений. Я использую для этого ffmpeg. Кроме того, это видео должно содержать звуковую дорожку.

Я не хочу создавать временные файлы, но хочу полностью работать в памяти. Итак, я использую поток instaed:

  public void AddImages()
        {
            int framerate = 1;
            Process ffmpeg = new Process
            {
                StartInfo = new ProcessStartInfo(FfMpegPath, $"-f image2pipe -framerate {framerate} -i pipe:.jpg -c:v libx264 -b:v 1M -vf scale=640:-1  -y D:\\output.mp4")
                {
                    UseShellExecute = false,
                    RedirectStandardInput = true,
                    RedirectStandardOutput = true
                }
            };
            ffmpeg.Start();

            var position = new TimeSpan();

            while (position < _image.CurrentEpisode.Duration)
            {
                var imageFile = _image.CreateImageForTime(position);                
                using (var imageStream=new MemoryStream())
                {
                    imageFile.Save(imageStream, ImageFormat.Jpeg);
                    imageStream.WriteTo(ffmpeg.StandardInput.BaseStream);
                }
                position = position.Add(TimeSpan.FromSeconds(1));                
            }
            // Add Audio
            GetAudioStream().WriteTo(ffmpeg.StandardInput.BaseStream);
            ffmpeg.StandardInput.BaseStream.Flush();
            ffmpeg.StandardInput.BaseStream.Close();
            ffmpeg.WaitForExit();
        }

Все работает нормально, пока не появится часть «Добавить аудио». Таким образом создается видео, содержащее изображения. Я понимаю, что вставить звук не удается, потому что ffmpeg вместо этого ожидает изображение.

Так есть ли способ сообщить ffmpeg, что следующий элемент inputstream-item больше не изображение, а аудиофайл?

(imageFile содержит действительный Bitmap, а GetAudioStream - действительный поток MemoryStream, созданный из файла mp3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...