我有一個位圖的目錄都是相同的維度。我想將這些位圖轉換爲視頻文件。我不在乎視頻文件(編解碼器)是wmv還是avi。我唯一的要求是我指定幀速率。這不需要跨平臺,Windows(Vista和XP)。我已閱讀了有關使用Windows Media SDK或DirectShow的一些內容,但沒有一個明確提供代碼示例。如何從C#中的圖像目錄創建視頻?
任何人都可以提供一些見解,或一些有價值的資源,可能會幫助我在C#中做到這一點?
我有一個位圖的目錄都是相同的維度。我想將這些位圖轉換爲視頻文件。我不在乎視頻文件(編解碼器)是wmv還是avi。我唯一的要求是我指定幀速率。這不需要跨平臺,Windows(Vista和XP)。我已閱讀了有關使用Windows Media SDK或DirectShow的一些內容,但沒有一個明確提供代碼示例。如何從C#中的圖像目錄創建視頻?
任何人都可以提供一些見解,或一些有價值的資源,可能會幫助我在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++];
}
像這樣的做法效果很好,如果瀏覽者訪問圖像,足夠的資源來保持圖像在內存中,不希望等待的視頻編碼,並且可能會存在需要不同的播放速度。
...只是扔在那裏。
您可以從avifil32庫使用AVI *,這裏有個例子(沒試過):
http://www.adp-gmbh.ch/csharp/mandelbrot/index.html
這可能會感興趣的你:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(請從JPG Flash幻燈片使用C#的圖像)
我還沒有嘗試過,但Windows Movie Maker有一個API和XML文件格式可以使用。
一個理想的技術來實現你想要的是DirectShow Editing Services。但是,如果這是一個一次性項目,那麼我就不會費心了 - 學習曲線可能非常陡峭。
儘管在MSDN內外都有大量的一般DirectShow示例,但DES示例代碼的可用方式並不多。爲了您的目的,我建議從here開始,將靜止圖像用作視頻源的基本說明。
您可以使用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();
}
}
使用FFMPEG和.NET C#的任何完整的源代碼示例應用程序? – Kiquenet 2013-11-28 21:40:40