Использование оболочки ffmepg для преобразования изображений в файл mov ie - PullRequest
0 голосов
/ 03 апреля 2020

Недавно я использовал оболочку ffmpeg Виталия Федорченко под названием NReco.VideoConverter. Это довольно здорово, и мне удалось написать еще одно приложение, которое я надеюсь выпустить вскоре после некоторого тестирования, и я приобрел лицензию на упаковщик (это крутой водяной маркер для видео).

Сейчас я пытаюсь использовать ту же самую обертку для кодирования видео из неподвижных изображений, но, к сожалению, документации очень мало, и я чувствую себя немного мрачно. Я надеюсь, что кто-то, знакомый с оберткой, мог бы помочь.

Я собираю изображения с помощью fileOpenDialogue и выбираю изображения для заполнения listView. Когда я буду готов, я возьму эти изображения для создания массива и создаю изображение приложения mov ie.

    void ConvertToMovie()
    {
        if(listImages.Items.Count > 1)
        {
            var ffMpeg = new NReco.VideoConverter.FFMpegConverter();

            NReco.VideoConverter.FFMpegInput[] ffMpegInputs = new NReco.VideoConverter.FFMpegInput[listImages.Items.Count]; 

            for (int i = 0; i < listImages.Items.Count; i++)
            {
                var SSAImage = new NReco.VideoConverter.FFMpegInput(listImages.Items[i].SubItems[2].Text.ToString());
                ffMpegInputs[i] = SSAImage;
            }


            ConvertSettings csettings = new ConvertSettings();
            csettings.SetVideoFrameSize((int)MovieWidth.Value, (int)MovieHeight.Value);
            csettings.VideoFrameCount = listImages.Items.Count;
            csettings.VideoFrameRate = (int)FPS.Value;

            /*
            string arguement = " -profile:v high ";
            csettings.CustomOutputArgs = arguement;
            */

            if (FormatChooser.SelectedIndex == 0)
            {
                //This just takes the first picture and converts that single frame into a movie.
                ffMpeg.ConvertMedia(ffMpegInputs, @"Converted.avi", Format.avi, csettings);
                //ffMpeg.ConvertMedia(listImages.Items[0].SubItems[2].Text.ToString(), ffMpegInput.Format, @"Converted.avi", Format.avi, csettings);
            }
        }
        else
        {
            MessageBox.Show("You need at least two images to make a movie.", Title);
        }
    }

Передача изображений в виде Массив функции кажется логичным. В списке методов здесь: https://www.nrecosite.com/doc/NReco.VideoConverter/

Однако, единственный метод, который позволяет передавать массив входных данных здесь: https://www.nrecosite.com/doc/NReco.VideoConverter/html/M_NReco_VideoConverter_FFMpegConverter_ConvertMedia.htm

Так что для меня имеет смысл, что именно он будет использовать.

Это генерирует файл .avi, но mov ie содержит только первый кадр из массива.

Я видел, что у кого-то еще была такая же проблема: Видео конвертер Nreco создает видео из последовательности изображений

Однако ответы, похоже, предлагали использовать другой метод, который позволяет вам чтобы передать только один файл изображения, тогда каким-то образом ffmpeg.exe упорядочит остальные из них? Я не мог заставить это работать вообще.

На этом этапе единственный способ заставить его работать - создать для каждого кадра файл mov ie с одним кадром, а затем объединить все файлы mov ie вместе, используя:

https://www.nrecosite.com/doc/NReco.VideoConverter/?topic=html / M_NReco_VideoConverter_FFMpegConverter_ConcatMedia.htm

Это довольно смешное понятие.

...