[英]How can I create a video from a directory of images in C#?
我有一個位圖目錄,它們都是相同的維度。 我想將這些位圖轉換為視頻文件。 我不在乎視頻文件(編解碼器)是wmv還是avi。 我唯一的要求是我指定幀率。 這不需要跨平台,僅限Windows(Vista和XP)。 我已經閱讀了一些關於使用Windows Media SDK或DirectShow的內容,但它們都沒有明確提供代碼示例。
任何人都可以提供一些見解,或者一些有價值的資源可以幫助我在C#中做到這一點嗎?
如果被拒絕,我將提供一個可能的替代選項 - 緩沖的位圖動畫。
double framesPerSecond;
Bitmap[] imagesToDisplay; // add the desired bitmaps to this array
Timer playbackTimer;
int currentImageIndex;
PictureBox displayArea;
(...)
currentImageIndex = 0;
playbackTimer.Interval = 1000 / framesPerSecond;
playbackTimer.AutoReset = true;
playbackTimer.Elapsed += new ElapsedEventHandler(playbackNextFrame);
playbackTimer.Start();
(...)
void playbackNextFrame(object sender, ElapsedEventArgs e)
{
if (currentImageIndex + 1 >= imagesToDisplay.Length)
{
playbackTimer.Stop();
return;
}
displayArea.Image = imagesToDisplay[currentImageIndex++];
}
如果觀看用戶可以訪問圖像,足夠的資源將圖像保存在存儲器中,不想等待視頻編碼,並且可能存在對不同回放速度的需要,則諸如此類的方法工作良好。
......把它扔出去
您可以使用Splicer執行此操作。
請參閱http://www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home上的示例3
編輯:
using (ITimeline timeline = new DefaultTimeline(25))
{
IGroup group = timeline.AddVideoGroup(32, 160, 100);
ITrack videoTrack = group.AddTrack();
IClip clip1 = videoTrack.AddImage("image1.jpg", 0, 2);
IClip clip2 = videoTrack.AddImage("image2.jpg", 0, 2);
IClip clip3 = videoTrack.AddImage("image3.jpg", 0, 2);
IClip clip4 = videoTrack.AddImage("image4.jpg", 0, 2);
double halfDuration = 0.5;
group.AddTransition(clip2.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
group.AddTransition(clip2.Offset, halfDuration, StandardTransitions.CreateFade(), false);
group.AddTransition(clip3.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
group.AddTransition(clip3.Offset, halfDuration, StandardTransitions.CreateFade(), false);
group.AddTransition(clip4.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
group.AddTransition(clip4.Offset, halfDuration, StandardTransitions.CreateFade(), false);
ITrack audioTrack = timeline.AddAudioGroup().AddTrack();
IClip audio =
audioTrack.AddAudio("soundtrack.wav", 0, videoTrack.Duration);
audioTrack.AddEffect(0, audio.Duration,
StandardEffects.CreateAudioEnvelope(1.0, 1.0, 1.0, audio.Duration));
using (
WindowsMediaRenderer renderer =
new WindowsMediaRenderer(timeline, "output.wmv", WindowsMediaProfiles.HighQualityVideo))
{
renderer.Render();
}
}
您可以使用avifil32庫中的AVI *,這里有一個例子(未嘗試過):
http://www.adp-gmbh.ch/csharp/mandelbrot/index.html
這可能對您有意義:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(使用C#從JPG圖像制作Flash幻燈片)
DirectShow編輯服務是實現您想要的理想技術。 但是,如果這是一次性項目,那么我就不會打擾了 - 學習曲線可能非常陡峭。
雖然在MSDN內外有很多通用的DirectShow樣本,但DES樣本代碼的可用性並不多。 為了您的目的,我建議從這里開始,以獲取使用靜止圖像作為視頻源的基本說明。
我沒有嘗試過,但Windows Movie Maker有一個API,你可以使用XML文件格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.