前提・実現したいこと
C#にてAForge.Video.FFMPEGを使用して、USBカメラの映像を使って動画を作成。
この動画を再生すると、二倍速程度で表示されることが有ります。
これの解決方法が知りたいです。
<動画保存の方法>
動画作成方法は、
AForge.Video.DirectShow.VideoCaptureDeviceのNewFrameイベントにて静止画を取得し、
AForge.Video.FFMPEG.VideoFileWriterのWriteVideoFrameに渡す形です。
一部抜粋 ... vSource.NewFrame += new NewFrameEventHandler(videoRendering); ... private void videoRendering(object sender, NewFrameEventArgs eventArgs) { Bitmap img = (Bitmap)eventArgs.Frame.Clone(); ... Writer.WriteVideoFrame((Bitmap)img.Clone()); }
これで殆どの場合は、問題なく保存できているのですが、
出来上がる動画ファイルを再生すると、2倍速~5倍速程度で表示される事があります。
原因と思われる動作
NewFrameイベントは、通常では30ms程度に1回発火します(30fps固定?)
問題の現象が起きる場合では、この間隔が長くなり、60ms~100ms程度になります。
結果として、1秒間に取得できる画像の数が、半分以下になります。
こうして、不足した画像の数で30fpsの動画を作成するため、再生すると倍速となって見えるのではないか、と考えています。
その他・環境について
環境によって、起きたり起きなかったりします。
サンプルが少ないため、OSのバージョンなのか、.NETなのかは不明です。
また、起きる環境でも100%起きるわけでは有りません。
なにか情報をお持ちであれば、ぜひ教えて下さい。
よろしくお願いします。
あなたの回答
tips
プレビュー