Недавно я использовал оболочку 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
Это довольно смешное понятие.