/// <summary> /// Get next audio/video frame from input /// </summary> /// <returns>Frame buffer for next audio and video frame. NULL if end of file</returns> public FrameBuffer NextFrame() { frame.SampleTime = (long)(timestampSec * TICKS_PER_SECOND); bool haveVideoBuffer = false; bool haveAudioBuffer; if (videoFrameReader != null && videoFrameReader.Read()) { frame.VideoBuffer = videoFrameReader.GetFrame(); haveVideoBuffer = (frame.VideoBuffer != null); } haveAudioBuffer = wavFile.NextSample(frame.AudioBuffer); timestampSec += frameDurationSec; return((haveVideoBuffer || haveAudioBuffer) ? frame : null); }
public static Bitmap GetFrame(string videoPath, double frameTime) { using (var videoFrameReader = new VideoFrameReader(videoPath)) { if (frameTime > 0) { videoFrameReader.Seek(frameTime); } //videoFrameReader.SetFrameWidth(300); if (videoFrameReader.Read()) { return(videoFrameReader.GetFrame()); } return(GetErrorFrame(videoFrameReader.Width, videoFrameReader.Height, "Reading frame failed")); } }
private void ExtractThumbnails() { try { foreach (Content content in _contents) { #region if if (content.Extension == ".avi" || content.Extension == ".mov" || content.Extension == ".mp4" || content.Extension == ".wmv" || content.Extension == ".mpg" || content.Extension == ".mpeg") { string previewFrameDirectory = _previewFramesPath + content.SubDir + "\\"; if (!Directory.Exists(previewFrameDirectory)) { Directory.CreateDirectory(previewFrameDirectory); } using (VideoFrameReader vfr = new VideoFrameReader(_filePath + content.FileName)) { int noFrames = vfr.NumberOfFrames; // save a thumbnail for the first frame for the "My Content" panel int firstFrameIndex; if (noFrames < 50) { firstFrameIndex = 0; } if (noFrames < 200) { firstFrameIndex = 50; } else { firstFrameIndex = 200; } using (Bitmap firstFrame = vfr.GetFrame(firstFrameIndex)) { int height = (int)((float)_thumbnailWidth * ((float)firstFrame.Height / (float)firstFrame.Width)); using (Bitmap thumbnail = new Bitmap(_thumbnailWidth, height)) { using (Graphics g = Graphics.FromImage(thumbnail)) { g.DrawImage(firstFrame, 0, 0, _thumbnailWidth, height); } thumbnail.Save(_thumbnailPath + content.SubDir + "\\" + content.FileNameWithoutExtension + ".jpg"); } } int frameCount = 1; int space = noFrames / _targetNoFrames; for (int frameNumber = 0; frameNumber < vfr.NumberOfFrames; frameNumber = frameNumber + space) { using (Bitmap frame = vfr.GetFrame(frameNumber)) { ImageUtilities.SaveImage(frame, previewFrameDirectory + content.FileNameWithoutExtension + frameCount + ".jpg", _quality); } frameCount++; } } } #endregion } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }