2016-04-20 4 views
0

У меня 400 изображений последовательностей. Я хочу создать из них видеофайл (клип .. mpeg)Как создать видеофайл из файла последовательности изображений?

Я загружаю «AForge.NET», и я пытаюсь посмотреть его, чтобы увидеть, возможно ли это, но я не умею делать какие-либо действия Это.

Как я могу это сделать?

+0

[Который «AForge.Net»] (https://www.nuget.org/packages?q=AForge.NET)? Вы посмотрели [документацию и/или образцы] (http://www.aforgenet.com/framework/)? – RobIII

+0

@Roblll => да .. я смотрю документацию. – Yanshof

+1

... и? Вы смотрели на него так, как будто вы смотрите на заднюю часть книги в книжном магазине?Или вы на самом деле * прочитали * его и попытались понять его? Если да: что не ясно? С чем вам нужна помощь? Можете ли вы задать * конкретный * вопрос/код показа, который вы уже пробовали? Также: взгляните на [это] (http://stackoverflow.com/questions/9744026/image-sequence-to-video-stream). – RobIII

ответ

6

Look up the documentation, найти VideoFileWriter Class, посмотрите на это members см WriteVideoFrame method(s), читать line: «Написать новый кадр видео в открытом в данный момент видеофайл». Бинго. Почти на месте.

Если вы не можете соединить точки, читая подписи методов (WriteVideoFrame(Bitmap)) или не понимают, как использовать Open() overloads или Close() method (почему бы не вы, последние две довольно общие для файла I/O) вы всегда можете Google "VideoFileWriter WriteVideoFrame example", find code, идите оттуда. Мясо функции есть:

VideoFileWriter writer = new VideoFileWriter(); 
writer.Open("myfile.avi", width, height, 25, VideoCodec.MPEG4, 1000000); 
    // ... here you'll need to load your bitmaps 
    writer.WriteVideoFrame(image); 
} 
writer.Close(); 

Так что-то вроде этого, вероятно, следует работать:

using (VideoFileWriter writer = new VideoFileWriter()) 
{ 
    writer.Open(@"d:\myfile.avi", 640, 480, 25, VideoCodec.MPEG4); 
    foreach (var file in Directory.GetFiles(@"d:\foo\bar", "*.jpg")) 
    { 
     writer.WriteVideoFrame(Bitmap.FromFile(file) as Bitmap); 
    } 
    writer.Close(); 
} 

Который, с несколько минут возился вокруг, дал мне что-то вроде этого:

var size = new Size(1600, 1200);     // The desired size of the video 
var fps = 25;          // The desired frames-per-second 
var codec = VideoCodec.MPEG4;      // Which codec to use 
var destinationfile = @"d:\myfile.avi";    // Output file 
var srcdirectory = @"d:\foo\bar";     // Directory to scan for images 
var pattern = "*.jpg";        // Files to look for in srcdirectory 
var searchoption = SearchOption.TopDirectoryOnly; // Search Top Directory Only or all subdirectories (recursively)? 

using (var writer = new VideoFileWriter())   // Initialize a VideoFileWriter 
{ 
    writer.Open(destinationfile, size.Width, size.Height, fps, codec);    // Start output of video 
    foreach (var file in Directory.GetFiles(srcdirectory, pattern, searchoption)) // Iterate files 
    { 
     using (var original = (Bitmap)Image.FromFile(file))  // Read bitmap 
     using (var resized = new Bitmap(original, size))  // Resize if necessary 
      writer.WriteVideoFrame(resized);     // Write frame 
    } 
    writer.Close();         // Close VideoFileWriter 
}             // Dispose VideoFileWriter 

Изменение размера изображения; не все изображения в последовательности должны быть одинаковыми. Если они являются вы можете пропустить этот шаг, просто изменив

using (var original = (Bitmap)Image.FromFile(file))  // Read bitmap 
using (var resized = new Bitmap(original, size))  // Resize if necessary 
    writer.WriteVideoFrame(resized);     // Write frame 

к:

using (var mybitmap = (Bitmap)Image.FromFile(file))  // Read bitmap 
    writer.WriteVideoFrame(mybitmap);     // Write frame 

Также убедитесь, что вы добавляете правильные using заявления; Вы, как минимум, необходимо следующее для приведенных выше примеров:

using AForge.Video.FFMPEG; 
using System.Drawing; 
using System.IO; 

Также вам нужно ссылаться на DLL файлы, как описано here:

... Вы должны были создать проект, добавлена ​​ссылка на библиотеку AForge.Video.FFMPEG, установите целевую платформу на x86 и версию целевой платформы до версии 3.5 или ниже. Если это так, это может продолжаться.

... нам нужно еще несколько библиотек из архива AForge. Вы можете найти их в папке «Внешние файлы \ ffmpeg» внутри архива AForge. Все файлы в этой папке должны быть скопированы в выходную папку вашего проекта Visual Studio. (После того, как мы изменили целевую архитектуру это сейчас должно быть «YourProjectFolder \ Bin \ x86 \ Debug».)

Если он все еще не работы, то скажите нам, что происходит, точные сообщения об ошибках и т.д.

Смежные вопросы