C#で画像のディレクトリからビデオを作成するにはどうすればよいですか?
-
05-07-2019 - |
質問
すべて同じ次元のビットマップのディレクトリがあります。これらのビットマップをビデオファイルに変換したいと思います。ビデオファイル(コーデック)が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++];
}
このようなアプローチは、閲覧ユーザーが画像にアクセスでき、画像をメモリに保持するのに十分なリソースがあり、ビデオがエンコードされるのを待たず、別の再生が必要な場合にうまく機能しますスピード。
...ただ放り投げるだけです。
他のヒント
これを行うには、スプライサーを使用できます。
http://の例3を参照してください。 www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home
編集:
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です。編集サービス。ただし、これが1回限りのプロジェクトである場合、気にする必要はありません。学習曲線は非常に急勾配になる可能性があります。
利用可能なDESサンプルコードにはそれほど多くはありませんが、MSDNの内外には一般的なDirectShowサンプルがたくさんあります。目的に合わせて、こちらを開始することをお勧めします静止画像をビデオソースとして使用する基本的な説明については、
試していませんが、 WindowsムービーメーカーにはAPIと、使用できるXMLファイル形式があります。